- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
贪吃蛇实践报告
问题描述
贪食蛇游戏是一个深受人们喜爱的游戏:一条蛇在密闭的围墙内,在围墙内出现食物,通过按键控制蛇向上下左右四个方向移动,蛇撞到食物,则食物被吃掉,蛇的身体增加一节。如果蛇在移动的过程中,撞到墙壁或身体的交叉(蛇头撞到自己的身体)游戏结束。现要求利用Turbo C2.0来实现该游戏。功能要求如下:
基本功能
提供一个图形模式下的界面。
开始游戏:空格键或回车键;退出游戏:Esc键。
支持用键盘的方向键来控制蛇的移动,蛇可以向上、下、左、右四个方向移动。
当蛇头碰到食物时,食物被吃掉,蛇的身体增长一节。
初始场景内随即出现1个食物,当食物被吃掉时,再随机出现一个食物。
要有记分机制,没吃掉一个食物,增加相应的分数。
蛇碰到墙壁或是自己身体的一部分则游戏结束。
高级功能
暂停功能:能随时通过按键来暂停游戏,再按一次则继续游戏。
速度调节功能:当分数达到某个值后,对蛇的移动速度进行一定的提升,但会有一个速度上限。
奖励机制:增加另一种的奖励食物,蛇吃到该种食物后蛇的身体减少一节(最短不能少于2节),但不增加分数。该种食物的颜色要区别与普通食物的颜色。奖励食物有时间限制,在一定时间内没有吃掉则会消失。
音效功能:在游戏开始、吃掉食物、撞墙、撞到自己时提供不同的音效。
设计及实现要点
基本思路:首先设计主界面,主界面是一个密封的围墙,并在屏幕最右面留一部分用来显示分数、计时等其他信息。围墙直接画一个矩形来表示,四面围成密闭的矩形来作为围墙。接着是初始化蛇与食物的位置并将他们用图形表示出来。然后进行一个循环,将蛇按当前的方向移动,并处理键盘的方向按键信息,调整蛇的移动方向。蛇头如果碰到食物,则食物消失,蛇身增长一节,更新分数,并在另外的地方又随机出现食物;如果碰到围墙或是自己的身体,则游戏结束,关闭图形系统。
难点分析
表示蛇的图形及蛇的移动方向。用一个小矩形块表示蛇的一节身体,身体每长一节,增加一个矩形块。移动时必须从蛇头开始,所以蛇不能向相反的方向移动。如果不安任何键,蛇自行在当前方向上移动,当游戏者按了有效的方向键后,先确定蛇头的位置,然后蛇身体随着蛇头移动。在图形的实现上,从蛇头的新位置开始画出蛇。这时,由于没有清屏的原因,原来蛇的位置和新蛇的位置差一个单位,将蛇的最后一节用背景色覆盖。
检测蛇有无撞到食物、围墙或是自己的身体。当蛇开始移动之后,需要判断蛇头要移动到的新的位置的情况,然后根据新位置是空白、食物、围墙还是蛇的身体来做出相应的操作。可以用一个二维数组来表示整个场景,以不同的值来表示每个位置的情况。
事物的随机产生。当食物被吃掉后,要在场景中重新随机产生。利用C语言提供的随机函数rand()产生随机数并将该随机数缩小到符合场景大小的范围中来,以此作为食物位置的横纵坐标。
蛇的移动速度调节。在高级功能中,当分数达到一定的值后,移动速度将进行一定的提升。主要利用蛇的两次移动之间的时间间隔来实现,也就是调整两次循环之间的停顿时间,可以使用Tubor C函数库中的delay()函数来实现。
奖励事物的定时机制。解决这个问题要用到时钟中断。时钟中断大约每秒钟发生18.2次。截获正常的时钟中断后,先处理完正常的时钟中断,将计时变量加1.这样,每秒钟计时变量约增加18。需要控制时间的时候,只要看这个计时变量就行了。截获时钟中断要用到函数
getvect()和setvect()。
文件名 函数原型 函数功能 处理描述 draw.c void Init(void) 初始化图形模式 调用initgraph()切换到图形模式 void Draw(void) 初始化贪吃蛇界面 调用rectangle()画围墙 void Close(void) 关闭图形 调用closegraph()关闭图形 timer.c void interrupt(*oldtimer)(void) 指向原来的时钟中断处理过程入口中的中断处理函数指针(句柄) void interrupt newtimer(void) 新的时钟中断处理过程 调用(*oldtimer)()函数句柄,计时器自动加1 void SetTimer(void interrupt(*IntProc)(void)) 设置新的时钟中断处理过程 调用setvect()设置新的时钟中断处理过程 void KillTimer() 恢复原有的时钟中断处理过程 调用setvect()恢复原有的时钟中断处理过程 play.c void GamePlay(void) 游戏实现的过程 如何画出蛇 蛇如何移动 蛇的身体怎样增加 怎样吃食物 怎样控制奖励 void GameOver(void) 游戏结束后退出游戏 如果蛇死,则退出游戏
您可能关注的文档
最近下载
- 枕头坝一级水电站水轮发电机转子支架组装与焊接工艺.docx VIP
- 2025-2026学年统编版(2024)七年级道德与法治上册全册教案(教学设计).docx
- 心理健康状况自评量表(SCL-90).doc VIP
- DB21_T 4014-2024 建筑垃圾资源化利用技术规程.pdf VIP
- 某道路新建污水管道工程监理规划.doc VIP
- 苍南县小型农田水利设施技术升级改造经济效益分析.docx VIP
- DB32_T 4463-2023 水域状况评价规范.docx VIP
- 南京科目一新题库及答案.doc VIP
- 市政污水管道工程监理规划.doc VIP
- 关工委办公室主任关心下一代的先进事迹材料.docx VIP
文档评论(0)