贪吃蛇游戏设计报告
实验报告贪吃蛇

一、实验目的1. 掌握Python编程语言的基本语法和面向对象编程思想;2. 理解并实现贪吃蛇游戏的基本算法和流程;3. 学会使用Pygame库进行图形界面设计;4. 提高编程实践能力和团队协作能力。
二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 开发工具:PyCharm4. 图形库:Pygame三、实验内容1. 游戏界面设计2. 游戏逻辑实现3. 游戏控制实现4. 游戏测试与优化四、实验步骤1. 游戏界面设计(1)初始化Pygame库```pythonimport pygame```(2)设置游戏窗口```pythonscreen = pygame.display.set_mode((640, 480))pygame.display.set_caption("贪吃蛇游戏")```(3)设置游戏背景颜色```pythonscreen.fill((0, 0, 0))```2. 游戏逻辑实现(1)定义蛇类```pythonclass Snake:def __init__(self, x, y, width, height, color):self.x = xself.y = yself.width = widthself.height = heightself.color = colorself.x_change = 0self.y_change = 0def draw(self, surface):pygame.draw.rect(surface, self.color, (self.x, self.y, self.width, self.height))```(2)定义食物类```pythonclass Food:def __init__(self, x, y, width, height, color):self.x = xself.y = yself.width = widthself.height = heightself.color = colordef draw(self, surface):pygame.draw.rect(surface, self.color, (self.x, self.y, self.width, self.height))```(3)定义游戏主函数```pythondef game():clock = pygame.time.Clock()snake = Snake(50, 50, 10, 10, (0, 255, 0))food = Food(300, 300, 10, 10, (255, 0, 0))game_over = Falsewhile not game_over:for event in pygame.event.get():if event.type == pygame.QUIT:game_over = Trueelif event.type == pygame.KEYDOWN:if event.key == pygame.K_LEFT:snake.x_change = -10snake.y_change = 0elif event.key == pygame.K_RIGHT:snake.x_change = 10snake.y_change = 0elif event.key == pygame.K_UP:snake.x_change = 0snake.y_change = -10elif event.key == pygame.K_DOWN:snake.x_change = 0snake.y_change = 10snake.x += snake.x_changesnake.y += snake.y_changescreen.fill((0, 0, 0))snake.draw(screen)food.draw(screen)pygame.display.flip()clock.tick(15)pygame.quit()```3. 游戏控制实现在游戏主函数中,通过监听键盘事件来控制蛇的移动方向。
贪吃蛇游戏程序设计实验报告

贪吃蛇游戏程序设计实验报告贪吃蛇游戏程序设计实验报告1、引言1.1 文档目的1.2 背景介绍1.3 项目概述2、需求分析2.1 用户需求2.2 功能需求2.3 非功能需求3、总体设计3.1 系统结构3.2 使用的开发工具和技术3.3 程序流程图3.4 数据结构设计4、模块设计4.1 游戏界面模块设计4.2 蛇的移动模块设计4.3 食物模块设计4.4 游戏结束判定模块设计5、开发过程5.1 编码规范5.2 界面设计与实现5.3 功能模块实现5.4 联合测试与整合调试6、测试结果与分析6.1 单元测试6.2 集成测试6.3 性能测试6.4 用户验收测试7、部署与运维7.1 系统环境要求7.2 安装步骤7.3 运行与维护8、问题与解决方案8.1 开发中的问题8.2 解决方案9、结论9.1 实验总结9.2 实现目标9.3 后续改进方向附件:- 源代码文件- 参考文献法律名词及注释:- 版权:保护原创作品的独有权利,防止他人未经授权使用、复制或传播。
- 许可证:授权他人在特定条件下使用受版权保护的作品。
- 商标:用于标识特定产品或服务来源的标识,可以是文字、图形、颜色或声音。
- 专利:通过创造一种新的发明而获得的对该发明的独有权利,防止他人在未获许可的情况下制造、使用或销售该发明。
- 使用条款:规定使用软件、服务或作品的条件和限制。
- 免责声明:声明作者或提供者对使用软件、服务或作品时可能产生的损害不承担责任。
全文结束 \。
项目实践报告模板(贪吃蛇)

1系统设计要求1.1需求分析本系统为一个用C#实现, 用类和GDI+完成一个贪吃蛇游戏软件,该系统的具体功能如下:(1).控制蛇的运动方向:用键盘上的↑.↓.←.→控制蛇的运动方向。
若在游戏中,蛇头碰墙或是自己的身体,则游戏结束。
(2).蛇吃食物:蛇每吃一个食物就增长一节,并且得分,加相应的分值,达到一定的分值游戏上升一个级别。
(3).游戏结束:如果在游戏过程中,蛇头碰墙或是碰到了自己的身体,则游戏结束。
速度:玩家可以自己选择游戏速度1.2界面要求+要求界面简洁美观,简单易用。
1.3设计环境本程序选择Visual Studio 2005作为实验环境。
2设计思路2.1系统分析(1). 明确贪吃蛇的游戏规则(2). 将panel控件设为游戏背景。
(3). 场地.贪吃蛇及食物都是在panel 控件的重绘中绘制。
绘制蛇身的好处是在贪吃蛇进行移动时,不需要重绘制背景。
(4).用Timer组件来实现贪吃蛇的移动,并且该组件的Interval属性来控制移动速度。
2.2概要设计2.根据设计思路,可以为系统设计,.四个类,一个豆类,一个块类,一个蛇类,和一个场地类。
豆(Bean)类的作用:是在特定的位置生成一个豆,豆要不断被吃掉,当豆被吃掉后,原豆消失,又在新的位置出现新的豆。
块(Block)类的作用:用来构成蛇,在蛇出现时,要把构成蛇的块一个个输出(显示),在蛇消失时,要把块消除掉。
蛇(Snack)类作用:组成蛇,如果蛇吃了豆就增长一块,蛇死亡后要消除块。
在蛇运行过程中,判断是否碰到自身,判断是否死亡。
场地(Floor)类作用:游戏的主场地,豆要在此范围出现,蛇要在此范围运行。
3系统功能模块图3.1功能模块图3.2程序流程图定义新块bb定义并实例化点P(vertex.X+25,vertex.Y+25)实例化blockList[count]定义i=0i<=count是否成立块添加到blockList中i=i+1HeadNumber=count3.3类的结构图4调试过程生成块和豆的调试过程:运行程序,在画布上随机生成块和豆,如果无法生成块和豆就应该检查其随机生成函数,调整其相关函数.运行程序,生成不同大小和颜色的豆和块.蛇类的调试过程:运行程序在画布上随机生成蛇,如果无法随机生成蛇应查看生成蛇的相关函数,如随机生成函数,如果蛇只增不减少应查看显示蛇的方法里的移出函数.更该相关的函数后运行函数,控制蛇的运行方向以及测试蛇类的各项功能.场地类的调试过程:运行程序,初始化场地,如果无法生成场地,检查显示场地的方法,然后运行程序,测试蛇类的各项功能.主游戏的调试过程:运行程序,如果"级别"菜单的级别无法生效,就应该检查属性的click事件,是否把级别控制添加到click事件中。
贪吃蛇设计报告

贪吃蛇设计报告1. 引言贪吃蛇是一款经典的游戏,它的目标是通过操纵蛇的移动,吃掉尽量多的食物,并尽可能长大。
本文将介绍贪吃蛇游戏的设计过程和实现细节。
2. 游戏介绍贪吃蛇游戏由一个蛇和若干个食物组成。
玩家通过控制蛇的移动方向,使蛇能够吃到食物并增长身体长度。
当蛇撞到游戏边界或自己的身体时,游戏结束。
3. 游戏设计3.1 游戏场景贪吃蛇游戏的场景是一个矩形的游戏区域,可以使用二维数组来表示。
每个数组元素可以表示该位置的状态,如蛇的身体部分、食物或空白区域。
3.2 蛇的移动蛇的移动是关键部分,可以通过控制蛇的方向来实现。
蛇的长度会随着吃到食物而增加,当蛇移动时,蛇的尾部会被剪切掉,而蛇头会根据移动方向新增一个位置。
3.3 食物的生成食物的生成可以随机选择游戏区域的一个空白位置,并将该位置设置为食物。
3.4 碰撞检测碰撞检测主要检测蛇是否撞到了游戏边界或自己的身体。
当蛇的头部位置与边界或身体的其他部分位置重叠时,游戏结束。
4. 游戏实现贪吃蛇游戏可以使用编程语言来实现。
以下是一个示例的实现代码:import random# 游戏区域的大小width =10height =10# 蛇的初始位置和方向snake = [(0, 0)]direction = (1, 0)# 食物的位置food = (random.randint(0, width-1), random.randint(0, height-1))# 游戏是否结束的标志game_over =False# 游戏主循环while not game_over:# 处理输入# ...# 更新蛇的位置head = snake[0]new_head = (head[0] + direction[0], head[1] + direction[1])snake.insert(0, new_head)# 如果蛇头位置与食物位置重叠,则吃掉食物并生成新的食物if new_head == food:food = (random.randint(0, width-1), random.randint(0, height-1)) else:snake.pop()# 检测碰撞if new_head[0] <0or new_head[0] >= width or new_head[1] <0or ne w_head[1] >= height:game_over =Trueif new_head in snake[1:]:game_over =True# 渲染游戏界面# ...# 游戏结束,显示得分等信息# ...5. 总结贪吃蛇游戏是一款简单但耐人寻味的游戏,通过实现蛇的移动、食物的生成和碰撞检测等功能,可以让玩家体验到游戏的乐趣。
贪吃蛇游戏程序设计实验报告

Windows编程大作业贪吃蛇设计与实现学校:轻工大学院系:班级:姓名:学号:2015 年12月16日目录一、题目介绍二、设计目的三、详细设计3.1贪吃蛇本体设计3.2贪吃蛇食物设计3.3游戏界面设计3.3.1游戏初始化3.3.2游戏开始3.3.3游戏暂停3.3.4游戏退出3.3.5游戏总界面3.3.6游戏区域与背景3.3.7关于SNAKE3.4玩法规则设计3.5核心设计四、功能测试五、总结六、参考文献一、题目介绍:编写一个基于MFC的小游戏。
基本要求:1、实现一个小游戏2、实现基本游戏控制功能3、具有游戏数据保存功能4、界面布局合理、美观;二、设计目的:通过使用vc++6.0实现一个小游戏的课程设计,进一步掌握MFC的高级使用方法和锻炼自己动手写程序的能力。
了解游戏设计的整个过程,通过熟练使用MFC来设计游戏。
程序主要包括:游戏界面设计,游戏菜单栏设计,游戏初始化,游戏控制等。
培养和锻炼开发游戏的能力。
三、详细设计3.1贪吃蛇的本体设计贪吃蛇的头部拥有一个坐标(x,y),蛇体有一个长度len,蛇有一个运动方向direct,故定义一个结构体如下:struct Snake{int x,y;int len;int direct;}Snake[50];3.2贪吃蛇食物设计贪吃蛇的食物有一个坐标(x,y),此食物有一个标志isfood,当isfood为0时,表示食物还没被吃,为1时,表示被吃。
struct Food{int x;int y;int isfood;}Food;3.3游戏界面设计3.3.1游戏初始化游戏初始蛇体长度为3,颜色为灰色,食物标志为1,因为此时没有显示出食物,需要随机生成后,才置为0;void CSNAKEView::OnInitialUpdate(){CView::OnInitialUpdate();Snake[0].x=10;Snake[0].y=10;Snake[1].x=11;Snake[1].y=10;Snake[2].x=12;Snake[2].y=10;Snake[0].direct=3;Snake[0].len=3;Food.isfood=1;//初始化贪吃蛇起初有3个节点,长度为3,起始坐标;食物默认为1无0有// TODO: Add your specialized code here and/or call the base class }void CSNAKEView::oninit(){CDC *pDC=GetDC();CBrush DrawBrush=(RGB(100,100,100));CBrush *Drawbrush=pDC->SelectObject(&DrawBrush);for(int i=0;i<=Snake[0].len-1;i++)pDC->Rectangle(Snake[i].x*20,Snake[i].y*20,(Snake[i].x+1)*20,(Snake[i].y+1)*2 0);pDC->SelectObject(DrawBrush);}3.3.2游戏开始点击游戏开始菜单后,出现一个对话框,提示一秒后,将开始游戏。
java贪吃蛇课程设计报告总结

课程设计报告:Java贪吃蛇游戏1. 背景贪吃蛇是一款经典的街机游戏,通过控制蛇的移动,吃掉食物,使蛇变得越来越长,直到触碰到边界或自己的身体为止。
该游戏在20世纪80年代流行起来,并成为了一种代表性的休闲娱乐方式。
贪吃蛇游戏可以提高玩家的反应能力、体力协调和空间感知能力。
本次课程设计旨在通过使用Java编程语言,设计实现一个简化版的贪吃蛇游戏,以加深学生对面向对象程序设计的理解和应用,并培养学生的逻辑思维能力和团队协作精神。
2. 分析2.1 游戏规则分析在贪吃蛇游戏中,玩家通过控制蛇的移动方向,使蛇吃到食物从而变长,直到游戏结束。
具体规则如下:•初始状态下,蛇由一个长度为3的身体组成,呈水平放置。
•蛇的移动方式为每个时间单位(通常为固定时间间隔)前进一格,移动方向由玩家通过键盘输入控制。
•蛇在吃到食物后,身体变长一节,并在地图上随机生成新的食物。
•蛇头碰到地图边界或自身身体的任意部分,游戏结束。
2.2 功能模块分析基于对游戏规则的分析,可以将贪吃蛇游戏的功能模块划分如下:•游戏初始化模块:初始化地图、蛇的初始位置和长度、生成初始食物等。
•用户输入模块:读取用户的键盘输入,控制蛇的移动方向。
•游戏逻辑模块:根据用户输入和游戏规则,更新蛇的位置、判断是否吃到食物或撞到障碍物等。
•地图绘制模块:将地图、蛇、食物等元素绘制到屏幕上。
•游戏循环模块:根据固定时间间隔循环执行游戏逻辑、用户输入和地图绘制等操作。
•游戏结束模块:在游戏结束时输出游戏得分等信息。
2.3 设计思路基于上述功能模块的分析,我设计了如下的实现思路:1.使用Java面向对象编程的思想,抽象出地图、蛇、食物等对象,并为其封装相应的属性和方法。
2.在游戏初始化模块中,创建地图对象、蛇对象,初始化位置和长度,并生成初始食物。
3.在用户输入模块中,利用Java的键盘事件监听机制,获取用户的方向输入,并通过调用蛇对象的移动方法实现控制蛇的移动方向。
设计贪吃蛇实验报告

一、实验目的1. 掌握游戏设计的基本流程和原则。
2. 学会使用Unity游戏引擎进行游戏开发。
3. 提高编程能力和逻辑思维能力。
4. 实现贪吃蛇游戏,并优化游戏性能。
二、实验环境1. 操作系统:Windows 102. 开发工具:Unity 2019.4.10f13. 编程语言:C#三、实验内容1. 游戏设计2. 场景搭建3. 贪吃蛇游戏逻辑实现4. 游戏优化四、实验步骤1. 游戏设计(1)确定游戏主题:贪吃蛇(2)游戏规则:玩家控制蛇头,通过移动蛇头吃到食物,蛇的长度逐渐增加。
同时,蛇头不能撞到墙壁或自己的身体,否则游戏结束。
(3)游戏界面:包括游戏主界面、游戏场景、得分显示、游戏结束界面等。
2. 场景搭建(1)创建游戏场景:使用Unity编辑器创建一个3D场景,命名为“贪吃蛇场景”。
(2)添加墙壁:使用Unity编辑器中的Cube对象创建墙壁,设置墙壁的位置和大小,使墙壁围成一个封闭的空间。
(3)添加食物:使用Unity编辑器中的Sphere对象创建食物,设置食物的位置和大小。
3. 贪吃蛇游戏逻辑实现(1)创建蛇头和蛇身:使用Unity编辑器中的Cube对象创建蛇头和蛇身,设置蛇头和蛇身的位置和大小。
(2)控制蛇头移动:编写C#脚本,实现蛇头在四个方向上的移动。
(3)蛇头吃到食物:当蛇头与食物接触时,蛇的长度增加,食物消失。
(4)蛇头撞到墙壁或自身:当蛇头与墙壁或自身接触时,游戏结束。
4. 游戏优化(1)提高游戏帧率:通过优化代码和减少资源消耗,提高游戏帧率。
(2)优化蛇身移动:在蛇身移动时,减少不必要的计算,提高游戏性能。
五、实验结果与分析1. 实验结果通过以上步骤,成功实现了一个简单的贪吃蛇游戏。
游戏界面简洁,操作方便,符合游戏设计原则。
2. 实验分析(1)游戏设计方面:游戏规则简单易懂,游戏画面简洁,符合玩家需求。
(2)场景搭建方面:墙壁和食物的布局合理,有利于游戏进行。
(3)游戏逻辑实现方面:蛇头移动、吃到食物、撞墙等逻辑实现正确,游戏运行稳定。
MFC课程设计报告-贪吃蛇

MFC课程设计报告MFC实现贪食蛇小游戏1.需求分析,系统功能贪吃蛇游戏需求分析贪吃蛇游戏作为一款经典小游戏,版本多样,娱乐性也很高,适合在闲暇时放松心神。
并且可在多个平台上实现,程序简单易懂,非常适合MFC初学者学习制作。
贪吃蛇游戏功能介绍一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上的四个方向键控制蛇向上接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体游戏结束。
并且可以在游戏开始前自由选择游戏难度,游戏过程中可暂停游戏,并有积分系统,且积分每满一定值,蛇的运行速度会逐步增加。
2. 分工情况为在设计过程中实现小组成员能力最大化,进行了以下分工:1、张施展:负责前期系统需求分析,系统结构设计,图标设计,界面美化调整工作,以及课程设计报告的撰写。
2、张清扬:负责主要程序的编写工作,菜单的设计及代码编写工作。
3、资料收集,程序调试共同进行。
3. 程序及系统结构设计贪吃蛇程序设计思路1、方案讨论贪吃蛇游戏作为一款经典的休闲类小游戏,深受同学喜爱,因此我们将贪吃蛇作为此次MFC课程设计题目。
在最初的方案中,我们倾向于单文档〔SDI〕的形式设计,但最初尝试都因缺少一些文件等情况而失败。
考虑到windows中自带小游戏大多采用对话框形式,为能更好的与同学们的使用习惯相一致,最终决定使用对话框〔Dialogue〕的形式。
2、数据结构在数据结构的选取,我们选择了链表,链表具有用多少空间就开多少空间的优点,使程序执行更稳定,高效。
游戏控制模块框函数成员贪吃蛇程序整体间调用关系4. 软件测试报告游戏初始界面菜单栏记分牌操作说明运动区域游戏运行界面游戏结束界面出现的问题1、问题:蛇运动区域与边框不匹配,造成蛇运动出边框或未到达边框而游戏结束。
原因:相关数据不匹配。
解决:重新对程序中的矩形框绘制函数数据进行修改,并修改蛇运动边界的判断条件。
2、问题:食物出现在边框外,造成游戏无法进行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
青岛理工大学琴岛学院设计报告课题名称:贪吃蛇游戏设计学院:青岛理工大学琴岛学院专业班级:计算机网络技术091 学号:0017学生:王三鹏指导教师:张秀国、宋传磊青岛理工大学琴岛学院教务处2010 年12 月29 日目录需求分析、设计说明........................ 4•…1.设计思路...................... … ....2.程序框图……………………………………5 ………3.主要函数……………………………………7 ………三、代码实现..................... 6 .....1.构造函数............................................. (6)2.放置食物............................................. (6)3.碰撞检测............................................. (7)四、问题解决.................... 9 ......五、总结展望.................... 10 .....六、参考文献10一、需求分析1.选题接到课程设计任务后,我们对曾经非常感兴趣的几款经典小游戏作了分析并筛选,然后发现使用MFC 类库都可以完成这些游戏的编译,但是我们刚刚学习,还不能完全掌握MFC 类的使用和复杂的算法,但是我们相信通过一个简单的贪吃蛇游戏可以让我们对MFC得到充分的锻炼。
2.功能使用MFC编译的游戏,我们预计实现游戏的开始、暂停、继续、等级的提升、难度的增加。
3.重要的MFC1)CWnd:窗口,它是大多数看得见的东西”的父类(Windows里几乎所有看得见的东西都是一个窗口,大窗口里有许多小窗口),比如视图CView、框架窗口CFrameWnd、工具条CToolBar、对话框CDialog、按钮CButton,etc; —个例外是菜单(CMenu)不是从窗口派生的。
2)CDocument 文档,负责内存数据与磁盘的交互。
最重要的是On Ope nDocume nt(读入),0n SaveDocume nt (写盘)‘Serialize (读写)3)CView 视图,负责内存数据与用户的交互。
包括数据的显示、用户操作的响应(如菜单的选取、鼠标的响应)。
最重要的是OnDraw(重画窗口),通常用CWnd::Invalidate()来启动它。
另外,它通过消息映射表处理菜单、工具条、快捷键和其他用户消息。
4)CDialog 对话框5)CPen 笔,画线6)CBrush 刷子,填充7)CBitmap 位图8)CRgn区域,指定一块区域可以用于做特殊处理。
9)CString字符串。
封装了C中的字符数组,非常实用。
10)CPoint 点,就是(x,y)对11)CRect 矩形,就是( left,top,right,bottom ) 二、总体设计说明1.设计思路在数据结构上,用数组存储蛇以及蛇的运动区域。
在数组中,每个元素有四个云感动方向,分别为RIGHT丄EFT,UP,DOW在没有蛇身的区域,数组的元素值为0。
在蛇身的每个节点,用一个数组元素存储当前蛇节点的运动方向。
通过改变数组中元素的值来表示蛇身的移动。
在程序中运用定时器来保证蛇的持续移动。
每个一定的时间间隔,蛇移动一格。
在设计界面时。
在Visual Studio C++勺环境下,建立基于对话框的工程,在工程下设计游戏界面,实现贪食蛇运行算法。
在对话框中画出一个矩形,在大矩形中,用20x20的像素单位表示每一个蛇的节点。
当数组节点的值不为0的时候,在大矩形中画出相应的蛇的节点矩形。
并在蛇每移动一小格的时候,重绘整个窗口。
在对蛇身进行绘画时。
通过数组元素的值将蛇身在对话框的矩形中显示出来。
在蛇身运动时,首先在蛇头位置蛇身增长一个节点,然后判断蛇头是否到达食物所在位置,若在食物所在位置,则蛇尾不减一,蛇身继续移动,若蛇头不在食物位置,则蛇尾减一,蛇身继续移动。
若蛇头越界或者蛇头与蛇身重叠,则游戏结束。
2.程序框图操作控制:如图 1 所示游戏控^1]模块图游戏控制:如图2所示FM HTTI tn IF图23•主要函数和变量:如表1表2所示表主要函数和变量三、代码实现1.构造函数:通过定义构造函数CSnakeView::CSnakeView()调用IniGame()实现游戏界面的初始化,为开始游戏做好准备,所以在开始进行游戏之前,游戏界面就已经显示完整。
CSn akeView::CS nakeView(){In iGame();}CSnakeView::~CSnakeView(){2.消息处理食物位置:在函数中声明一个(x,y)数对uAimX,uAimY,然后执行条件循环while (1),使用随机数函数rand ()为uAimX,uAimY 赋值,并在一个循环体中判断该点位置上是否有元素,若没有,则放置实物在该坐标上。
void CSnakeView::IniAim(){int uAimX,uAimY;while(1){uAimX=rand()%m_nHeight;uAimY=rand()%m_nWidth;int uTag=0;for(int i=0;i<=();i++){CPoint uPoint=(i);if==uAimX || ==uAimY){uTag=1;break;}if(uTag==0)break;}m_pAim=CPoint(uAimX,uAimY);}3.碰撞检测:这里碰撞检测是贯穿游戏始末的主要步骤,蛇神移动的每一步都要执行一次碰撞检测。
第一步检测边界,如果由计时器控制的蛇身触界则游戏结束,否则进行第二步检测,检测该点是否有蛇身(蛇身分为两种,一种是地图上随机生成的实物,另一种是由时间轴控制的蛇)若该点有食物,则蛇身不减,计时器继续运行;若该点是蛇身则调用KillTimer(1) 游戏结束碰撞检测实际上是计时器函数的后半部分。
if(uTag==0){for(int i=0;i<();i++){CPoint uPoint1=(i);if== && =={uTag=1; break;}}}if(uTag==0){(0,uPoint);ReDisplay(uPoint);if== && =={m_nCount++;IniAim();Invalidate();}else{CPoint uPoint1=());());ReDisplay(uPoint1);}}else{KillTimer(1);MessageBox(strTemp," 游戏结束"); } CView::OnTimer(nIDEvent);运行界面:①初始界面:如图35图3 游戏初始界面②运行时界面:如图4占〉莓川”硝.4(.2腫昭Rftrtlr图4游戏运行时界面③结束界面:如图Vlfi n««> ■图5游戏结束时界面四、问题解决:1•找不到合适的方法实现食物随机放置:游戏进行时,如果采用原来的方式在游戏进行到 200秒以上时会出现没有食物的现象。
我们通过 while ( 1 )循环控制的随机 x ,y 坐标在地图上 绘制一段蛇身来解决了这一问题。
2•在控制游戏选择性条件里食物与蛇身的关系:一开始,我们的设想是碰撞一次食物,让蛇身加一节,后来实现时遇到了困难,就是不变化。
然后我们决定让蛇每前进一步就加一节,然后每 步都进行碰撞检测,如果碰撞到食物就不减一节,反之则减。
这样,就把 每一步都控制在了一个贯穿游戏始末的条件循环体中。
3. 碰撞检测不能随计时器一起良好运行:检测游戏时经常出现撞墙不死的情况,疑似碰撞检测没有正常运行。
经改进,我们把碰撞检测加到计时器里面同时运行,这保证了每一步的正 确性,又使游戏流畅。
五、总结展望:参考资料和程序成品,我了解了游戏的最基本形式。
ontimer ()函数是控制游戏运行的根本函数,借助这一函数,能实现贪吃蛇、俄罗斯方块、赛车等多个游戏的开发。
随机数生成函数rand ()的应用在贪吃蛇游戏中是一个关键步骤,通过不断的循环和调用,能保证游戏的持续进行和更新,其实不止是贪吃蛇,在大多数需要随机生成元素的游戏中,都可以用rand()函数生成随机数,再控制坐标等变量实现“随机生成”功能。
碰撞检测是一个逻辑性比较强的地方,这一段代码的实现,我们想了很多,也找了很多资料,不管是检测碰撞类型先后顺序,还是碰撞检测的位置都经过了多次试验,虽然成品游戏中的代码能够实现,但是我们还是改了又改,让它以我们最理想的形式实现。
通过这一次课程设计,我最大的收获就是分析问题解决问题能力的提高,发现问题,而后解决问题是生活的永续循环,这种能力会伴随我们一生;其次,程序的开发给了我很多经验,相信时间充裕的话,我能独立开发一个小游戏;最后,老师提出的对设计报告的种种要求也为我以后的各种报告的规范性做好了心理准备。
六、参考文献:[1]孙鑫•《VC++深入详解》.北京.电子工业出版社•[2]谭浩强.《 C + +程序设计》.北京.清华大学出版社.[3]刘春辉.《Visual C+程序设计学习笔记》.北京.电子工业出版社.[4]Charles Petzold.《Windows 程序设计》.北京.北京大学出版社.⑸曾凡锋.《MFC编译技巧与范例详解》•北京.清华大学出版社.。