Как получить переменную для увеличения при каждом запуске «return main ();» - PullRequest
0 голосов
/ 03 апреля 2019

Мне нужно, чтобы мой Level увеличивался на 1 каждый раз, когда я использую return main();

Мне нужно что-то, где я не устанавливаю свои переменные в int main(), или чтобы оно обходило level = 0; каждый раз, кроме первого, но я понятия не имею, что делать.

Если есть несколько мастеров кодирования, я был бы очень признателен, если бы вы мне помогли (о да, я заменил Level в приветственном сообщении на "placeholder").

Я попытался создать новый файл, поместив его выше int main() {}, используя переменные, чтобы сделать его, когда он завершает код перед тем, как перейти к началу, устанавливает его в 1, так что он устанавливает level в 0 только если другая переменная (назовем ее reset) равна 1, но это не сработало, потому что при reset в 0 каждый раз, когда это происходит, она запускается снова. Это не сработало, поэтому я избавился от этого.

int main()
{
    int level;
    level = 0;

    system("cls");
    //varibles

    int secret, guess;
    // color
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 4);

    //the number that you guess!
    srand(time(NULL));
    secret = rand() % 100 - 0;

    cout << "   Number Guessing Game!" << endl;
    cout << "----------------------------------" << endl;
    cout << endl;
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 6);
    cout << "Welcome my name is Luffy Computron. your currant level is " << "placeholder" << endl;
    cout << " I will randomly pick a number between 0 and 100" << endl;
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 22);
    cout << "Take a guess" << endl;
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 2);
    cout << "Guess:";
    cin >> guess;
    while (guess != secret) {
        if (guess > secret) {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 6);
            cout << "Too large. Try again." << endl;
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 2);
        }
        if (guess < secret) {
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 6);
            cout << "Too small. Try again." << endl;    
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 2);
        }
        cout << "Guess:";
        cin >> guess;
    }

    if (guess == secret) {
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 6);
        cout << "Congradulations!" << endl;
        if (level == 1) {
            cout << "you are now an untrained aprentice of the computron team";
            cout << "to become an aprentice play 4 more times!";
        }
    }
    Sleep(2000);
    return main();
}

Он должен менять level на единицу при каждом запуске return main(); но это просто остается на 1.

1 Ответ

5 голосов
/ 03 апреля 2019

Не звоните main().Используйте цикл вокруг того, что вы хотели бы повторить:

int main() {
    bool running = true;
    int level = 0;

    while(running) {

        //...

        ++level;
    } // <- your old return main(); replaced with }
}

Это будет цикл между while(running) { и }, отмеченными в коде, пока вы не измените running на false.Вы также можете использовать break; для выхода из ближайшего окружающего цикла, например:

    while(true) {
        if(some_condition) break;
    }

Предполагается, что уровень будет меняться на единицу при каждом запуске return main ();но он просто равен 1.

В вашем текущем коде вы назначаете level = 0; в начале main().При использовании цикла, подобного описанному выше, это назначение произойдет только один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...