Программирование фазы меню простой программы - PullRequest
0 голосов
/ 15 декабря 2011

У меня была проблема при разработке этого этапа проекта уни в Visual C. Мне было интересно, не могли бы вы оказать мне большую услугу и помочь мне решить ее. На этом этапе мы должны создать его меню, включая следующие пять подменю:

  1. Продолжить последнюю игру ...
  2. Одиночная игра
  3. Опции
  4. Кредиты
  5. Лучшие результаты

Наша политика навигации: прокручивайте эти 5 пунктов кнопками вверх и вниз (стрелки) Мы входим в подменю с помощью Enter, и когда мы в них, мы должны вернуться через Enter снова Esc помогает нам выйти из программы!
Хорошо! Моя проблема - вторая часть, я не могу вернуться из подменю через Enter! Это мой код:

   #include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int m1(int n);
int m2(int n);
int m3(int n);
int m4(int n);
int m5(int n);
int a(int n);
char c,x,y;
int i=1;
int main(){
K: printf("-->Continue last game...\nSingle player\nOptions\nCredits\nTop scores");
    while(1){
        c=getch();
        if (c!=13&&c!=27&&c!=-32) {continue;}
        if (c==13) {a(i); L:c=getch(); if (c==13) {system("cls");goto K;} else goto L;}   
        if (c==27) {system("cls");printf("Press eny key to Exit...");y=getch();break;}
        x=getch();
        if (c==-32&&x==72&&i!=1) (i--); else if (c==-32&&x==72&&i==1) i=5;   
        if (c==-32&&x==80&&i!=5) (i++); else if (c==-32&&x==80&&i==5) i=1;
        switch (i){
            case 1:
        system("cls");
        m1(i);
        break;
        case 2:
        system("cls");
        m2(i);
        break;
        case 3:
        system("cls");
        m3(i);
        break;
        case 4:
        system("cls");
        m4(i);
        break;
        case 5:
        system("cls");
        m5(i);
        break;
        }}
        return 0;
    }
int m1(int n){
    printf("-->Continue last game...\nSingle player\nOptions\nCredits\nTop scores");
    return i;
}
int m2(int n){
    printf("Continue last game...\n-->Single player\nOptions\nCredits\nTop scores");
    return i;
}
int m3(int n){
    printf("Continue last game...\nSingle player\n-->Options\nCredits\nTop scores");
    return i;
}
int m4(int n){
    printf("Continue last game...\nSingle player\nOptions\n-->Credits\nTop scores");
    return i;
}
int m5(int n){
    printf("Continue last game...\nSingle player\nOptions\nCredits\n-->Top scores");
    return i;
}

int a(int n){
    switch (i){
    case 1:  {system("cls");printf("you've chosen \"Continue last game...\" \n\n\n\n\n\n\n\n press Enter to return to main menu");} break;
    case 2: {system("cls");printf("you've chosen \"single player\" \n\n\n\n\n\n\n\n press Enter to return to main menu");}break;
    case 3: {system("cls");printf("you've chosen \"Options\" \n\n\n\n\n\n\n\n press Enter to return to main menu");}break;
    case 4:{system("cls");printf("you've chosen \"Options\" \n\n\n\n\n \tLord.Pooria Rajabzadeh (EiNsTEiN.co(class of 2000))\n\tProducer: Pooria on 15 dec 2011\n\n press Enter to return to main menu");}break;
    case 5: {system("cls");printf("you've chosen \"Top scores\" \n\n\n\t Pooria 100\n\tAkbar 80\n\tAli 60\n\n\n press Enter to return to main menu");}break;
    return i;}
}

1 Ответ

3 голосов
/ 16 декабря 2011

Рассмотрим следующие моменты:

  1. У вас есть функция, которая отображает список элементов и позволяет выбрать элемент из списка.
  2. Если вы вызываете функцию A()из функции B(), когда вы завершаете выполнение кода в A(), поток программы по умолчанию возобновляется в B().
  3. Что происходит, если при выборе пункта меню в main() вызывается другая функция submenu(), который отображает свой список предметов?Что произойдет в потоке программы, если вы завершите выполнение submenu() и вернетесь к main(), когда пользователь нажмет клавишу Enter)?

Использование отдельных функций для представления подменю является работоспособнымрешение, но это, вероятно, не лучшая практика.Существует много копий и вставок для обработки «механики» меню (отображение основного меню, выделение выделенного выбора и т. Д.) В каждой функции, что может привести к проблемам с исправлением ошибок и поддержанием этого кода в течение долгого времени - если есть ошибка вкак отображается одно меню, вы должны просмотреть все созданные вами функции меню и исправить ошибку в каждой из них.

Если вы хотите объединить это в более компактный и обслуживаемый подход,Вот некоторые вещи, о которых вы можете подумать:

  • То, что вы делаете, это отображение списка.
  • Список, который вы отображаете, представляет собой серию элементов.
  • Каждый элемент может содержать собственный список, или, возможно, просто текст для отображения, или даже указатель на другую функцию.

Как бы вы создали функцию для отображения и взаимодействия с этим видомСписок объектов?

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