Как заказать функции, которые зависят друг от друга? - PullRequest
2 голосов
/ 29 сентября 2019

Я изучил основы C и C ++ в школе в течение последних двух лет, и я только начинаю новый год в этот понедельник, поэтому я хотел немного потренироваться, потому что я многое забыл во время каникул.

Итак, я хочу запрограммировать мини-игру в консоли, которая называется «более или менее».Я должен угадать число, и для каждого предлагаемого числа консоль сообщает мне, является ли секретное число большим или нет.Ничего сумасшедшего.

Я планирую добавить еще одну мини-игру и некоторые опции, поэтому я сделал меню и, просто нажав на число, я выбираю, куда я хочу пойти.

Проблема в том,что я сделал функцию перезапуска в конце игры, которая позволяет мне выбирать, хочу ли я перезапустить игру или вернуться в меню.

Таким образом, функция меню как и после функции мини-игрыно в то же время функция перезапуска должна быть в функции мини-игры (это цикл while) и после функции меню.

Я думаю, что есть другой способ сделать это, но я неноу-хауЯ понятия не имею об этом.

Я описал свой код на английском, потому что он написан на французском (я француз).Вы можете попробовать, не читая перевод, если вы достаточно хороши:)

Спасибо, что нашли время, чтобы помочь случайным людям по всему миру.Я думаю, что вы все - суперинформатики :)

Не стесняйтесь сказать мне, если я сделаю несколько ошибок в языке Шекспира.

// ФУНКЦИЯ МИНИ-ИГРЫ

int Plus_ou_moins() { //More or less - the game
Selection_nombre_mystere(); //function that defines the mistery number
printf("\nRentrez un nombre pour commencer\n"); //Enter a number to begin
printf("\n");
while (nombreEntre != nombreMystere) { //while proposed nb != mystery nb
    scanf("%d", &nombreEntre); //I read then stack the value in a variable
    if (nombreMystere > nombreEntre) //If the number isn't high enough
        printf("+\n"); //Write +
    else if (nombreMystere < nombreEntre) //the opposite
        printf("-\n");
    else if (nombreMystere == nombreEntre) { //I guessed the good number
        printf("Bravo, vous avez trouve le nombre mystere: %d\n", nombreMystere); //THE RESTART PART IN THE MINI-GAME FUNCTION ->                 
        int restart = 0;
        printf("Voulez vous jouer de nouveau ? "); //try again ?
        scanf("%d", &restart);//1=yes 0=no
        if (restart == 0) {
            Affichage_menu(); //I display the menu if it's no
        } else {
            Plus_ou_moins(); //I restart the game if it's yes
        }
    }
}
return 0;}

// ФУНКЦИЯ ДИСПЛЕЯ МЕНЮ

void Affichage_menu(){
printf("=== MENU ===\n"); //Display things
printf("\n");
printf("1. Plus ou moins\n");
printf("2. Pour combien\n");
printf("3. Options\n");
printf("4. Statistiques\n");
Choix(); //I choose the number related to the game(1).
switch (choix) {
    case 1:
        Plus_ou_moins(); //I START THE GAME = IMPOSSIBLE because the game is declared before. Even if I reverse the order of the 2 functions, the menu is not declared at the restart part.
        break;
}}

1 Ответ

1 голос
/ 29 сентября 2019

Ответ заключается в том, что функция меню должна вызывать функцию игры, но функция игры не должна вызывать функцию меню, а функция игры не должна вызывать сама себя.

Чтобы избежать случая, когда игровая функция вызывает себя, вы можете использовать бесконечный цикл: while(1).Таким образом, если пользователь решит играть снова, цикл начнет игру заново.Если пользователь решает выйти из игры, то простая инструкция return отправляет пользователя обратно в меню.

Меню также нуждается в бесконечном цикле.И меню нужно каким-то образом выйти из цикла.Поэтому я бы добавил еще один пункт меню, номер 5 в примере ниже.Когда пользователь выбирает 5, функция возвращается, выходя из цикла.

void Plus_ou_moins(void) { //More or less - the game
    while (1) {  // repeat the game until the user decides to stop
        Selection_nombre_mystere(); //function that defines the mistery number
        printf("\nRentrez un nombre pour commencer\n"); //Enter a number to begin
        printf("\n");
        while (nombreEntre != nombreMystere) { //while proposed nb != mystery nb
            scanf("%d", &nombreEntre); //I read then stack the value in a variable
            if (nombreMystere > nombreEntre) //If the number isn't high enough
                printf("+\n"); //Write +
            else if (nombreMystere < nombreEntre) //the opposite
                printf("-\n");
            else if (nombreMystere == nombreEntre) { //I guessed the good number
                printf("Bravo, vous avez trouve le nombre mystere: %d\n", nombreMystere); //THE RESTART PART IN THE MINI-GAME FUNCTION ->
                int restart = 0;
                printf("Voulez vous jouer de nouveau ? "); //try again ?
                scanf("%d", &restart);//1=yes 0=no
                if (restart == 0) {
                    return; // if no, return to the menu
                }
            }
        }
    }
}

void Affichage_menu(void){
    while (1) {  // repeat the menu until the user decides to exit
        printf("=== MENU ===\n"); //Display things
        printf("\n");
        printf("1. Plus ou moins\n");
        printf("2. Pour combien\n");
        printf("3. Options\n");
        printf("4. Statistiques\n");
        printf("5. Sortir\n");
        Choix(); //I choose the number related to the game(1).
        switch (choix) {
            case 1:
                Plus_ou_moins(); //I START THE GAME
                break;
            case 5:
                return; // exit the menu
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...