罗培羽—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作为返回值。
感言
学习各类软件或者游戏的制作,菜单是其中必不可少的一部分,希望大家在学习中再接再厉。当然,本教程只是一个实例,你可以自己做出更漂亮,功能更强大的菜单。
罗培羽—C语言简单游戏编程教学的更多相关文章
- C语言(简单游戏)-走出迷宫
#include <stdio.h> //宏定义 maze[ROWS][COLS];行和列; #define ROWS 7 #define COLS 6 //绘制迷宫(全局变量) char ...
- 用 C 语言游戏编程开发!果然最担心的事又发生了!
30了.我要怎么办,老了.人就像一头小毛驴,方向都是牵着的人定的. 这个项目从去年开始的,一个手机游戏,当时接这个项目的时候其实没有太多考虑,我一向都喜欢打肿脸充胖子的,好面子,人家找上门来,不能不给 ...
- 教你C 语言简单编程速成
我们将所有的 C 语言要素放置到一份易读的备忘录上. 1972 年,丹尼斯·里奇Dennis Ritchie任职于贝尔实验室Bell Labs,在几年前,他和他的团队成员发明了 Unix .在创建了一 ...
- C语言编写一个简单游戏
感悟:这算是一个起点吧,我都大二了,还这么菜,才开始写游戏,这个游戏很简单,利用随机数猜大小! #include <stdlib.h> #include <stdio.h> # ...
- 【算法】C语言趣味程序设计编程百例精解
C语言趣味程序设计编程百例精解 C/C++语言经典.实用.趣味程序设计编程百例精解(1) https://wenku.baidu.com/view/b9f683c08bd63186bcebbc3c. ...
- 写简单游戏,学编程语言-python篇
好吧, 首先得承认这个题目写的夸大了,人才菜鸟一枚,游戏相关编程也是知道点概念.但是本人对游戏开发比较感兴趣,相信大多数喜欢玩玩游戏,因为它给人确实带来很多乐趣,而编程语言的学习最少对于我来说比较乏味 ...
- PC游戏编程(入门篇)(前言写的很不错)
PC游戏编程(入门篇) 第一章 基石 1. 1 BOSS登场--GAF简介 第二章 2D图形程式初体验 2.l 饮水思源--第一个"游戏"程式 2.2 知其所以然一一2D图形学基础 ...
- 【C语言探索之旅】 第一部分第八课:第一个C语言小游戏
内容简介 1.课程大纲 2.第一部分第八课:第一个C语言小游戏 3.第一部分第九课预告: 函数 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写 ...
- 游戏编程模式 Game Programming Patterns (Robert Nystrom 著)
第1篇 概述 第1章 架构,性能和游戏 (已看) 第2篇 再探设计模式 第2章 命令模式 (已看) 第3章 享元模式 (已看) 第4章 观察者模式 (已看) 第5章 原型模式 (已看) 第6章 单例模 ...
随机推荐
- 【转】循环冗余校验(CRC)算法入门引导
原文地址:循环冗余校验(CRC)算法入门引导 参考地址:https://en.wikipedia.org/wiki/Computation_of_cyclic_redundancy_checks#Re ...
- 【ASP.NET MVC 学习笔记】- 16 Model Binding(模型绑定)
本文参考:http://www.cnblogs.com/willick/p/3424188.html. 1.Model Binding是Http请求和Action方法之间的桥梁,是MVC框架根据Htt ...
- python字符串,列表,字符串,元组,集合的一些方法
字符串方法 __contains__ #等同in name = 'erroy' result = name.__contains__('er') #判断元素是否包含er print(result) T ...
- Linux下MySQL5.7.19
第一次在自己虚机上安装mysql 中间碰到很多问题 在这里记下来,分享一下. linux centOS 6 mysql版本 mysql-5.7.19-linux-glibc2.12-x86_64.ta ...
- sublime text3 开发必备插件
1,Package Control 通俗易懂地说,这个是你在完成安装SublimeText后必须安装的东西.你问为什么?因为有了这个特殊的"插件包",你可以很容易地安装.升级.删除 ...
- 读书笔记-你不知道的JS中-promise
之前的笔记没保存没掉了,好气,重新写! 填坑-- 现在与将来 在单个JS文件中,程序由许多块组成,这些块有的现在执行,有的将来执行,最常见的块单位是函数. 程序中'将来'执行的部分并不一定在'现在'运 ...
- getSystemService详解
android的后台运行在很多service,它们在系统启动时被SystemServer开启,支持系统的正常工作,比如MountService监听是否有SD卡安装及移除,ClipboardServi ...
- css基础语法二(常用文本与背景属性)
[CSS常用文本属性] 1. 字体.字号类:① font-weight: 字体粗细. bold-加粗.normal-正常.lighter-细体 也可以使用100-900数值,400表示normal,7 ...
- 使用js编写一个简单的运动框架
下班后,,没事捣鼓捣鼓个人的小爱好. 首先,说明我的这个运动框架(css所有属性)也是常见的框架一种,健壮性并不是太好,对于新手学习倒是挺好,,若是大神,老司机请拐弯. 上来,我们先定义一个区块,然后 ...
- HTML学习笔记 基础标签及css引用案例 第一节 (原创)参考使用表
<!DOCTYPE html><!--头文件 不是标签 也没有结束,这是声明该文件为HTML5--><html lang="en"><!- ...