C语言程序设计报告.doc
《C语言程序设计报告.doc》由会员分享,可在线阅读,更多相关《C语言程序设计报告.doc(30页珍藏版)》请在三一办公上搜索。
1、吉林工程技术师范学院C语言程序课程设计报告书设计题目: 贪吃蛇 专业: 计算机科学与技术 班级: 1042 学生姓名: 王薇 学号: 06 指导教师: 郭天娇 2011年7月信息工程学院 目录 摘 要.2第一章 绪 论3第二章 问题定义4第三章 总体设计与详细设计5 1.程序的功能介绍 2.程序整体设计说明 3.设计思路 4.数据结构设计及用法说明 5.各模块的功能及程序说明 6.程序结果第四章 编码实现13第五章 调试与测试17第六章 结论20附 录22 附录一:源代码.22 附录二:参考文献29摘 要随着社会的发展,人们生活的步调日益加快,越来越多的人加入了全球化的世界.人们不在拘泥于一小
2、块天地.加班,出差成了现代人不可避免的公务.而此时一款可以随时随地娱乐的游戏成了必需品.在手机和电脑成为人们日用品的社会,一款能在其上能便捷运行的游戏成为买家的参考点.现在我们所要介绍的这一款游戏-贪吃蛇,就是满足以上要求而设计出来的,希望能给玩家带来娱乐.贪吃蛇这一游戏简单易行,操作方便,娱乐性较强,吸引了不少人.这一款游戏紧紧地抓住了人们的心理,虽然简单,却起乐无穷,在人们不断追求更多的欲望下,该游戏给人们带来了追逐的快感,以及成功后的满足感,对于一直处于高压下的现代人是很好的放松工具.关键词: 循环,分支,子函数的调用,链表,接口,子函数调用第一章 绪论 贪吃蛇游戏是目前比较流行的游戏之
3、一,很多操作系统或者流行软件都会带有这种游戏。它既能锻炼思维的严密性,又有很多乐趣。我个人也比较喜欢玩这个游戏,因此,我就借这个机会将这个贪吃蛇游戏用C语言实现了出来,当然,我也借鉴了前人的一些技巧经验。由于时间仓促和本人水平有限,此游戏的制作显得有些粗糙,希望老师能够谅解,我以后将会再接再厉。 贪吃蛇游戏是一款很有趣味的游戏,其开发过程有一定的技巧和方法,其中涉及到二维数组、键盘操作以及图形化函数等方面的知识。本游戏的开发者需要基本掌握显示器中断寄存器的设置。二维数组及结构体的定义、键盘上键值的获取、图形方式下光标的显示各定位,以及部分图形函数的使用。 第二章 问题定义贪吃蛇游戏是一个经典小
4、游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。第三章 总体设计与详细设计1程序功能介绍贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。2程序整体设计说明一个游戏要有开始部分,运行部分,结束部分
5、(实际上开始部分与运行部分是一体的)。3设计思路这个程序的关键是表示蛇的图形以及蛇的移动。用一个小矩形表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用两节表示。移动时必须从蛇头开始,所以蛇不能向相反方向移动,也就是蛇尾不能改作蛇头。如果不按任何键,蛇自行在当前方向上前移,当游戏者按了有效的方向键后,蛇头朝着指定的方向移动,一步移动一节身体,所以当按了有效的方向键后,先确定蛇头的位置,然后蛇身体随着蛇头移动,图形的实现是从蛇头的新位置开始画出蛇,这时由于没有庆平的原因,原来蛇的位置和新蛇的位置差一个单位,所以看起来社会多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现和消失也是画矩形块
6、和覆盖矩形块4数据结构设计及用法说明 开始部分:游戏是运行在图形模式下的,所以第一步一定是初始化图形模式,接着要有开始的界面,就像书有封面一样,我设置了一个游戏的标题画面,除了游戏标题画面我还设置了一个欢迎画面。标题画面以后,还要为游戏的运行部分作初始化,包括绘制游戏运行时的背景,对游戏某些重 要变量的初始化。运行部分:作为游戏的核心部分,这里包括的函数比较多,也就是模块比较多,首先让我模拟一下贪吃蛇的游戏模式:某个世界上突然出现一条蛇,它很短,它的运动神经异常,它没法停止自己的多动症在它的世界里就只有食物,它很饿,也很贪吃;同样在不明原因的情况下,食物从天而降,可惜的是没有落到嘴边;饥饿的主
7、人公,不管它有没有毒,也不问食物的来历,径直向食物爬去;它吃到食物啦,它超出想象的同化能力让食物很快的成为自己身体的一部分,它的身子变长啦。当它吃到第一颗食物时,上帝有给它第二颗,于是它吃了第二颗,于是又变长了,于是又有第三颗它的身子是一直的加长,它不管自己过长身体的麻烦转身不便,继续吃下去,现在它是直接把巴张大,好让食物有个绿色通道。但是在某天的下午,它咬到了自己,它才想起自己是一条毒蛇,于是晕死过去(不是毒死);又或者它往食物冲锋的时候,它失去控制,撞到了墙上。第一轮循环:第一步,出现食物;第二步,蛇不停运动;第三步,检查蛇是撞到自己或墙壁;由第四步起游戏有两条支线(A、B):A :第四步
8、,蛇没有碰到自己或墙壁,蛇继续前进,绘制蛇的动作;第五步,判断蛇是否吃到食物,如果蛇吃到食物,身子变长,原来的食物消失;第六步,让玩家输入控制指令,让蛇在下一轮循环的第二步改变运动方向;第七步,第二轮循环的第一步,重复第一轮的步骤;B:第四步,蛇碰到自己或墙壁,终止游戏。结束部分:游戏结束时,显示“GAME OVER”,已经是约定俗成的规律了,我的游戏也不例外。除了游戏结束画面外,我还设置了一个游戏退出画面,“善始善终”嘛。有了上述的大致划分,我把整个程序划分成(13+2)个模块(其实就是函数)程序结构(流程图)STARTInitgra()Welcome()Title()Initgame()
9、Drawfood() Drawbg() Drawsnake() Snakemove() Eatfood() Close()Checkover()=0 Control()=0Gameover() End 1No keyboard hityesnobreaknoyesyesno依据所需要处理的任务要求,规划输入数据和输出结果,决定存放数据的数据结构。语言中数据结构集中体现在数据类型上,因此在进行语言程序设计时,应统筹规划程序中所使用的变量,数组,指针等,以及它们的类型等。这点是很重要的,如果在此期间选择不合适的变量或者数组,将来修改就十分困难。现在分析一下贪吃蛇游戏中的元素,继而得出与它们对应的在
10、程序中的描述:蛇:基本描述:长度,颜色,位置。对应数据与数据类型:长度虽然可以用坐标表示,但是这样的话,运算量将很大,所以换算成较大的单位节数,以固定长度的每节描述;坐标-整型;颜色-整型; 位置-,坐标。增加的描述:蛇运动的方向,蛇的生命。对应数据与数据类型:这些描述是为了与程序的按键的输入部分与判断游戏结束部分相联系而设的。方向只有四个方向:上下左右。可以设置与之对应的四个整型数:3、4、2、1。生命就只有两种情况:死或生,对应0或1。食物: 基本描述:颜色,位置。对应数据与数据类型:由于颜色设成固定的,所以不再讨论。位置X、Y坐标。增加的描述:食物的存在。对应数据与数据类型:这是为了避免
11、重复出现食物而设置的,与绘制食物的函数有联系。只有两个值:0或1(没有食物或有食物)其他的元素:墙,由于它在显示上是作为背景而存在的,所以并没有什么说明实际的墙壁就是四条直线组成的边框,由坐标描述。还需要的变量:键盘键入的键值(作为全局变量,整型);经常要使用的循环变量;自定义的填充图案;说明文字的字符数组;游戏的记分;游戏的速度(蛇的速度)。i=蛇的节数-1i-第i节的y坐标=第i-1节的y坐标第i节的x坐标=第i-1节的x坐标i0snake.direction蛇的方向第0节的x坐标加10第0节的x坐标减10第0节的y坐标减10第0节的y坐标加10yesno1向右 2向左3向上4向下蛇的不停
12、运动的关键算法的流程图5各模块的功能及程序说明主要模块的实现思路和算法的流程图说明:关键所在蛇不停移动的Snakemove():蛇的不停移动,就是蛇的下一节取代前一节的位置,在计算机中就是蛇下一节的位置坐标变成前一节的位置坐标。在上文中,已定义蛇的位置坐标为数组类型,一组坐标对应一节的位置,假设有i+1节,由0到i节,第i节的坐标取第i-1节的坐标,第i-1节的坐标取第i-2节的坐标直到第1节取第0节的坐标。而第0节的坐标,即蛇头的坐标要往某个方向变化,变化量为蛇每节的长度。蛇的这种坐标轮换需要循环语句使其继续下去。 6程序结果运行程序得到如下初始界面图:程序结果图用一个小矩形表示蛇的一节身体
13、,身体每长一节,增加一个矩形块,蛇头用两节表示:程序结果图蛇没有碰到自己或墙壁,蛇继续前进:程序结果图游戏结束时,显示“GAME OVER”第四章 编码实现1. 主函数main() Main()函数主要实现了对整个程序的运行控制,以及相关功能模块的调用。void Init(void);/*图形驱动*/void Close(void);/*图形结束*/void DrawK(void);/*开始画面*/void GameOver(void);/*结束游戏*/void GamePlay(void);/*玩游戏具体过程*/void PrScore(void);/*输出成绩*/void main(voi
14、d) Init();/*图形驱动*/ DrawK();/*开始画面*/ GamePlay();/*玩游戏具体过程*/ Close();/*图形结束*/2. 图形驱动init()Init()主要功能是初始化屏幕为图形模式函数。void Init(void) int gd=DETECT,gm; initgraph(&gd,&gm,c:tc); cleardevice();3. 开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙void DrawK(void)/*setbkcolor(LIGHTGREEN);*/ setcolor(11); setlinestyle(SOLI
15、D_LINE,0,THICK_WIDTH);/*设置线型*/ for(i=50;i=600;i+=10)/*画围墙*/ rectangle(i,40,i+10,49); /*上边*/ rectangle(i,451,i+10,460);/*下边*/ for(i=40;i0;i-)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/ snake.xi=snake.xi-1; snake.yi=snake.yi-1; /*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/ switch(snake.direction) case 1:snake.x0+=10;break; cas
16、e 2: snake.x0-=10;break; case 3: snake.y0-=10;break; case 4: snake.y0+=10;break; for(i=3;isnake.node;i+)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/ if(snake.xi=snake.x0&snake.yi=snake.y0) GameOver();/*显示失败*/ snake.life=1; break; if(snake.x0595|snake.y0455)/*蛇是否撞到墙壁*/ GameOver();/*本次游戏结束*/ snake.life=1;
17、/*蛇死*/ if(snake.life=1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/ break; if(snake.x0=food.x&snake.y0=food.y)/*吃到食物以后*/ setcolor(0);/*把画面上的食物东西去掉*/ rectangle(food.x,food.y,food.x+10,food.y-10); snake.xsnake.node=-20;snake.ysnake.node=-20; /*新的一节先放在看不见的位置,下次循环就取前一节的位置*/ snake.node+;/*蛇的身体长一节*/ food.yes=1;/*画面上需要出现新
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 报告
链接地址:https://www.31ppt.com/p-2384641.html