1、C语言贪吃蛇程序设计报告山东交通学院C语言课程设计贪吃蛇游戏编程院(系)别 信息工程系 班 级 学 号 姓 名 指导教师 时 间 2011-03-282011-04-01 课 程 设 计 任 务 书题 目 贪吃蛇游戏编程 系 (部) 信息工程系 专 业 班 级 学生姓名 学 号 03 月 28 日至 04 月 01 日 共 1 周指导教师(签字) 系 主 任(签字) 年 月 日一、设计内容及要求贪吃蛇游戏是一个经典小游戏,本设计分为三个等级。一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时等级为1计1分
2、,等级为2计2分,等级为3计3分。接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。二、设计原始资料 C语言程序设计和应用三、设计完成后提交的文件和图表 见正文内容四、进程安排第一天:选择课题,认真分析。第二三天:查找资料,利用学过的知识初步编程。第四五天:写好源代码,进行调试.第六天:整理代码,完善代码.第七天:答辩.五、主要参考资料1.C语言程序设计(谭浩强 清华大学出版社)2.C语言程序设计(张磊 高等教育出版社)3.C语言课程设计案例精编(郭翠英 中国水利水电出版社)4.C语言程序设计教程(李丽娟 人民邮电出版社)5.C语言程序设计思想与实践(林华聪
3、冶金工业出版社)6.C语言程序设计教程(张继温 高等教育出版社)成 绩 评 定 表作品成绩报告成绩口试(答辩)成绩总评成绩一摘要 06.二.题目要求 07三.设计思想 07四.数据结构设计及用法说明07五.程序描述 08六.程序流程图 09七.程序源代码及注释 11八运行结果 23九.课程设计总结 25 十.参考文献 26一摘要:食坊蛇小、当設計3等級分。1匹蛇閉鎖的塀中、塀中無作為出現食品、4通(通)上下左右4方向蛇制御、食品倒、食品食、蛇体長1節()、同時等級11分計算、等級22分計算、等級33分計算。引続食品現、蛇食待、蛇中壁体交差自分体倒。索引:食坊蛇 二题目要求A 用键盘的方向键控制
4、蛇的上下左右移动。B 游戏分为三种难度,SLUG为慢速,每吃一朵花得1分;WORM为中速,每吃一朵花得2分;PYTHON为快速,每吃一朵花得3分。C 游戏目标:操纵屏幕上那条可爱的小蛇,在黑框中不停吃花,而每吃一朵花,蛇的身体都变的更长一些,游戏的难度也会随之加大。D 游戏终止:终止条件1蛇头撞到墙上;终止条件2蛇身形成一个圈,也就是蛇头碰到自身的任何一处。三设计思想1.这个程序的关键是表示蛇的图形以及蛇的移动。用一个小矩形表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用两节表示。移动时必须从蛇头开始,所以蛇不能向相反方向移动,也就是蛇尾不能改作蛇头。如果不按任何键,蛇自行在当前方向上前
5、移,当游戏者按了有效的方向键后,蛇头朝着指定的方向移动,一步移动一节身体,所以当按了有效的方向键后,先确定蛇头的位置,然后蛇身体随着蛇头移动,图形的实现是从蛇头的新位置开始画出蛇,这时由于没有庆平的原因,原来蛇的位置和新蛇的位置差一个单位,所以看起来社会多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现和消失也是画矩形块和覆盖矩形块四数据结构设计及用法说明 1.开始部分:游戏是运行在图形模式下的,所以第一步一定是初始化图形模式,接着要有开始的界面,就像书有封面一样,我设置了一个游戏的标题画面,除了游戏标题画面我还设置了一个欢迎画面。标题画面以后,还要为游戏的运行部分作初始化,包括绘制游戏运
6、行时的背景,对游戏某些重 要变量的初始化。2.运行部分:作为游戏的核心部分,这里包括的函数比较多,也就是模块比较多,首先让我模拟一下贪吃蛇的游戏模式:某个世界上突然出现一条蛇,它很短,它的运动神经异常,它没法停止自己的多动症在它的世界里就只有食物,它很饿,也很贪吃;同样在不明原因的情况下,食物从天而降,可惜的是没有落到嘴边;饥饿的主人公,不管它有没有毒,也不问食物的来历,径直向食物爬去;它吃到食物啦,它超出想象的同化能力让食物很快的成为自己身体的一部分,它的身子变长啦。当它吃到第一颗食物时,上帝有给它第二颗,于是它吃了第二颗,于是又变长了,于是又有第三颗它的身子是一直的加长,它不管自己过长身体
7、的麻烦转身不便,继续吃下去,现在它是直接把巴张大,好让食物有个绿色通道。但是在某天的下午,它咬到了自己,它才想起自己是一条毒蛇,于是晕死过去(不是毒死);又或者它往食物冲锋的时候,它失去控制,撞到了墙上。第一轮循环:第一步,出现食物;第二步,蛇不停运动;第三步,检查蛇是撞到自己或墙壁;由第四步起游戏有两条支线(A、B):A :第四步,蛇没有碰到自己或墙壁,蛇继续前进,绘制蛇的动作;第五步,判断蛇是否吃到食物,如果蛇吃到食物,身子变长,原来的食物消失;第六步,让玩家输入控制指令,让蛇在下一轮循环的第二步改变运动方向;第七步,第二轮循环的第一步,重复第一轮的步骤;B:第四步,蛇碰到自己或墙壁,终止
8、游戏。3.结束部分:游戏结束时,显示“GAME OVER”五程序描述蛇:基本描述:长度,颜色,位置。对应数据与数据类型:长度虽然可以用坐标表示,但是这样的话,运算量将很大,所以换算成较大的单位节数,以固定长度的每节描述;坐标-整型;颜色-整型; 位置-X,Y坐标。增加的描述:蛇运动的方向,蛇的生命。对应数据与数据类型:这些描述是为了与程序的按键的输入部分与判断游戏结束部分相联系而设的。方向只有四个方向:上下左右。可以设置与之对应的四个整型数:3、4、2、1。生命就只有两种情况:死或生,对应0或1。食物: 基本描述:颜色,位置。对应数据与数据类型:由于颜色设成固定的,所以不再讨论。位置X、Y坐标
9、。增加的描述:食物的存在。对应数据与数据类型:这是为了避免重复出现食物而设置的,与绘制食物的函数有联系。只有两个值:0或1(没有食物或有食物)其他的元素:墙,由于它在显示上是作为背景而存在的,所以并没有什么说明实际的墙壁就是四条直线组成的边框,由坐标描述。还需要的变量:键盘键入的键值(作为全局变量,整型);经常要使用的循环变量;自定义的填充图案;说明文字的字符数组;游戏的记分;游戏的速度(蛇的速度)。六程序流程图七程序源代码及注释#include #include #include #include /*引用的库函数*/#define LEFT 0x4b00#define RIGHT 0x4d
10、00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011b/*宏定义键名*/#define N 200int i,key;int level;/*游戏等级*/int score=0;/*得分*/int gamespeed;/*游戏速度*/struct Foodint x;/*食物的横坐标*/int y;/*食物的纵坐标*/int yes;/*判断是否要出现食物的变量*/food;/*食物的结构体*/struct Snakeint xN;int yN;int node;/*蛇的节数*/int direction;/*蛇移动方向*/int li
11、fe;/* 蛇的生命,0活着,1死亡*/snake;/*蛇的结构体*/void Choicelevle(void);/*选择游戏等级*/void Init(void);/*图形驱动*/void Close(void);/*图形结束*/void DRAW(void);/*游戏区域*/void GameOver(void);/*结束游戏*/void GamePlay(void);/*玩游戏具体过程*/void PrScore(void);/*输出成绩*/*主函数*/void main(void)Init();/*图形驱动*/Choicelevle();/*选择游戏等级*/DRAW();/*游戏区域
12、*/GamePlay();/*玩游戏具体过程*/Close();/*图形结束*/*图形驱动*/void Init(void)int gd=DETECT,gm;initgraph(&gd,&gm,turboc2); /*初始化图形系统*/cleardevice(); /*清除图形界面*/*选择游戏等级*/void Choicelevle(void)setcolor(YELLOW);settextstyle(0,0,6);outtextxy(150,150,Snake);setcolor(GREEN);settextstyle(0,0,1);outtextxy(200,250,Choice lev
13、le from) ;outtextxy(200,275,1.SLUG 2.WORM 3.PYTHON);outtextxy(220,300,please choice 1or2or3.);getch();printf(please choice levle:);scanf(%d,&level);gamespeed=100000-5000*level;if(level3|level0;i-)/*蛇的每个环节往前移动*/snake.xi=snake.xi-1;snake.yi=snake.yi-1;/*1,2,3,4表示右,左,上,下四个方向,通过这个控制来移动蛇头*/switch(snake.d
14、irection)case 1: snake.x0+=10;break;case 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|s
15、nake.y0455)GameOver();snake.life=1;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+;/*蛇的
16、身体长一节*/food.yes=1;/*画面上需要出现新的食物*/if(level=1)score+=1;else if(level=2)score+=2;else if(level=3)score+=3;else score+=level;if(score%12=0) level+;gamespeed=gamespeed-5000;PrScore();/*输出新得分*/ setcolor(4);/*画出蛇*/ for(i=0;isnake.node;i+) rectangle(snake.xi,snake.yi,snake.xi+10, snake.yi-10); delay(gamespe
17、ed); /*控制游戏速度*/setcolor(0);rectangle(snake.xsnake.node-1,snake.ysnake.node-1, snake.xsnake.node-1+10,snake.ysnake.node-1-10); /*endwhile(!kbhit)*/ /*用黑色去除蛇的的最后一节*/ if(snake.life=1)/*如果蛇死就跳出循环*/ break; key=bioskey(0);/*接收按键*/ if(key=ESC)/*按ESC键退出*/ break; else if(key=UP&snake.direction!=4) /*判断是否往相反的
18、方向移动*/ snake.direction=3; else if(key=RIGHT&snake.direction!=2) snake.direction=1; else if(key=LEFT&snake.direction!=1) snake.direction=2; else if(key=DOWN&snake.direction!=3) snake.direction=4; /*endwhile(1)*/ /*游戏结束*/ void GameOver(void) cleardevice(); /*清屏*/PrScore(); setcolor(RED); /*设置字体颜色*/set
19、textstyle(0,0,4); /*设置字体类型*/outtextxy(200,200,GAME OVER); /*显示文本*/getch(); /*输出成绩及游戏等级*/ void PrScore(void) char str120;/*设置字符型数组*/ setfillstyle(SOLID_FILL,YELLOW); bar(50,15,350,35); /*填充矩形框*/setcolor(6); /*设置文本颜色*/settextstyle(0,0,2); /*设置数组显示位置*/sprintf(str1,score %d level %d,score,level);/*显示数组内
20、容*/outtextxy(55,20,str1); setcolor(YELLOW); /*设置字体颜色*/settextstyle(0,0,2); /*设置字体类型*/outtextxy(250,461,EXIT=ESC );/*显示文本*/ void Close(void) closegraph(); 八运行结果 图1.初始界面 图2.选择等级 图3.游戏界面 图4.结束界面九课程设计总结课程设计是培养学生综合运用所学知识 ,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不
21、在。因此作为二十一世纪的大学来说掌握程序开发技术是十分重要的,而C语言又是最常见,功能最强大的一种高级语言,因此做好C语言课程设计是十分必要的。 回顾起此次课程设计,至今我们仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整一个星期的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难
22、重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针,链表通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。编程是一件很枯燥很无聊的事情,但是出于完成作业,得到学分的压力,还必须强破自己坚持下去,按照老师所说的模块化思想,分部分的进行编写。而且编程是一件高精度、模范化的事情,稍有疏乎都会影响全局,也可能因为某一处的小的错误而导致整个程序的无法运行。所以认真仔细就是非常重要的了。开始的时候真的感觉编程是一件很无聊的事情,不过当一个程序运行成功的时候那种喜悦是无法言语的,那种成
23、就感是无法比拟的。又经过几天的努力,终于把程序完成了,尽管程序还是有很多错误和漏洞,不过还是很高兴的。无论如何是自己的劳动成果,是自己经过努力得到的成绩,同时也是学习C语言的一次实践作业,自己进步的证明。通过这次课程设计,使我对C语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对C语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C语言中经常出现的错误也不了解,通过实践的学习,我认识到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。十参考文献1.C语言程序设计(谭浩强 清华大学出版社)2.C语言程序设计(张磊 高等教育出版社)3.C语言课程设计案例精编(郭翠英 中国水利水电出版社)4.C语言程序设计教程(李丽娟 人民邮电出版社)5.C语言程序设计思想与实践(林华聪 冶金工业出版社)6.C语言程序设计教程(张继温 高等教育出版社)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1