羅培羽—C語言簡單遊戲編程教學

來源:互聯網
上載者:User

標籤:調試   檔案中   字元   沒有   為我   位置   變數   printf   --   

編寫許多軟體都需要有菜單,那麼如果我們使用tc之類的軟體來編譯器的話,我們該怎麼編寫菜單呢?讓我們一起來試試吧!
第一步:簡單例子
       我們先來寫個最簡單的例子:
#include<stdio.h>/*包含輸入輸出標頭檔*/
int a;/*定義一個變數a,來作為menu的傳回值*/
int menu_a; /*定義一個變數menu_a,來作為menu中輸入數的變數*/
int menu()/*菜單函數*/
{
   printf("1 menu1   2 menu2   3 exit \n");/*在螢幕上輸出雙引號裡面的內容*/
   scanf("%d",& menu_a);/*讓使用者輸入一個數,並把它儲存到變數a中*/
   return(menu_a);/*把輸入的數a作為函數的傳回值*/
}
void main() /*主函數*/
{
    a=menu(); /*包含輸入輸出標頭檔*/
    printf("you choose is %d",a);  /*輸出資訊,你也可以根據需要在這裡對菜單進行判斷*/
    getch(); /*等待按鍵輸入*/
}
運行之後並進行選擇,你應該可以看到如下的畫面:

 

第二步:美化
可是,大家會說:“現在都是什麼年代了,怎麼還用這種菜單啊!”所以我們要來美化我們的菜單。我們修改一下menu(),代碼如下:
int menu()
{
    printf("    --My solfwave-- \n\n");
    printf(" %c menu1\n",4);
    printf("     menu2\n");
    printf("     exit\n");
    scanf("%d",& menu_a);
    return(menu_a);
}
這裡我們只是簡單的調整一下,讓菜單顯示得更漂亮一點點,其中的的二個printf的%c是調用後面參數對應的ASCII碼的字元,這裡參數為4,對應的字元為一個菱形。運行後的效果如:

 

第三步:鍵盤響應
在bios.h標頭檔中有一個bioskey函數,可以判斷我們的按鍵。比如當我們按下鍵盤的“上”的時候它的傳回值為18432,按鍵盤的“下”的時候傳回值為20480,其他鍵的傳回值我們可以從網上搜尋到。
我們先包含以下檔案
#include <bios.h>
       我們要讓菜單的第一個選項為預設選項,所以我們在定義menu_a的同時給它賦值1.
int menu_a=1;
修改後的menu()如下:
int menu()
{
    printf("    --My solfwave-- \n\n");
    printf(" %c menu1\n",4);
    printf("     menu2\n");
    printf("     exit\n");
    while("")/*添加一個無限迴圈*/
   {
    if(bioskey(0)==18432&&menu_a>1)
           {menu_a-=1; printf("%d",menu_a);}
                     /*如果鍵盤上,“上”被按下,而且menu_a 在按“上”後有反應的菜單上時(也就是在第二、第三個菜單)menu_a 減小1(相當於預設菜單向上移動),最後我們把菜單數顯示出來,以便我們清晰地瞭解*/
        else if(bioskey(0)==20480&&menu_a<3)
           {menu_a+=1; printf("%d",menu_a);}
/*如果鍵盤上,“下”被按下,執行相應地操作*/
   }
   /* 本來這裡有句return(menu_a),但這句其實不會被執行,因為程式會在迴圈中被卡住*/
}
程式運行後,你應該可以看到如下效果:(最後一行的2321會根據你按鍵次序的不同而不同)

 

第四步:棱形“游標”
接下來我們就要讓在menu前面的棱形會上下移動了。
因為我們會用到clrscr清屏函數,因此我們還需要包含標頭檔conio.h代碼如下:
#include<conio.h>
我們修改一下menu中while(“”){}裡面的內容,修改如下:
while("")
    {
    if(bioskey(0)==18432&&menu_a>1)
           menu_a-=1; /*以前這句後面的printf只是為了方便我們調試,現在已經沒有作用了,把它刪去*/
       else if(bioskey(0)==20480&&menu_a<3)
           menu_a+=1;
       clrscr(); /*清空螢幕*/
       switch(menu_a) /*判斷menu_a的值*/
       {
            case 1: /*如果menu_a的值是1,也就是棱形游標在第一個菜單的時候*/
                 printf("    --My solfwave-- \n\n"); /*重新顯示螢幕內容,把棱形放在第一個菜單的位置*/
                 printf(" %c menu1\n",4);
                  printf("     menu2\n",4);
                  printf("     exit\n",4);
                  break;
            case 2:
                  printf("    --My solfwave-- \n\n"); ;/*重新顯示螢幕內容,把棱形放在第二個菜單的位置*/
                  printf("     menu1\n",4); ;/*重新顯示螢幕內容,把棱形放在第三個菜單的位置*/
                 printf(" %c menu2\n",4);
                  printf("     exit\n",4);
                 break;
            case 3:
                  printf("    --My solfwave-- \n\n");
                  printf("     menu1\n");
                  printf("     menu2\n");
                  printf(" %c exit\n",4);
                  break;
        }
運行之後,我們就可以通過鍵盤來選擇菜單了,如所示:

 

第五步:響應事件
我們要讓當我們按下斷行符號的時候,程式退出menu函數並給出相應傳回值(當我們按下鍵盤的斷行符號的時候bioskey(0)的傳回值是7181)我們修改一下menu()裡面while(“”){}裡的一小段代碼:
if(bioskey(0)==18432&&menu_a>1)
           menu_a-=1;
else if(bioskey(0)==20480&&menu_a<3)
           menu_a+=1;
else if(bioskey(0)==7181)
           return(menu_a);
這裡我們添加多一個判斷,當鍵盤中的斷行符號被按下時,退出函數menu()並把menu_a作為傳回值。
感言
       學習各類軟體或者遊戲的製作,菜單是其中必不可少的一部分,希望大家在學習中再接再厲。當然,本教程只是一個執行個體,你可以自己做出更漂亮,功能更強大的菜單。

羅培羽—C語言簡單遊戲編程教學

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.