罗培羽—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章 单例模 ...
随机推荐
- UVa11882,Biggest Number
搜索+剪枝 如此水的一个题,居然搞了一上午 出错在bfs与dfs时共用了一个vis数组,导致bfs完后返回dfs应该能访问到的点访问不到 自己想怎么剪枝,想了几个剪枝方法,又证明,又推翻,再想,再证明 ...
- 如何才能通俗易懂的解释javascript里面的"闭包"?
看了知乎上的话题 如何才能通俗易懂的解释javascript里面的‘闭包’?,受到一些启发,因此结合实例将回答中几个精要的答案做一个简单的分析以便加深理解. 1. "闭包就是跨作用域访问变量 ...
- 修改Oracle【12C】字符集
select userenv('language') from dual; //查看系统字符集编码 select * from nls_database_parameters where parame ...
- 【ASP.NET MVC 学习笔记】- 20 ASP.NET Web API
本文参考:http://www.cnblogs.com/willick/p/3441432.html 1.ASP.NET Web API(本文简称Web API),是基于ASP.NET平台构建REST ...
- Android 圆角的效果实现
Android 自定义ImageView实现圆角图片昨天给学生布置作业,写微信首页,也就是聊天的界面,listView里的item中联系人的头像是圆角的,图形界面如下: 那么我就仔细研究了圆角的具体实 ...
- PHP入门,clone和__clone
前 言 这篇文章主要介绍了PHP编程中的__clone()方法使用详解,__clone()方法相当于一个浅拷贝,是PHP入门学习中的基础知识,需要的朋友可以参考下. 1对象是引用数据类型,当使用= ...
- 开发《WORD阅读器》小结(1)
这是一个相对原生的APP开发, 从GITHUB上下载了相应的框架,应该是至少2年以前的一个lovereader,是我能快速找到的为数不多的WORD阅读器的源码.应该是用ECLIPSE开发的,而我现在只 ...
- 微信小程序获取微信的openid
通过登录接口获取登录凭证,然后通过request请求后台获取openid,需要把后台域名放到小程序后台的request 合法域名内: 1.wx.login 获取登录凭证 2.wx.request 发 ...
- HDU1754 I hate it(线段树 单点修改)
好久没打线段树,来一道练练手,但说句实话,I really hate it!!!! 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管 ...
- CodeForces - 385C Bear and Prime Numbers (埃氏筛的美妙用法)
Recently, the bear started studying data structures and faced the following problem. You are given a ...