ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:762.12KB ,
资源ID:11669814      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11669814.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(贪吃蛇游戏C程序设计报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

贪吃蛇游戏C程序设计报告.docx

1、贪吃蛇游戏C程序设计报告目 录一设计要求 2二设计的作用、目的 2三.课题分析 21贪吃蛇游戏功能分析 22游戏界面分析 33设计思路分析 3四设计的具体实现 31系统组成模块结构及功能 3(1)函数定义 3(2)主函数main( ) 4(3)画界面函数DrawK( ) 5(4)游戏具体过程函数GamePlay( ) 6(5)游戏结束函数GameOver( ) 92系统程序结构及流程图 103重要函数介绍 124程序代码编写及注释 145软件调试问题分析及解决方法 206软件运行结果 20五心得体会及建议 22六参考文献 23贪吃蛇游戏C程序设计报告一设计要求通过游戏程序设计,提高编程兴趣与编

2、程思路,巩固C语言中所学的知识,合理的运用资料,实现理论与实际相结合。(1)收集资料,分析课题,分解问题,形成总体设计思路;(2)深入分析各个小问题,列出大纲,编写各部分程序模块;(3)对于设计中用到的关键函数,要学会通过查资料,弄懂其用法,要联系问题进行具体介绍;(4)上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能正常运行;(5)完成课程设计报告,并进行答辩。二设计的作用、目的C语言是一种易学易懂的通用程序设计语言,由于它具有功能性强,运用简洁,灵活兼有高级语言与低级语言的优点,以及“目标程序效率高”可移植性和能在各种系统上普遍实现等特点使它成为当今世界上的主流程序

3、设计语言之一,同时被选作目前全世界广泛应用,同时也是大学生必修的科目。作为当代的大学生要很好的利用它,学好一门设计语言,实现学以至用。 制作C程序报告,是为了巩固和加深对C语言课程的基本知识的理解和掌握,并且能够掌握C语言编程和程序调试的基本技能。通过游戏程序的设计训练和提高学生的基本技能,掌握字符串的表示方法和字符串函数的功能、Turbo C图形操作的基本知识、键盘上特殊键的获取以及图形方式下光标的显示,提高编程兴趣与编程水平,学会如何正确的书写程序设计说明文档,提高运用C语言解决实际问题的能力,巩固C语言语法规则的理解和掌握,学会通过源程序写出流程图,提高自学以及查阅资料的能力。三.课题分

4、析1贪吃蛇游戏功能分析C语言是一种中性化的语言,用C语言来编写程序实现贪吃蛇游戏,能有效反映本有本游戏的基本特点。编写C语言程序实现贪吃蛇游戏,贪吃蛇游戏是一个深受人们喜欢的游戏:一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被吃掉,这时蛇的身体长一节,同时计10分;接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉(蛇头撞到自己的身体)游戏结束。2游戏界面分析 程序运行时边框表示围墙,红色矩形块代表蛇,黄色小方块代表食物。3设计思路分析这个程序的关键点是表示蛇的图形以及蛇的移动。用一个小矩形块表示

5、蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用两节表示。移动从蛇头开始,所以蛇不能向相反方向移动,也就是蛇尾不能改作蛇头。如果不按任何键,蛇自行在当前方向上前移,当游戏者按了有效的方向键后,蛇头朝着指定的方向移动,一步移动一节身体,所以当按了有效的方向键后,先确定蛇头的位置,然后蛇身体随着蛇头的方向移动,图形的实现是从蛇头的新位置开始画出蛇,这时,由于没有清屏的原因,原来蛇的位置和新蛇的位置差一个单位,所以看起来蛇会多一节身体,所以将蛇的最后一节用背景色来覆盖。食物的出现和消失是以画矩形块和覆盖矩形块来表示的四设计的具体实现1系统组成模块结构及功能本贪吃蛇程序包括以下主要的模块:(1)函数

6、定义 函数定义是对各个基础函数的定义,并且设置需要运用的信息,便于调用#define N 200#include /*图形头文件*/#include /*包含rand等函数*/#include /*包含bios函数*/#define LEFT 0x4b00/*光标左键值*/#define RIGHT 0x4d00/*光标右键值*/#define DOWN 0x5000/*光标下键值*/#define UP 0x4800/*光标上键值*/#define ESC 0x011b/*ESC的ASCII码*/int i,key;/*图形坐标变量及按键变量*/int score=0;/*得分*/int g

7、amespeed=10000;/*游戏速度自己调整*/struct Food int x;/*食物的横坐标*/ int y;/*食物的纵坐标*/ int yes;/*判断是否要出现食物的变量*/food;/*食物的结构体*/ struct Snake int x;/*蛇的横坐标*/ int y;/*蛇的纵坐标*/ int node;/*蛇的节数*/ int direction;/*蛇移动方向*/ int life;/* 蛇的生命,0活着,1死亡*/snake;void Init(void);/*图形驱动*/void Close(void);/*图形结束*/void DrawK(void);/*

8、画界面函数*/void GameOver(void);/*结束游戏*/ void GamePlay(void);/*玩游戏具体过程*/void PrScore(void);/*输出成绩*/ void main(void)/*主函数*/(2)主函数main( )主函数是程序的主流程,首先定义使用到的常数、全局变量及函数原型说明,然后初始化图形系统,调用函数DrawK()画出开始画面,调用函数GamePlay(),即玩游戏的具体过程,游戏结束后调用Close()关闭图形系统,结束程序void main(void)/*主函数*/ Init();/*图形驱动*/ DrawK();/*开始画面*/ Ga

9、mePlay();/*玩游戏具体过程*/ Close();/*图形结束*/void Init(void)/*图形驱动*/ int gd=DETECT,gm; initgraph(&gd,&gm,c:tc); /*第一个参数表示图形适配器的类型,第二个为在该类型下图形的显示模式,第三个参数指定驱动程序所在目录。*/ cleardevice();(3) 画界面函数DrawK( ) 主界面是一个封闭的围墙,用两个循环语句分别在水平和垂直方向输出连续的宽度和高度均的矩形方块,表示围墙,为了醒目,设置为白色。void DrawK(void)/*开始画面,左上角坐标为(50,40),右下角坐标为(610,

10、460)的围墙*/ setbkcolor(0);/*设置当前背景颜色*/ setcolor(YELLOW);/*设置当前画线颜色*/ setlinestyle(SOLID_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; switch(sna

11、ke.direction) /*定义1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/ 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;

12、 break; if(snake.x0595|snake.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.nod

13、e=-20; /*-20表示尾巴长一节*/ /*新的一节先放在看不见的位置,下次循环就取前一节的位置*/ snake.node+;/*蛇的身体长一节*/ food.yes=1;/*画面上需要出现新的食物*/ score+=10; PrScore();/*输出新得分*/ setcolor(4); for(i=0;isnake.node;i+)/*画出蛇*/ rectangle(snake.xi,snake.yi,snake.xi+10, snake.yi-10); delay(gamespeed); setcolor(0);/*用黑色去除蛇的的最后一节*/ rectangle(snake.xsn

14、ake.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)/*判断是否往相反的方向移动*/ snake.direction=3; else if(key=RIGHT&snake.direction!=2)

15、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)游戏结束函数GameOver( ) 游戏结束,清除屏幕,输出分数,显示游戏结束信息。void GameOver(void)/*游戏结束*/ cleardevice(); PrScore(); setcolor(RED); settextstyle(0,0,4); outtextxy(200,200,g

16、uojian); getch();void PrScore(void)/*输出成绩*/ char str10; setfillstyle(SOLID_FILL, WHITE); bar(50,15,200,35); setcolor(6); settextstyle(0,0,2); sprintf(str,score:%d,score); outtextxy(55,20,str);void Close(void)/*图形结束*/ getch(); closegraph();2系统程序结构及流程图3重要函数介绍1) 主函数main()初始化图形系统,调用DrawK()画出开始画面,调用函数Gam

17、ePlay(),即玩游戏过程,游戏结束后调用Close()关闭图形系统,结束程序。2) 画界面函数DrawK(); 主界面是一个封闭的围墙,用两个循环语句分别在水平和垂直方向输出连续的宽度和高度均为10个单位的矩形方块,表示围墙,为了醒目,设置为黄色。3) 游戏具体过程函数GamePlay();这是游戏的主要组成部分,他采用将前一节的坐标赋给后一节,用背景颜色将最后一节去除,当蛇头的坐标与食物的坐标相等时,表示食物被吃掉了。4) 游戏结束函数GameOver()游戏结束,清除屏幕,输出分数,显示游戏结束信息。5) PrScore(),输出分数。6) Close()函数图形结束。在显示游戏结束信

18、息的画面时,按任意键关闭图形系统,程序结束。7). Setbkcolor() 设置背景颜色函数起调用格式为: setbkcolor(color);该函数用与设置绘图是的背景颜色。参数color可取表1.1中的符号或数值。表1.2Color值表 符号常数数值含义字符或背景 Black0黑字符/背景 Bluk1蓝字符/背景 Green2绿字符/背景 Cyan 3青字符/背景 Red4红字符/背景 Magenta5洋红字符/背景 Brown6棕字符/背景 Lightggray7淡灰字符/背景 Darkgray8深灰字符 Lightbluk9淡蓝字符 Lightgreen10淡绿字符 Lightcya

19、n11淡青字符 Lightred12淡红字符Liaghtmagenta13淡洋红字符Yellow14黄字符White15白字符8)setcolor() 设置前背景颜色起调用格式:setcolor(color);该函数用于设置前背景颜色(即绘图用的颜色),实际上用当前画笔色设置为参数Color所定的颜色。参数Color的值应在前图形模式下的有效范围内,一旦用此函数改变了画笔色,随后笔画处的都是此种颜色。(注意:所选的颜色为1.2中之一)9) 用到的函数 a. init() 图形驱动其调用格式为:init() 表1.1 图形驱动程序符号名数值DETECT0CGA1MCGA2EGC3EGA644EG

20、AMONO5IBM85146HERCMONO7ATT4008VGA9PC327010b. getch () 其调用格式为: int getch(void); 从控制台无回显地取一个字符 c. outtextxy() 其调用格式为:outtextxy(x,y,textstring);该函数在指定位置以当前一字符串。 d. closegraph() 关闭图形方式函数其调用格式为: closegraph(); 该函数释放图形函数所占的内存,关闭图形方式,返回到调用 initgraph()前的模式,就可继续运行程序。 e. setfillstyle() 其调用格式为:setfillstyle(); 该

21、函数填充模式和颜色 用 法: void far setfillstyle(int pattern, int color); f. settextstyle()其调用格式为:settextstyle(font,direction,charsize); 该函数输出设置当前的文本属性如:用于设置输出文本的字体、文本显示方式和字符的大小。g. setbkcolor() 其调用格式为:setbkcolor(); 该函数填充游戏界面的颜色,用调色板设置当前背景颜色。h. sprintf ()其调用格式为:sprintf ();该函数输送格式化输出到字符串中。i. kbhit()其调用格式为:kbhit()

22、;该函数检查当前按下的键是否为有效按键。4程序代码编写及注释#define N 200#include #include #include #define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011bint i,key;int score=0;/*得分*/int gamespeed=50000;/*游戏速度自己调整*/struct Food int x;/*食物的横坐标*/ int y;/*食物的纵坐标*/ int yes;/*判断是否要出现食物的变量*/food;/*

23、食物的结构体*/struct Snake int xN; int yN; int node;/*蛇的节数*/ int direction;/*蛇移动方向*/ int life;/* 蛇的生命,0活着,1死亡*/snake;void Init(void);/*图形驱动*/void Close(void);/*图形结束*/void DrawK(void);/*开始画面*/void GameOver(void);/*结束游戏*/void GamePlay(void);/*玩游戏具体过程*/void PrScore(void);/*输出成绩*/*主函数*/void main(void) Init();

24、/*图形驱动*/ DrawK();/*开始画面*/ GamePlay();/*玩游戏具体过程*/ Close();/*图形结束*/*图形驱动*/void Init(void) int gd=DETECT,gm; initgraph(&gd,&gm,c:tc); cleardevice();/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/void DrawK(void)/*setbkcolor(LIGHTGREEN);*/ setcolor(11); setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/ for(i=50

25、;i=600;i+=10)/*画围墙*/ rectangle(i,40,i+10,49); /*上边*/ rectangle(i,451,i+10,460);/*下边*/ for(i=40;i=450;i+=10) rectangle(50,i,59,i+10); /*左边*/ rectangle(601,i,610,i+10);/*右边*/ /*玩游戏具体过程*/void GamePlay(void) randomize();/*随机数发生器*/ food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/ snake.life=0;/*活着*/ snake.direction=1

26、;/*方向往右*/ snake.x0=100;snake.y0=100;/*蛇头*/ snake.x1=110;snake.y1=100; snake.node=2;/*节数*/ PrScore();/*输出得分*/ while(1)/*可以重复玩游戏,压ESC键结束*/ while(!kbhit()/*在没有按键的情况下,蛇自己移动身体*/ if(food.yes=1)/*需要出现新食物*/ food.x=rand()%400+60; food.y=rand()%350+60; while(food.x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/ food.x+; while(food.y%10!=0) food.y+; food.yes=0;/*画面上有食物了*/ if(food.yes=0)/*画面上有食物了就要显示*/ setcolor(GREEN);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1