罗培羽—C语言简单游戏编程教学
编写许多软件都需要有菜单,那么如果我们使用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作为返回值。
感言
学习各类软件或者游戏的制作,菜单是其中必不可少的一部分,希望大家在学习中再接再厉。当然,本教程只是一个实例,你可以自己做出更漂亮,功能更强大的菜单。