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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(C语言贪吃蛇实验报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至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设计程序中的调试过程在调试过程中,遇到了很多的问题,比如.因为使用的刷屏函数,所以屏幕经常出现闪 烁的情况,但是通过我和我的伙伴们的共同努力和学习,通过网上和书籍的查阅,我们也得 到了很多的收获,我们的小组也在中真正的学会了很多的东西,这次实训给我们带来了很大 的收获。可以按照程序运行的错误提示对原程序进行修改,在调试过程中有时也会遇到不懂 的问题,我去图书馆或上网查阅一些资料或者是向老师请教也解决了对源程序一一修改直到 运行成功。2.5设计的流程图总

5、程序设计图如图1所示:方向键控制的设计流程图如图2所示:其中upmove函数控制蛇向上运动,down move蛇吃食物蛇身变长的设计流程图如图3所示:2.6程序的总体设计思想利用人工绘图法,制作美观的游戏界面.通过随机函数产生随机数,控制游戏过程食物的出现.定义键盘操作,控制游戏过程蛇的移动方向.画出边界,并判断游戏是否结束.统计游戏过程蛇吃的食物数量,计算并输出游戏成绩.3软件的使用说明3.1建立游戏的过程说明先打开Microssft Visual C+程序,进入Microssft Visual C+程序后打开文件菜单, 点机新键命令按钮,先建立一个Win32 Console Applica

6、tion T程.建立工程时可填写工程 名称和你所建工成要存放的位置,点机确定按钮,再点机一个空工程类型的控制台程序, 再点机完成,然后点机确定按钮,此时一个所要建立的工程就已经建立好,然后再点机文 件中的新建按钮,然后再建立一个C+Source File文件,并填写文件名称,然后点机确 定按钮,此时所要建立的工程和文件都已建立完毕,此时您就可以把贪吃蛇游戏的代码复 制粘贴到你刚刚建立的工程和文件里面了,然后点机组建命令中的编译和组建命令,最后 点机执行命令就可进入贪吃蛇游戏中了。执行游戏的过程说明进入贪吃蛇游行中后,首先弹出一个界面,上面出现的是欢迎词和游戏的简单说明, 可点机任意键开始游戏,

7、此游戏是由键盘的四个方向键进行控制的,吃一个点,蛇身就长 长一端,总分数就加10分,如果碰壁或结尾游戏则结束,最后出先一个界面.上面显示你 此次游戏的总分数希望我这个小游戏能让你玩的开心。收获及体会在设计这个程序中我主要学会了如何运用以下有关C语言和C+ +的知识:1)函数定义是要做到顾名思义是很重要的,它对读程序的人正确认识程序十分重要在修改这个程序的过程中也能很快找到程序各模块的作用,大大增 加了程序的可读性。2) 分析函数先从mainO函数入手。Main。函数是C+源程序编译时的开始,从mam()函数开始读函数可将其他函数的功能理解得更透彻。3) 在做程序的时候先列框架,将这个程序所要达

8、到的目的(功能)分析出 来,选择正确的数据结构然后在将程序模块化,按照模块编写函数更加简单合理。4) 我还了解了很多的库函数的作用,如字符串函数中有很多对字符串进行 处理的函数,起功能我都有所了解。5) 学会了有关头文件的使用方法,及系统调配问题的解决方法等。6) 在调试过程中,遇到了很多的问题,比如,因为使用的刷屏函数,所以屏幕经常出 现闪烁的情况,但是通过我和我的伙伴们的共同努力和学习,通过网上和书籍的查阅,我们 也得到了很多的收获,我们的小组也在中真正的学会了很多的东西,这次实训给我们带来了 很大的收获。可以按照程序运行的错误提示对原程序进行修改,在调试过程中有时也会遇到 不懂的问题,我

9、去图书馆或上网查阅一些资料或者是向老师请教也解决了对源程序一一修改 直到运行成功。附录 部分程序代码清单#include#include#include#include#include#define HEAD 300#define FOOD 400define v_sleep 100/*改变sleep的大小可改变蛇的运动速度,此数值越小蛇的运动速度越快*/ int score=0; /*定义了一个全局变量来在整个程序中统计总成绩*/* 欢迎词 */void welc()(printf(”nnnnnnttt欢迎来到【贪吃蛇】小游戏nnu);printf(ttt蛇身加长一段就加10分nn);pri

10、ntf(tt此游戏用键盘的方向键控制即可。若想退出请按Esc建。n);printf(nttt相反的方向的话是暂停。n);printf(nttt请接任意键进入游戏。);getch();/* */* 人工画图程序 */void drawpt(int a,int x,int y) /利用人工绘图程序来画出蛇运动的范围/if(x=O)(return;if(y=O)( printf(ttf);return;if(x=16)printf(n”);return;if(y=16)(printfCV);if(x0&x16&y0&y16)(if(a=O)printf(O );/*用空心圆来表蛇改运动的总范围/el

11、se print“);/*用实心圆来蛇的长度和食物的出现地点*/ return;void draw(int (*sna)17)(int i,j;system(MclsM); /刷屏工具/for(i=0;i17;i+) /区域范围的大小/(for(j=0;j17;j+)(drawpt(snaij,jj);printf (Mttt 总成绩为%d 分u,score);/* */* 取随机数,出现食物用 */int randnoQ /*利用这个随机函数来控制食物的随机出现*/(srand(time(NULL);return rand0%15+l;/*随机函数出现食物时的范围,防止食物出现在范围之外*/

12、 / */* 判断游戏是否结束 */bool judgeGO(int (*sna)17)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

13、=0;y16;y+)(if(maxsnaxy)if(snaxy!=HEAD&snaxy!=FOOD)max=snaxy;/*这个也是求头部之后的*/ for(i=0;imax;i + +)(for(x=l;x16;x+)(for(y=l;y16;y+)(if(snax|y=i+l)count+;/*这个判断想了好久的/ score=(count-3)*10;/* 计算蛇的总成绩/ if(count!二max)/*判断身体部分是否连续/ return false;return true;/* /* 游戏结束显示 Vvoid gameover()system(MclsM);printf(”nnnn

14、nnnn)printf(,ttttM);printf(u 游戏结束nnM);printf(”tttt)printf (此次总成绩为Hd 分nn,score);printf(MttttM);printf (请您再接再厉nn);printf(”ttt“);printf(“按Esc键退出,按任意键重新开始。n);/* */全程标记法,从尾巴开始123456.HEAD,食物是FOOD。/void marksn() _void downmove(int (*sna)17);/*用键盘的方向键的下键来控制蛇向下运动/void upmove(int (*sna)17);/*用键盘的方向键的上键来控制蛇向上运

15、动*/void leftmove(int (*sna)17);/*用键盘的方向键的左键来控制蛇向左运动*/void rightmove(int (*sna)17);/*用键盘的方向键的右键来控制蛇向右运动*/int judgeF(int (*sna)17,int keym);int snake1717=0;/* 各种东西初始化 */int x=l,y=7,key,keyl;snakell=l;snakel2=2;snakel3=3;snake23=HEAD;while(snakexy !=0)(x=randno();y=randno();snakexM=FOOD:draw(snake);/*

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

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

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

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

20、在呈现头改变v_sleep的大小来控制蛇的 运动速度,/)break;case 27:exit(O);default:switch(keyl)case 72:while(!kbhit()&judgeGO(snake)( _ upmove(snake);/*键函数控制蛇向上运动会/ draw(snake);break;case 80:while(!kbhit()&judgeGO(snake)( _ downmove(snake);/*下键函数控制蛇向下运动/ draw(snake);breakcase 75:while(!kbhit()&judgeGO(snake)(leftmove(snake

21、);/*左键函数控制蛇向左运动/ draw(snake);break;case 77:while(!kbhit()&judgeGO(snake) )( _ rightmove(snake);/*右键函数控制蛇蛇向右运动*/ draw(snake);break/* */* 是否继续游戏 */gameoverQ;/*判断游戏是否继续的函数*/if(getch()=27)exit(O);else(marksn();getch();/* */ */* 上下左右移动神马的 */void downmove(int (*sna)17)/*控制蛇向下运动的函数/(int x = 0,y 二 O,mark 二

22、0;for(x=0;x16;x+)(for(y=0;y16;y+)if(snaxy!=0&snaxy!=HEAD&snaxy!=FOOD)(snaxM=snaxy-l;/面已经说了,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+)(for(y=0;yx:o=x)JO|:O=|Jeiu4o=Alo=x5ui/,噩史历理迅立回3$伸世,/(kl(8US,) WgAOL

23、U伊I piOA:ujnjsj:X+|jeuj=xeus!QV3H=Al-xeus)(OV3H= = Axeus)|!(+X:9iX:o=X)JO|)(+x:9lx:0=x)JO|(:Xxeus=|jeiu(aOOd=i|jeiu)i(+X:9TX:o=X)JO|)(+x:9x:o = x)ojT Axeus=Xxeus(aOOd=iMxeusTOaV3H=iX:o=A)jo|)(+x:9ix:o=x)JO|:0 二 |8心0 顼0 = xU!/乎德理呈T回幽翻爵/(亿l(eusQ juiJsAoiudn piOA:ujnsjMMWl+ljeuj=Wxeus单会用腥长:QV3H二囚1+xRus

24、(+x:91x:o=x)jo|Axeus= Xxeus(QOOd=i M xeusav3H=i 0 xeuso=i W 冈 pus)(+X:9TA:o=X)jo|)(+x:9ix:o=x)JO|:0 二 |爬心0 顼0=xiu/潺史闵理以早回莎隗爵./(ZtRgSj 5UI)9AOCU6u piOA:ujngj:1+|jeuj=xeus;QV3H=l-xeus)(QV3H= = A冈 BUS 加(+X:9IX:o=X)jo|)(+x:9Ix:o=x)jo|(:Xxeus=|jeiu(OOOzl= iM xeusTOQV3H=i M xeus 加(Xxeus|jeuj)j.i(+X:9TX:o=

25、A)jo|)(+x:9rx:o=x)jo|:T-Xxeus= Xxeus(OOOd=iM 冈 eus 冷冷 CV3H 二 iMRxRus 湿冷0 二 ipqxRus)!(+A:9TA:o=X)JO|) for(y=0;y16;y+)(if(marksnaxy)if(snaxy!=HEAD&snax y !=FOOD) mark=snaxy;for(x=0;x16;x+)(for(y=0;y16;y+)(if(snaxy二二 HEAD)(snax+l = HEAD;snaxy= mark+1;return;int judgeF(int (*sna)17jnt keym)(int randno()

26、;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-ly二二 FOOD&keym =二 72)(snax-ly=HEAD:snaxy=mark+l;while(snaifl!=O)i=randno();j=randno();snaij=FOOD;return 1;if(snax+ly =FOO

27、D&key m =80) snax+ly= HEAD;snaxy=mark+l;while(snaifl!=0)(i=randno();j=randno();snai|j=FOOD;return 1;)if(snax|y+1=FOOD&keym=77)(snaxy+l=HEAD:snaxy=mark+l;while(snap0!=O)(i=randno();j=randno();snaij=FOOD;return 1;)if(snaxy-l =FOOD&keym =75)(snaxy-l=HEAD;snaxy=mark+l;while(snap0!=O)(i=randno();j=randno();snai|j=FOOD;return 1;)return 0;/* */ 主函数没什么内容 */int main(void)(

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

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