版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、贪吃蛇游戏程序设计一、课程设计任务贪吃蛇小游戏程序设计二、设计要求通过游戏程序设计,提高编程兴趣与编程思路,巩固 C 语言中所学的知识,合理的运 用资料,实现理论与实际相结合。(1)收集资料,分析课题,分解问题,形成总体设计思路;(2)对于设计中用到的关键函数,要学会通过查资料,弄懂其用法,要联系问题进行具 体介绍;(3)上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能 正常运行;(4)完成课程设计报告,并进行答辩三、需求分析3.1、程序功能贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通 过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞
2、倒食物,则食物被吃掉,蛇 身体长一节,同时记 10 分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身 体交叉蛇头撞倒自己身体游戏结束。3.2、设计思想程序关键在于表示蛇的图形及蛇的移动。用一个小矩形快表示蛇的一节身体,身体每 长一节,增加一个矩形块,蛇头用俩节表示。移动时必须从蛇头开始,所以蛇不能向相反 的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝 着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因, 原来的蛇的位置和新蛇的位置差一个单位,所以看起来
3、蛇多一节身体,所以将蛇的最后一 节用背景色覆盖。食物的出现与消失也是画矩形块和覆盖矩形块。为了便于理解,定义两 个结构体:食物与蛇。3.3、流程图开始初始化界面和蛇身游戏者按键选择放置食物蛇开始运动蛇长大四、设计的具体实现1)函数定义函数定义是对各个基础函数的定义 , 并且设置需要运用的信息,便于调用#define N 200 #define M 200 #includegraphics.h #include #include #include #include #include #include #include #define LEFT 97/A #define RIGHT 100/D #
4、define DOWN 115/S #define UP 119/W #define Esc 0x011b int i,key; int score=0;int gamespeed=250;/ 游戏速度可根据实 际情况自行调整 struct Food( 2)主函数 main( )int x;/ 食物的横坐标int y;/ 食物的纵坐标int yes;/ 判断是否要出现食物的变量 food;/ 食物的结构体 struct Snakeint xM;int yM;int node;/ 蛇的节数int direction;/蛇的移动方向int life;/蛇的生命, 0 表示活着, 1表示死亡snak
5、e;void Init();/ 图形驱动void Close();/ 图形结束void DrawK();/ 开始画面void GamePlay();/ 玩游戏的具体过程void GameOver();/ 游戏结束void PrScore();/ 输出成绩主函数是程序的主流程,首先定义使用到的常数、全局变量及函数原型说明,然后初 始化图形系统,调用函数 DrawK()画出开始画面,调用函数 GamePlay(),即玩游戏的具体 过程,游戏结束后调用 Close() 关闭图形系统,结束程序 void main()/ 主函数Init();/ 图形驱动DrawK();/ 开始画面GamePlay();
6、/ 玩游戏的具体过程Close();/ 图形结束void Init()/ 图形驱动int gd=DETECT,gm;initgraph(&gd,&gm, );/* 此处为 turboc 的路径,读者可以根据自己的电脑而改 */ cleardevice();( 3) 画界面函数 DrawK( )主界面是一个封闭的围墙,用两个循环语句分别在水平和垂直方向输出连续的宽度和 高度均的矩形方块,表示围墙,为了醒目,设置为白色。void DrawK()/ 开始画面,左上角坐标为( 50, 40),右下角坐标为( 610,460)的围墙 setbkcolor(GREEN);setcolor(LIGHTRED
7、);setlinestyle(0,0,5);/ 设置线型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;switch(snake.direction)/1,2,3,4表示上下左右四个方向,通过这个判断来移动蛇头case 1: snake.x0+=10;break;case 2: snake.x0-=10;break;
8、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;/ 蛇死if(snake.life=1)/ 以上两种判断以后,如果蛇死就跳
9、出内循环,重新开始 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; score+=10;PrScore();/ 输出新的得分setcolor(WHITE);/ 画出蛇 for(i=0;isnak
10、e.node;i+) rectangle(snake.xi,snake.yi,snake.xi+10,snake.yi-10);Sleep(gamespeed);setcolor(0);/ 用黑色去除蛇的最后一节rectangle(snake.xsnake.node-1,snake.ysnake.node-1,snake.xsnake.node-1 +10,snake.ysnake.node-1-10);if(snake.life=1)/ 如果蛇死就跳出循环break;key=getchar();/ 接受案件if(key=Esc) 按 ESC键退出break;else if(key=UP&sn
11、ake.direction!=4)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)( 5)游戏结束函数 GameOve(r )游戏结束,清除屏幕,输出分数,显示游戏结束信息。void GameOver()/ 游戏结束cleardevice();PrScore()
12、;setcolor(RED);outtextxy(100,100, 我会回来的 !); getch();void PrScore()/ 输出成绩char str10; setfillstyle(SOLID_FILL,YELLOW); bar(50,15,220,35);setcolor(6);sprintf(str,score:%d,score);outtextxy(55,20,str);void Close()/ 图形结束getch();closegraph();我去图五、调试及解决方法可以按照程序运行的错误提示对原程序进行修改, 在调试过程中有时也会遇到不懂的问题,书馆或上网查阅一些资料或
13、者是向老师请教也解决了对源程序一一修改直到运行成功。六、测试结果.aaa.exescore:10七、设计心得体会在设计这个程序中我主要学会了如何运用以下有关C语言和C+勺知识1)函数定义是要做到顾名思义是很重要的,它对读程序的人正确认识程序 十分重要,在修改这个程序的过程中也能很快找到程序各模块的作用,大大增 加了程序的可读性。2)分析函数先从main()函数入手。Main()函数是C+源程序编译时的开始, 从main()函数开始读函数可将其他函数的功能理解得更透彻。3)在做程序的时候先列框架,将这个程序所要达到的目的(功能)分析出来,选择正确的数据结构然后在将程序模块化,按照模块编写函数更加
14、简单合理。4)我还了解了很多的库函数的作用,如字符串函数中有很多对字符串进行 处理的函数,起功能我都有所了解。5)学会了有关头文件的使用方法,及系统调配问题的解决方法等。6 )了解到了注释的重要性。八、附录1、参考文献:谭浩强,C+程序设计清华大学出版社郭翠英,C语言课程设计案例精编,中国水利水电出版社,2004.3李丽娟,C语言程序设计教程人民邮电出版社林华聪,C语言程序设计思想与实践冶金工业出版社2、源代码#defi ne M 200#i nclude #defi ne LEFT 97/A#i ncludegraphics.h#in clude#in clude#in clude#defi
15、 ne RIGHT 100/D #defi ne DOWN 115/S #defi ne UP 119/W#defi ne Esc 0x011bint i,key;int score=0;#in clude #in clude #in cludein t gamespeed=250;游戏速度可根据实际情况自行调整struct Foodint x;食物的横坐标int y;食物的纵坐标int yes;/判断是否要出现食物的变量food; 食物的结构体struct Sn akeint xM;int yM;int node;/蛇的节数int directio n;蛇的移动方向int life;/蛇的生
16、命,0表示活着,1表示死亡sn ake;void In it();/图形驱动void Close();/图形结束void DrawK();/开始画面void GamePlay();玩游戏的具体过程void GameOver(); 游戏结束void PrScore();输出成绩void mai n()主函数In it();图形驱动DrawK(); 开始画面GamePlay();玩游戏的具体过程Close();图形结束void In it()/图形驱动in t gd=DETECT,gm;initgraph(&gd,&gm, );/*此处为 turboc的路径,读者可以根据自己的电脑而改*/clea
17、rdevice();void DrawK()开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙setbkcolor(GREEN);setcolor(LIGHTRED);setli nestyle(0,0,5);设置线型for(i=50;i=600;i+=10) 画围墙recta ngle(i,40,i+10,49);上边recta ngle(i,451,i+10,460);下边for(i=40;i0;i-)/蛇的每个环节往前移动,也就是贪吃蛇的关键算 法sn ake.xi=s nake.xi-1;sn ake.yi=s nake.yi-1;switch(s nake.d
18、irectio n)/1,2,3,4表示上F左右四个方向,通过这个判断来移动蛇头case 1:sn ake.x0+=10;break;case 2:sn ake.x0-=10;break;case 3:sn ake.y0-=10;break;case 4:sn ake.y0+=10;break;setcolor(O);/ 把画面上的食for(i=3;is nake .no de;i+)从蛇的第四节开始判断是否撞到自己了,因为蛇头 为两节,第三节不可能拐过来if(sn ake.xi=s nake.x0&sn ake.yi=sn ake.y0)GameOver();显示失败sn ake.life=
19、1;break;if(s nake.x0595|s nake.y0455)蛇是否撞到墙壁GameOver();/本次游戏结束sn ake.life=1;/蛇死if(s nake.life=1)以上两种判断以后,如果蛇死就跳出内循环,重新开始break;if(sn ake.x0=food.x&sn ake.y0=food.y)/吃到食物以后物去掉recta ngle(food.x,food.y,food.x+10,food.y-10);sn ake.xs nake .no de=-20;sn ake.ys nake .no de=-20;新的一节先放在看不见得位置,下次循环就取前节的位置sn ake .n ode+; 蛇的身体长food.yes=1;score+=10;PrScore();输出新的得分setcolor(WHITE);/ 画出蛇for(i=0;is nake .no de;i+)recta ngle(s nake.xi,s nake.yi,s nake.xi+10,s nake.yi-10);Sleep(gamespeed);setcolor(0);/用黑色去除蛇的最后一节recta ngle(s nake.xs nake .no de-1,s nake.ys
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年重庆辅警协警招聘考试真题含答案详解(能力提升)
- 2023年驻马店辅警招聘考试题库附答案详解(综合卷)
- 2023年许昌辅警招聘考试题库含答案详解(综合题)
- 2024年九江辅警招聘考试真题及答案详解(历年真题)
- 2024年南宁辅警协警招聘考试备考题库及答案详解(历年真题)
- 2024年山南辅警协警招聘考试备考题库及答案详解(名校卷)
- 2025-2026学年四川省成都石室天府高一上生物期末预测试题含解析
- 浙江警察学院《康复护理》2024-2025学年第一学期期末试卷
- 2026届江西鹰潭市第一中学物理高二第一学期期末经典模拟试题含解析
- 2025-2026学年浙江省诸暨市高二生物第一学期期末质量检测试题含解析
- 选矿厂租赁承包合同2025年
- 2025年东莞望牛墩镇事业单位招考(10人)高频重点提升(共500题)附带答案详解
- 家庭药师技能竞赛备考试题及答案
- 光伏屋顶安装合同协议书
- 危大工程安全检查录表
- 全科医学科进修出科小结
- 中药面膜培训课件模板
- 变压器油箱焊接工艺
- 《血管活性药物静脉输注护理》标准解读
- 家庭经济困难认定和家庭经济状况核对授权书暨具体资助项目申请表表(义务)
- 铁路技规(全-上传)课件
评论
0/150
提交评论