编程简单程序的菜单阶段

时间:2011-12-15 19:15:32

标签: c visual-studio-2008

我在Visual C中开发这个uni项目阶段时遇到了问题。我想知道你是否能帮我解决一下这个问题。 在这个阶段,我们必须建立它的菜单,包括这五个子菜单:

  1. 继续上一场比赛......
  2. 单人游戏
  3. 选项
  4. 积分
  5. 最高分
  6. 我们的导航政策:使用向上和向下按钮滚动浏览这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 个答案:

答案 0 :(得分:3)

考虑以下几点:

  1. 您有一个显示项目列表的功能,可让您从列表中选择一个项目。
  2. 如果从函数A()中调用函数B(),则在A()中执行代码后,默认程序流将在B()中恢复。
  3. 如果在main()中选择菜单项会调用显示其自己的项目列表的另一个功能submenu()会怎样?如果您完成执行submenu()并在用户点击Enter键时返回main(),程序流程中会发生什么情况?)

  4. 使用单独的函数来表示子菜单是一种可行的解决方案,但它可能不是最佳实践。在每个函数中有很多复制和粘贴来处理菜单“机制”(显示基本菜单,指示突出显示的选项等),这可能导致修复错误和维护此代码的问题 - 如果存在错误如何显示一个菜单,您必须完成您创建的所有菜单功能并修复每个菜单中的错误。

    如果您希望将其整合为更紧凑和可维护的方法,您可能需要考虑一些事项:

    • 您正在做的是显示一个列表。
    • 您要显示的列表是一系列项目。
    • 每个Item可能包含一个自己的List,或者可能只包含要显示的文本,甚至包含指向另一个函数的指针。

    如何构建一个显示这种List对象并与之交互的函数?