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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

C语言贪吃蛇实验报告.docx

1、C语言贪吃蛇实验报告C语言程序设计报告题目:贪吃蛇游戏的程序设计 院系:西语学院 英语教育6班 姓名:学号:1.1题目设计贪吃蛇小游戏1.2题目的要求:玩家通过键盘控制蛇在地图上寻找食物,蛇吃下食物,可以加分,碰到四壁游戏结束。1.3设计的步骤:分析设计题目的要求,即需求分析。总体设计,确定所需模块及模块间调用关系,定义系统中使用的数据类型。详细设计,确定每个模块的功能,绘制主要函数的流程图。编写程序代码,调试程序使其能正确运行。要求书写规范,注意采用缩进格式。函数 名、变量名要见文晓意,注释要简而不失、详而不缀。设计完成的软件要便于操作和 使用。程序测试,发现程序中存在的错误并改正。完成报告

2、。2详细设计说明2.1课程设计的要求:通过游戏程序设计,提高编程兴趣与编程思路,巩固 C语言中所学的知识,合理的运用资料,实现理论与实际相结合。收集资料,分析课题,分解问题,形成总体设计思路;对于设计中用到的关键函数,要学会通过查资料,弄懂其用法,要联系问题进行具体介绍;上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能 正常运行;完成课程设计报告。2.2程序的功能:贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过 按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体 长一节,同时记 10 分,接着又出现食物,等待蛇

3、来吃,如果蛇在移动中撞到墙或身体交叉蛇 头撞倒自己身体游戏结束。2.3课程设计的思想 :程序关键在于表示蛇的图形及蛇的移动。 用一个小圆点来表示蛇的一节身体, 身体每长 一节,增加一个圆点,蛇头用四节来表示。移动时必须从蛇头开始,所以蛇不能向相反的方 向移动,如果不按任意键,蛇自行在当前方向上前移,如果按与蛇运动方向相反的方向键, 此游戏就会暂停,再按想前的方向键才能继续游戏,但按下有效方向键后,蛇头朝着该方向 移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇 头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位 置和新蛇的位置差一个

4、单位, 所以看起来蛇多一节身体, 所以将蛇的最后一节用背景色覆盖。 食物的出现与消失也是画一个圆点和覆盖原来的圆点。为了便于理解,定义两个结构体:食 物与蛇。2.4设计程序中的调试过程在调试过程中,遇到了很多的问题,比如,因为使用的刷屏函数,所以屏幕经常出现闪 烁的情况,但是通过我和我的伙伴们的共同努力和学习,通过网上和书籍的查阅,我们也得 到了很多的收获,我们的小组也在中真正的学会了很多的东西,这次实训给我们带来了很大 的收获。 可以按照程序运行的错误提示对原程序进行修改,在调试过程中有时也会遇到不懂 的问题,我去图书馆或上网查阅一些资料或者是向老师请教也解决了对源程序一一修改直到 运行成功

5、。2.5设计的流程图总程序设计图如图 1 所示:欢迎词和游戏的 基本操作说明开始游戏初试化界面和 蛇身随机放置食物方向键控制蛇、 的运动方向 Y蛇变长,并总分加10分N退出游戏图1程序设计流程图dow nmove函方向键控制的设计流程图如图 2所示:其中UPmOVe函数控制蛇向上运动,数控制蛇向下运动,leftmove函数控制蛇向左运动,rightmove函数控制蛇向右运动。图2方向键控制方向键控制的设计流程图蛇吃食物蛇身变长的设计流程图如图 3所示:图3蛇吃食物蛇身变长的设计流程图2.6程序的总体设计思想利用人工绘图法 , 制作美观的游戏界面 .通过随机函数产生随机数 , 控制游戏过程食物的

6、出现 .定义键盘操作 , 控制游戏过程蛇的移动方向 .画出边界 ,并判断游戏是否结束 .统计游戏过程蛇吃的食物数量 , 计算并输出游戏成绩 .3 软件的使用说明3.1 建立游戏的过程说明先打开 Microssft Visual C+ 程序,进入 Microssft Visual C+ 程序后打开文件 菜单,点机新键命令按钮,先建立一个 Win32 Console Application 工程,建立工程时可 填写工程名称和你所建工成要存放的位置, 点机确定按钮, 再点机一个空工程类型的控制 台程序,再点机完成,然后点机确定按钮,此时一个所要建立的工程就已经建立好,然后 再点机文件中的新建按钮,然

7、后再建立一个 C+ Source File 文件,并填写文件名称, 然后点机确定按钮, 此时所要建立的工程和文件都已建立完毕, 此时您就可以把贪吃蛇游 戏的代码复制粘贴到你刚刚建立的工程和文件里面了, 然后点机组建命令中的编译和组建 命令,最后点机执行命令就可进入贪吃蛇游戏中了。3.2 执行游戏的过程说明进入贪吃蛇游行中后,首先弹出一个界面,上面出现的是欢迎词和游戏的简单说明, 可点机任意键开始游戏,此游戏是由键盘的四个方向键进行控制的,吃一个点,蛇身就长 长一端,总分数就加 10 分,如果碰壁或结尾游戏则结束,最后出先一个界面,上面显示你 此次游戏的总分数。希望我这个小游戏能让你玩的开心。5

8、. 收获及体会在设计这个程序中我主要学会了如何运用以下有关 C语言和C+勺知识:1)函数定义是要做到顾名思义是很重要的,它对读程序的人正确认识程序 十分重要,在修改这个程序勺过程中也能很快找到程序各模块勺作用,大大增 加了程序勺可读性。2)分析函数先从main()函数入手。Main()函数是C+源程序编译时的开始,从 main() 函数开始读函数可将其他函数勺功能理解得更透彻。3)在做程序的时候先列框架,将这个程序所要达到的目的(功能)分析出来,选择正确的数据结构然后在将程序模块化,按照模块编写函数更加简单合理。4)我还了解了很多的库函数的作用,如字符串函数中有很多对字符串进行处理的函数,起功

9、能我都有所了解。5)学会了有关头文件的使用方法,及系统调配问题的解决方法等。6)在调试过程中,遇到了很多的问题,比如,因为使用的刷屏函数,所以屏幕经常出 现闪烁的情况,但是通过我和我的伙伴们的共同努力和学习,通过网上和书籍的查阅,我们 也得到了很多的收获,我们的小组也在中真正的学会了很多的东西,这次实训给我们带来了 很大的收获。 可以按照程序运行的错误提示对原程序进行修改,在调试过程中有时也会遇到 不懂的问题,我去图书馆或上网查阅一些资料或者是向老师请教也解决了对源程序一一修改 直到运行成功。附录部分程序代码清单#include#include#include#include#include#

10、define HEAD 300#define FOOD 400#define v_sleep 100/* 改变 sleep 的大小可改变蛇的运动速度,此数值越小蛇的运动速度越快 */int score=0; /* 定义了一个全局变量来在整个程序中统计总成绩 */* 欢迎词 */void welc()printf(nnnnnnttt 欢迎来到【贪吃蛇】小游戏 nn); printf(ttt 蛇身加长一段就加 10 分 nn);printf(tt 此游戏用键盘的方向键控制即可。若想退出请按 Esc 建。 n); printf(nttt 相反的方向的话是暂停。 n);printf(nttt 请按任意

11、键进入游戏。 );getch();/* */* 人工画图程序 */void drawpt(int a,int x,int y) /* 利用人工绘图程序来画出蛇运动的范围 */if(x=0)printf(tt); return ;if(y=0) printf(ttt); return ;if(x=16) printf(n); return ;if(y=16)printf(t); if(x0&x0&y16)if(a=0)Printf( O);/*用空心圆来表蛇改运动的总范围 */else printf( );/* 用实心圆来蛇的长度和食物的出现地点 */ return ;void draw(int

12、 (*sna)17)int i,j;system(cls); /* 刷屏工具 */for(i=0;i17;i+) /* 区域范围的大小 */for(j=0;j17;j+) drawPt(snaij,j,i);Printf (ttt 总成绩为 d 分,score);/* */* 取随机数,出现食物用 */int randno() /* 利用这个随机函数来控制食物的随机出现 */srand(time(NULL);return rand()%15+1;/* 随机函数出现食物时的范围,防止食物出现在范围之外 */ /* */* 判断游戏是否结束 */bool judgeGO(int (*sna)17)

13、int x,y,i=0,max=0,count=0; for(x=0,y=0;y17;y+)if(snaxy=HEAD)/* 判断头部是否在最外层的 */return false;for(x=16,y=0;y17;y+) if(snaxy=HEAD) return false;for(y=0,x=0;x17;x+) if(snaxy=HEAD)return false;for(y=16,x=0;x17;x+) if(snaxy=HEAD) return false;for(x=0;x16;x+) for(y=0;y16;y+) if(maxsnaxy) if(snaxy!=HEAD&snaxy

14、!=FOOD) max=snaxy;/* 这个也是求头部之后的 */ for(i=0;imax;i+) for(x=1;x16;x+) for(y=1;y16;y+) if(snaxy=i+1) count+;/* 这个判断想了好久的 */ score=(count-3)*10;/* 计算蛇的总成绩 */ if(count!=max)/* 判断身体部分是否连续 */ return false;return true;/* */* 游戏结束显示 */void gameover() system(cls); printf(nnnnnnnn); printf(tttt); printf( 游戏结束

15、nn); printf(tttt); printf ( 此次总成绩为 %d 分 nn,score); printf(tttt);printf ( 请您再接再厉 nn);printf(ttt);printf( 按 Esc 键退出,按任意键重新开始。 n);/* */* 全程标记法,从尾巴开始 123456 HEAD ,食物是 FOOD 。*/void marksn()*/void downmove(int (*sna)17);/* 用键盘的方向键的下键来控制蛇向下运动 void upmove(int (*sna)17);/* 用键盘的方向键的上键来控制蛇向上运动 */ void leftmove

16、(int (*sna)17);/* 用键盘的方向键的左键来控制蛇向左运动 */ void rightmove(int (*sna)17);/* 用键盘的方向键的右键来控制蛇向右运动 */ int judgeF(int (*sna)17,int keym);int snake1717=0;/* 各种东西初始化 */int x=1,y=7,key,key1; snake11=1; snake12=2; snake13=3; snake23=HEAD; while(snakexy!=0) x=randno();y=randno(); snakexy=FOOD; draw(snake);/* */*

17、控制的部分 */while(judgeGO(snake) key=getch(); switch(key) case 72:while(!kbhit()&key1!=80&judgeGO(snake)/* 这个函数 kbhit ()自己查一下吧 控制输入很好 */ if(judgeF(snake,key) draw(snake); Sleep(v_sleep);/*Sleep 函数在着是个延迟函数, 也可在呈现头改变 v_sleep 的大小来控制 蛇的运动速度 */continue; upmove(snake);/* 用键盘的方向键的上键来控制蛇向上运动 */ draw(snake);key1

18、=key;/* 这里的 key1 是就来标记上一步的方向,这样相反的方向就暂停了 */ Sleep(v_sleep);/*Sleep 函数在着是个延迟函数, 也可在呈现头改变 v_sleep 的大小来控制蛇的 运动速度 */ break;case 80: while(!kbhit()&key1!=72&judgeGO(snake)if(judgeF(snake,key) draw(snake);Sleep(v_sleep);/*Sleep 函数在着是个延迟函数, 也可在呈现头改变 v_sleep 的大小来控制 蛇的运动速度 */continue;downmove(snake);/* 用键盘的方

19、向键的下键来控制蛇向下运动 */draw(snake);key1=key;Sleep(v_sleep);/*Sleep 函数在着是个延迟函数, 也可在呈现头改变 v_sleep 的大小来控制蛇的 运动速度 */break;case 75:while(!kbhit()&key1!=77&judgeGO(snake)if(judgeF(snake,key) draw(snake);Sleep(v_sleep);/*Sleep 函数在着是个延迟函数, 也可在呈现头改变 v_sleep 的大小来控制 蛇的运动速度 */continue;leftmove(snake);/* 用键盘的方向键的左键来控制蛇

20、向左运动 */draw(snake);key1=key;Sleep(v_sleep);/*Sleep 函数在着是个延迟函数, 也可在呈现头改变 v_sleep 的大小来控制蛇的 运动速度 */break;case 77:while(!kbhit()&key1!=75&judgeGO(snake)if(judgeF(snake,key) draw(snake);Sleep(v_sleep);/*Sleep 函数在着是个延迟函数, 也可在呈现头改变 v_sleep 的大小来控制 蛇的运动速度 */continue;rightmove(snake);/* 用键盘的方向键的右键来控制蛇向右运动 */d

21、raw(snake);key1=key;Sleep(v_sleep);/*Sleep 函数在着是个延迟函数, 也可在呈现头改变 v_sleep 的大小来控制蛇的运动速度 */ break;case 27:exit(0);default: switch(key1) case 72:while(!kbhit()&judgeGO(snake)upmove(snake);/* 上键函数控制蛇向上运动 */ draw(snake);break;case 80: while(!kbhit()&judgeGO(snake) downmove(snake);/* 下键函数控制蛇向下运动 */ draw(sna

22、ke);break;case 75: while(!kbhit()&judgeGO(snake) leftmove(snake);/* 左键函数控制蛇向左运动 */ draw(snake);break;case 77:while(!kbhit()&judgeGO(snake) )rightmove(snake);/* 右键函数控制蛇蛇向右运动 */ draw(snake);break;/* */* 是否继续游戏 */gameover();/* 判断游戏是否继续的函数 */ if(getch()=27)exit(0);elsemarksn();getch();/* */* */* 上下左右移动神

23、马的 */void downmove(int (*sna)17)/* 控制蛇向下运动的函数 */int x=0,y=0,mark=0;for(x=0;x16;x+)for(y=0;y16;y+) if(snaxy!=0&snaxy!=HEAD&snaxy!=FOOD)snaxy=snaxy-1;/ 前面已经说了, 12345 标记法,减去 1 的话,除了头部以外其他的就移动了。 for(x=0;x16;x+)for(y=0;y16;y+)if(marksnaxy)if(snaxy!=HEAD&snaxy!=FOOD) mark=snaxy;/ 这个是求头部之后的值。 for(x=0;x16;x

24、+)for(y=0;y16;y+)if(snaxy=HEAD)snax+1y=HEAD;/ 头部的移动, snaxy=mark+1;/ 头部的赋值。 return;void upmove(int (*sna)17)/* 控制蛇向上运动的函数 */int x=0,y=0,mark=0;for(x=0;x16;x+)for(y=0;y16;y+)if(snaxy!=0&snaxy!=HEAD&snaxy!=FOOD)snaxy=snaxy-1;for(x=0;x16;x+)for(y=0;y16;y+)if(marksnaxy)if(snaxy!=HEAD&snaxy!=FOOD) mark=sn

25、axy;for(x=0;x16;x+)for(y=0;y16;y+)if(snaxy=HEAD)snax-1y=HEAD;snaxy=mark+1;return;void leftmove(int (*sna)17)/* 控制蛇向左运动的函数 */int x=0,y=0,mark=0;for(x=0;x16;x+)for(y=0;y16;y+)if(snaxy!=0&snaxy!=HEAD&snaxy!=FOOD) snaxy=snaxy-1;for(x=0;x16;x+)for(y=0;y16;y+)if(marksnaxy)if(snaxy!=HEAD&snaxy!=FOOD) mark=

26、snaxy;for(x=0;x16;x+)for(y=0;y16;y+)if(snaxy=HEAD)snaxy-1=HEAD;snaxy=mark+1;return;void rightmove(int (*sna)17)/* 控制蛇向右运动的函数 */int x=0,y=0,mark=0;for(x=0;x16;x+)for(y=0;y16;y+)if(snaxy!=0&snaxy!=HEAD&snaxy!=FOOD) snaxy=snaxy-1;for(x=0;x16;x+)for(y=0;y16;y+)if(marksnaxy)if(snaxy!=HEAD&snaxy!=FOOD) ma

27、rk=snaxy;for(x=0;x16;x+)for(y=0;y16;y+) if(snaxy=HEAD) snaxy+1=HEAD; snaxy=mark+1; return;int judgeF(int (*sna)17,int keym)int randno();int x,y,mark=0,i=randno(),j=randno();for(x=0;x16;x+)for(y=0;y16;y+)if(marksnaxy) if(snaxy!=HEAD&snaxy!=FOOD) mark=snaxy;for(x=0;x16;x+)for(y=0;y16;y+)if(snaxy=HEAD) if(snax-1y=FOOD&keym=72) snax-1y=HEAD;snaxy=mark+1;while(snaij!=0)i=randno();j=randno();snaij=FOOD; return 1;if(snax+1y=FOOD&keym=80)snax+1y=HEAD;snaxy=mark+1;while(snaij!=0)i=randno();j=randno();snaij=FOOD;retur

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

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