贪吃蛇游戏程序设计实验报告
实验报告贪吃蛇
![实验报告贪吃蛇](https://img.taocdn.com/s3/m/c1b4195c02d8ce2f0066f5335a8102d276a261ca.png)
一、实验目的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. 游戏控制实现在游戏主函数中,通过监听键盘事件来控制蛇的移动方向。
贪吃蛇游戏程序设计实验报告
![贪吃蛇游戏程序设计实验报告](https://img.taocdn.com/s3/m/cc9af60f5b8102d276a20029bd64783e08127d69.png)
贪吃蛇游戏程序设计实验报告贪吃蛇游戏程序设计实验报告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 后续改进方向附件:- 源代码文件- 参考文献法律名词及注释:- 版权:保护原创作品的独有权利,防止他人未经授权使用、复制或传播。
- 许可证:授权他人在特定条件下使用受版权保护的作品。
- 商标:用于标识特定产品或服务来源的标识,可以是文字、图形、颜色或声音。
- 专利:通过创造一种新的发明而获得的对该发明的独有权利,防止他人在未获许可的情况下制造、使用或销售该发明。
- 使用条款:规定使用软件、服务或作品的条件和限制。
- 免责声明:声明作者或提供者对使用软件、服务或作品时可能产生的损害不承担责任。
全文结束 \。
贪吃蛇编程实验报告
![贪吃蛇编程实验报告](https://img.taocdn.com/s3/m/cf4b0327974bcf84b9d528ea81c758f5f61f2917.png)
计算机实习报告:班级: 07班学号小班序号:11题目:贪吃蛇邮箱:小游戏“贪吃蛇”实验报告一.功能说明1.1总体功能说明贪吃蛇的小游戏,控制蛇来吃苹果;随着吃掉的苹果个数的增加分数会增加,但蛇身也会变长;如果蛇撞到墙壁或者自己的话就会死掉结束游戏。
1.2用户界面选择游戏等级,等级越高速度越快;游戏界面;死后选择是否继续游戏;1.3使用方法进入先选择游戏等级,1-9个等级对应的速度依次增大并且获得的分也依次增大。
通过上下左右控制蛇的运动方向,可选择1-9共9个等级,蛇会有不同的速度和分数递加。
死亡后按Y或N来继续或结束游戏二.程序设计说明2.1 总体设计框架2.2 关键算法描述1.蛇的运动算法:将蛇的前一节坐标赋给后一节,最后一节消去前一节。
textout(handle,x[lenth-1],y[lenth-1],wColors,1," ");for(int n=lenth-1;n>0;n--){x[n]=x[n-1];y[n]=y[n-1];}y[0]++;textout(handle,x[1],y[1],wColors,1,"●");textout(handle,x[0],y[0],wColors,1,"◆");2.蛇的死亡算法:即蛇头不与任何一个蛇身坐标相重合int right=0;for(int i=1;i<lenth;i++) //判断是否死掉right=(right||(x[i]==x[0]&&y[i]==y[0])); //若蛇头与任意一节不重合则right值为0;3.蛇头坐标不与边框重合即撞墙的判断。
4转弯算法:Int ch;ch=_getch();switch(ch){case 72:case 80:case 75:case 77:default:;2.3 程序设计的难点和关键点1.蛇的运动算法2.蛇不能反向运动3.音乐和音效的插入2.4 调试的方法1.采用坐标赋值运算,将前一个坐标的值赋给后一个,实现传递textout(handle,x[lenth-1],y[lenth-1],wColors,1," ");for(int n=lenth-1;n>0;n--){x[n]=x[n-1];y[n]=y[n-1];}y[0]++;textout(handle,x[1],y[1],wColors,1,"●");textout(handle,x[0],y[0],wColors,1,"◆");2.加入俩次判断:每次用一个临时变量来记录之前的按键再用SWITCH语句来判断是否方向相反。
贪吃蛇游戏程序设计实验报告
![贪吃蛇游戏程序设计实验报告](https://img.taocdn.com/s3/m/73415062de80d4d8d15a4f77.png)
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开放性实验报告贪吃蛇](https://img.taocdn.com/s3/m/2a31e0a00875f46527d3240c844769eae009a3a0.png)
JAVA开放性实验报告贪吃蛇实验目的:本实验旨在利用Java语言实现一个经典的贪吃蛇游戏,通过实践提升对面向对象程序设计的理解和应用能力,加深对Java语言的熟练程度,并提高解决问题的能力和编程实践经验。
实验内容:1.设计游戏界面:通过Java中的Swing库实现游戏窗口的设计,包括游戏区域、游戏开始按钮、得分显示等。
2.实现游戏逻辑:设计贪吃蛇的移动规则,食物的生成和吃掉判定,碰撞检测等游戏逻辑。
同时实现游戏的主循环,控制游戏的进行。
3.实现键盘控制:通过监听键盘事件,实现玩家控制贪吃蛇的移动方向。
4.设计游戏机制:设置游戏的难度等级,增加贪吃蛇的移动速度、食物生成间隔等参数,使游戏更具挑战性。
5.设计游戏结束逻辑:当贪吃蛇头碰到墙壁或自身时,游戏结束并显示得分。
玩家可以选择重新开始游戏或退出。
实验步骤:1.设计游戏界面:创建一个JFrame窗口,在窗口中添加游戏画布,开始按钮和得分显示等组件。
2.实现游戏逻辑:设计Snake类和Food类,表示贪吃蛇和食物。
通过ArrayList存储贪吃蛇的身体节点,并实现移动、吃食物等方法。
3.实现键盘控制:通过实现KeyListener接口来监听键盘事件,根据按键控制贪吃蛇的移动方向。
4.设计游戏机制:设置贪吃蛇的移动速度、食物生成间隔等参数,根据难度级别逐步增加,使游戏更具挑战性。
5.设计游戏结束逻辑:当贪吃蛇头碰到墙壁或自身时,游戏结束并显示得分。
提供重新开始游戏和退出游戏的选项。
实验结果:经过实验设计和编码实现,成功完成了Java贪吃蛇游戏的开发。
游戏界面美观,操作流畅,游戏逻辑完整,玩家能够通过控制贪吃蛇吃到食物并获得得分。
随着游戏的进行,贪吃蛇会不断变长,玩家需要避开障碍,控制蛇头移动,体验游戏的乐趣和挑战。
实验总结:通过本次实验,我深入学习了Java语言的面向对象编程思想和应用,掌握了Swing库的使用方法,加深了对Java语言的理解和应用。
关于贪吃蛇的实训报告
![关于贪吃蛇的实训报告](https://img.taocdn.com/s3/m/81a8887ca4e9856a561252d380eb6294dd8822a2.png)
一、实训目的本次实训旨在通过C语言编程实现贪吃蛇游戏,巩固和加深对C语言程序设计的基本知识的理解和掌握,提高编程和程序调试的基本技能,并锻炼独立自主设计程序和编辑代码的能力。
通过设计贪吃蛇游戏,进一步理解和运用结构化程序设计的思想和方法,初步掌握开发一个小型实用系统的基本方法,学会调试一个较长程序的基本方法,以及掌握书写程序设计开发文档的能力。
二、实训内容1. 游戏规则贪吃蛇游戏的基本规则如下:- 蛇在游戏区域中上下左右移动,通过键盘方向键控制。
- 每次蛇头撞到食物,蛇身增长一节,同时计10分。
- 若蛇头撞到墙壁或自身,游戏结束。
- 游戏区域大小、蛇的初始长度、食物的生成方式等参数可调整。
2. 程序设计(1)数据结构- Food结构体:用于存储食物的位置信息,包括横坐标x、纵坐标y和是否生成食物的标志yes。
```cstruct Food {int x;int y;int yes;};```- Snake结构体:用于存储蛇的位置信息、长度、移动方向和生命状态。
```cstruct Snake {int x[N];int y[N];int node;int direction;int life;};```(2)功能模块- 初始化函数:初始化游戏区域、蛇的位置、长度、方向和生命状态,以及食物的位置信息。
- 键盘输入处理函数:获取键盘输入,控制蛇的移动方向。
- 食物生成函数:根据设定规则生成食物。
- 蛇移动函数:根据蛇的移动方向和速度,更新蛇的位置信息。
- 游戏判断函数:判断蛇是否吃到食物、撞到墙壁或自身,以及游戏是否结束。
- 界面绘制函数:绘制游戏区域、蛇和食物。
三、程序实现以下为部分关键代码示例:```c// 初始化函数void init() {// 初始化游戏区域、蛇的位置、长度、方向和生命状态,以及食物的位置信息}// 键盘输入处理函数void keyInput() {// 获取键盘输入,控制蛇的移动方向}// 食物生成函数void generateFood() {// 根据设定规则生成食物}// 蛇移动函数void moveSnake() {// 根据蛇的移动方向和速度,更新蛇的位置信息}// 游戏判断函数void judgeGame() {// 判断蛇是否吃到食物、撞到墙壁或自身,以及游戏是否结束}// 界面绘制函数void draw() {// 绘制游戏区域、蛇和食物}```四、实训心得与体会1. 编程能力提升:通过本次实训,我对C语言编程和程序设计有了更深入的理解,编程能力得到了显著提升。
贪吃蛇实习报告范文
![贪吃蛇实习报告范文](https://img.taocdn.com/s3/m/0cea7411e418964bcf84b9d528ea81c758f52e35.png)
一、实习背景随着计算机技术的不断发展,编程技能已经成为现代社会人才必备的能力之一。
为了提高自己的编程能力,我在某科技公司进行了为期一个月的贪吃蛇游戏开发实习。
通过这次实习,我对贪吃蛇游戏有了更深入的了解,并掌握了相关编程技能。
二、实习目的1. 学习和掌握贪吃蛇游戏的基本原理和开发流程;2. 提高自己的编程能力,特别是C语言编程能力;3. 熟悉游戏开发工具和开发环境;4. 培养团队合作和沟通能力。
三、实习内容1. 游戏设计在实习过程中,我首先对贪吃蛇游戏进行了详细的设计。
游戏分为以下几部分:(1)游戏界面:包括标题界面、游戏界面、游戏结束界面等;(2)游戏规则:蛇在游戏区域内吃食物,蛇身会逐渐变长,蛇头撞到墙壁或自身则游戏结束;(3)游戏控制:通过键盘上的四个方向键控制蛇的移动方向;(4)游戏得分:蛇每吃一个食物,得分增加10分;(5)游戏难度:随着游戏进行,食物出现速度逐渐加快。
2. 程序开发在游戏设计完成后,我开始进行程序开发。
主要使用了C语言进行编程,以下是程序的主要模块:(1)初始化游戏环境:设置游戏窗口、绘制游戏界面等;(2)生成食物:在游戏区域内随机生成食物,确保食物不与蛇身重叠;(3)蛇的移动:根据用户输入的方向键,控制蛇的移动方向;(4)检测碰撞:检测蛇头是否撞到墙壁或自身,如果碰撞则游戏结束;(5)更新分数:根据蛇吃食物的次数,更新游戏分数;(6)游戏结束:当蛇头撞到墙壁或自身时,显示游戏结束界面。
3. 调试与优化在程序开发过程中,我遇到了一些问题,如蛇的移动速度不均匀、食物生成位置不合理等。
针对这些问题,我进行了以下优化:(1)调整蛇的移动速度,使其更加均匀;(2)优化食物生成算法,确保食物生成位置合理;(3)调整游戏界面,使界面更加美观。
四、实习成果通过一个月的实习,我成功完成了贪吃蛇游戏开发,并取得以下成果:1. 掌握了贪吃蛇游戏的基本原理和开发流程;2. 提高了C语言编程能力,特别是结构体、函数、数组等知识的应用;3. 熟悉了游戏开发工具和开发环境;4. 培养了团队合作和沟通能力。
设计贪吃蛇实验报告
![设计贪吃蛇实验报告](https://img.taocdn.com/s3/m/e919db3b26d3240c844769eae009581b6bd9bd9a.png)
一、实验目的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)游戏逻辑实现方面:蛇头移动、吃到食物、撞墙等逻辑实现正确,游戏运行稳定。
贪吃蛇的实训报告
![贪吃蛇的实训报告](https://img.taocdn.com/s3/m/fa47952d7ed5360cba1aa8114431b90d6d858912.png)
一、实训目的本次实训旨在通过设计并实现贪吃蛇游戏,巩固和加深学生对C语言程序设计的基本知识,提高学生的编程能力和实际动手操作能力。
通过实训,使学生能够熟练掌握C语言编程技巧,理解程序设计的基本思想和流程,同时培养学生的团队协作和问题解决能力。
二、实训内容1. 游戏规则贪吃蛇是一款经典的电脑游戏,玩家通过键盘控制蛇在游戏区域中移动,吃掉随机出现的食物。
蛇在吃掉食物后,长度会增加,得分增加。
如果蛇头撞到墙壁或自己的身体,游戏结束。
2. 游戏界面游戏界面由一个矩形区域组成,代表游戏区域。
蛇用一系列方块表示,食物用不同的颜色表示。
游戏开始时,蛇的长度为3,随机生成食物。
游戏过程中,蛇会根据玩家的输入移动。
3. 游戏逻辑(1)初始化:设置游戏区域大小、蛇的初始位置和方向、食物的初始位置等。
(2)游戏循环:不断检测玩家输入,更新蛇的位置,判断蛇是否吃到食物、撞到墙壁或自己的身体。
(3)游戏结束:当蛇撞到墙壁或自己的身体时,游戏结束。
4. 程序设计(1)数据结构:定义蛇、食物和游戏区域的数据结构。
(2)函数设计:设计初始化函数、移动函数、判断是否吃到食物函数、判断是否撞到墙壁或自己的身体函数等。
(3)主函数:调用相关函数,实现游戏循环。
三、实训过程1. 设计阶段首先,根据游戏规则和界面设计,确定游戏的数据结构和函数。
然后,编写程序代码,实现游戏的基本功能。
2. 编码阶段根据设计阶段的设计,使用C语言编写程序代码。
在编写过程中,注意代码的可读性和可维护性。
3. 调试阶段在编写代码过程中,不断调试程序,修复出现的错误。
调试过程中,注意观察程序运行情况,分析问题原因,并找出解决方案。
4. 测试阶段完成程序编写后,进行测试,确保程序能够正常运行。
测试过程中,注意观察游戏效果,确保游戏规则和界面设计符合预期。
四、实训成果通过本次实训,成功设计并实现了贪吃蛇游戏。
游戏运行稳定,功能完整,达到了实训目的。
五、实训心得1. 理解程序设计的基本思想和流程,掌握C语言编程技巧。
贪吃蛇课程设计python报告
![贪吃蛇课程设计python报告](https://img.taocdn.com/s3/m/f81d2b7bfd4ffe4733687e21af45b307e871f98a.png)
贪吃蛇课程设计python报告一、教学目标本课程旨在通过学习Python编程语言实现一个贪吃蛇游戏,让学生掌握以下知识目标:1.理解Python的基本语法和数据类型。
2.学会使用Python进行流程控制和函数定义。
3.理解面向对象编程的基本概念。
4.能够独立编写简单的Python程序。
5.能够利用Python实现基本的贪吃蛇游戏。
情感态度价值观目标:1.培养学生对编程的兴趣,提高学生的信息素养。
2.培养学生解决问题的能力,提高学生的创新意识。
二、教学内容根据课程目标,我们选择Python作为编程语言,以贪吃蛇游戏为例,让学生在实践中掌握编程知识和技能。
具体的教学大纲如下:1.第一章:Python基础。
学习Python的基本语法、数据类型和变量。
2.第二章:流程控制。
学习条件语句、循环语句和函数定义。
3.第三章:面向对象编程。
学习类和对象的概念,以及如何定义和调用方法。
4.第四章:贪吃蛇游戏实现。
利用所学知识编写贪吃蛇游戏的代码,并进行调试和优化。
三、教学方法为了激发学生的学习兴趣和主动性,我们采用以下教学方法:1.讲授法:讲解Python的基本语法、数据类型和流程控制知识。
2.讨论法:学生讨论面向对象编程的概念和实现方法。
3.案例分析法:通过分析贪吃蛇游戏的代码,让学生理解编程思路。
4.实验法:让学生动手编写和调试贪吃蛇游戏,提高实际操作能力。
四、教学资源为了支持教学内容和教学方法的实施,我们准备以下教学资源:1.教材:《Python编程:从入门到实践》2.参考书:《Python核心编程》3.多媒体资料:教学PPT、视频教程4.实验设备:计算机、网络环境通过以上教学资源,学生可以更好地学习Python编程,并在实践中掌握贪吃蛇游戏的开发技能。
五、教学评估本课程的教学评估将采取多元化方式进行,以全面、客观、公正地评估学生的学习成果。
评估方式包括:1.平时表现:通过课堂参与、提问、小组讨论等环节,评估学生的学习态度和积极性。
程序设计实训报告 贪吃蛇游戏
![程序设计实训报告 贪吃蛇游戏](https://img.taocdn.com/s3/m/a4c8cc3f0722192e4536f6fd.png)
课程设计报告学院、系:专业:学生姓名:学号:设计题目:贪吃蛇游戏起迄日期:指导教师:发任务书日期: 2012年6月10日附录:系统源代码#define N 200#include "graphics.h" #include "stdio.h"#include "stdlib.h" #include "dos.h"#define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800#define Esc 0x011bint i,key,cor,lev;int score = 0;int gamespeed;struct Food{int x, y;int yes;}food;struct Snake{int x[N], y[N];int node, direction, life; }snake;void Init();void Close();void DrawK();void GameOver();void GamePlay();void PrScore();void SelectLevel();void SelectColor();void main(){SelectLevel();SelectColor();Init();DrawK();GamePlay();Close();}void SelectLevel(){for(i=0;i<10;i++)printf(" ");for(i=0;i<50;i++)printf("*");printf("\n");for(i=0;i<10;i++)printf(" ");printf("*");for(i=0;i<48;i++)printf(" ");printf("*");printf("\n");for(i=0;i<10;i++)printf(" ");printf("*");printf(" Please select the level! *\n"); for(i=0;i<10;i++)printf(" ");printf("*");printf(" 1:Easy 2:Normal 3:Hard *\n"); for(i=0;i<10;i++)printf(" ");printf("*");for(i=0;i<48;i++)printf(" ");printf("*");printf("\n");printf(" ");for(i=0;i<50;i++)printf("*");printf("\n");printf("Please selcet:");scanf("%d",&lev);switch(lev){case 1: gamespeed=50000;break; case 2: gamespeed=100000;break; case 3: gamespeed=150000;break; default: break;}}void SelectColor(){for(i=0;i<10;i++)printf(" ");for(i=0;i<50;i++)printf("*");printf("\n");for(i=0;i<10;i++)printf(" ");printf("*");for(i=0;i<48;i++)printf(" ");printf("*");printf("\n");printf(" ");printf("*");printf(" Please select the color! *\n"); for(i=0;i<10;i++)printf(" ");printf("*");printf(" 1:Black 2:Green 3:Gray *\n"); for(i=0;i<10;i++)printf(" ");printf("*");for(i=0;i<48;i++)printf(" ");printf("*");printf("\n");for(i=0;i<10;i++)printf(" ");for(i=0;i<50;i++)printf("*");printf("\n");printf("Please selcet:");scanf("%d",&cor);switch(cor){case 1: cor=0;break;case 2: cor=10;break;case 3: cor=8;break;default: break;}}void Init(){int gd = DETECT, gm;initgraph(&gd, &gm, "c\\tc");cleardevice();}void DrawK(){setbkcolor(cor);setcolor(11);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; i<=450; i+=10){rectangle(50, i, 59, i+10);rectangle(601, i, 610, i+10);}}void GamePlay(){randomize();food.yes = 1;snake.life = 0;snake.direction = 1;snake.x[0] = 100; snake.y[0] = 100;snake.x[1] = 110; snake.y[1] = 100;snake.node = 2;PrScore();while(1){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);rectangle(food.x, food.y, food.x+10, food.y-10); }for( i=snake.node-1; i>0; i--){snake.x[i] = snake.x[i-1];snake.y[i] = snake.y[i-1];}switch(snake.direction){case 1: snake.x[0] += 10; break;case 2: snake.x[0] -= 10; break;case 3: snake.y[0] -= 10; break;case 4: snake.y[0] += 10; break;}for( i=3; i<snake.node; i++){if(snake.x[i] == snake.x[0] && snake.y[i] == snake.y[0]){GameOver();snake.life = 1;break;}}if(snake.x[0]<55 || snake.x[0]>595 || snake.y[0]<55 || snake.y[0]>455){GameOver();snake.life = 1;}if(snake.life == 1) break;if(snake.x[0] == food.x && snake.y[0] == food.y){setcolor(0);rectangle(food.x, food.y, food.x+10, food.y-10);snake.x[snake.node] = -20;snake.y[snake.node] = -20;snake.node ++;food.yes = 1;score += 10;PrScore();}setcolor(4);for( i=0; i<snake.node; i++){rectangle(snake.x[i], snake.y[i], snake.x[i]+10, snake.y[i]-10);}delay(gamespeed);setcolor(0);rectangle(snake.x[snake.node-1], snake.y[snake.node-1],snake.x[snake.node-1]+10, snake.y[snake.node-1]-10);}if(snake.life==1) break;key = bioskey(0);if(key==Esc) break;else if(key==UP && snake.direction!=4)snake.direction = 3;else if(key==RIGHT && snake.direction!=2)snake.direction = 1;else if(key==LEFT && snake.direction!=1)snake.direction = 2;else if(key==DOWN && snake.direction!=3)snake.direction = 4;}}void GameOver(){cleardevice();PrScore();setcolor(RED);settextstyle(0, 0, 4);outtextxy(200, 200, "GAME OVER" ); getch();}void PrScore(){char str[10];setfillstyle(SOLID_FILL, YELLOW); bar(50, 15, 220, 35);setcolor(6);settextstyle(0, 0, 2);sprintf(str, "score:%d", score); outtextxy(55, 20, str);}void Close(){getch();closegraph();}。
贪吃蛇实训报告个人总结
![贪吃蛇实训报告个人总结](https://img.taocdn.com/s3/m/5d206d2ff342336c1eb91a37f111f18583d00c35.png)
一、实训背景随着计算机科学技术的不断发展,C语言作为一种基础编程语言,在各个领域都有着广泛的应用。
为了巩固和加深对C语言课程的基本知识的理解和掌握,提高运用C语言解决实际问题的能力,我们进行了贪吃蛇实训。
二、实训目的1. 巩固和加深对C语言课程的基本知识的理解和掌握;2. 掌握C语言编程和程序调试的基本技能;3. 利用C语言进行基本的软件设计;4. 提高独立自主设计程序、编写代码的能力;5. 学会调试一个较长程序的基本方法;6. 掌握书写程序设计说明文档的能力。
三、实训内容1. 游戏规则:通过键盘方向键控制蛇的移动,吃掉随机出现的食物,蛇的长度会随之增加。
当蛇撞到墙壁或自己的身体时,游戏结束。
2. 程序设计:使用C语言进行贪吃蛇游戏的设计与实现,包括以下几个模块:(1)初始化模块:初始化游戏界面、蛇的位置、食物的位置等。
(2)绘图模块:使用图形库函数绘制蛇、食物、墙壁等元素。
(3)控制模块:根据键盘输入,控制蛇的移动方向。
(4)碰撞检测模块:判断蛇是否撞到墙壁或自己的身体。
(5)游戏逻辑模块:更新蛇的位置、食物的位置、蛇的长度等。
四、实训过程1. 理解游戏规则,明确程序设计思路。
2. 分析C语言基础知识,为编程做准备。
3. 编写程序代码,实现游戏的基本功能。
4. 调试程序,解决出现的问题。
5. 优化程序,提高程序运行效率。
6. 编写程序设计说明文档,总结实训经验。
五、实训心得与体会1. 通过本次实训,我对C语言的基本知识有了更深入的理解,掌握了C语言编程和程序调试的基本技能。
2. 在实训过程中,我学会了如何运用C语言进行基本的软件设计,提高了独立自主设计程序、编写代码的能力。
3. 通过调试程序,我学会了如何解决程序中出现的问题,提高了程序调试能力。
4. 编写程序设计说明文档,让我更加注重程序设计的规范性和可读性。
5. 本次实训让我认识到,编程不仅仅是编写代码,还需要考虑程序的结构、逻辑和可维护性。
贪吃蛇实验报告
![贪吃蛇实验报告](https://img.taocdn.com/s3/m/4707a9a8f9c75fbfc77da26925c52cc58bd69033.png)
贪吃蛇实验报告1. 引言贪吃蛇是一种经典的游戏,通过控制蛇的移动方向,吃掉食物来增长身体长度。
在本实验中,我们将实现一个贪吃蛇游戏,并对不同算法进行比较,以探讨最优的游戏策略。
2. 实验目的本实验的目的有以下几点:1.实现一个基于命令行的贪吃蛇游戏。
2.探讨不同的贪吃蛇算法,并比较其效果优劣。
3.分析贪吃蛇游戏的设计思路和实现细节。
3. 实验方法3.1 游戏实现使用Python编程语言,利用面向对象的思想实现贪吃蛇游戏。
游戏主要包括蛇的移动、食物随机生成、蛇身体增长等基本功能。
3.2 算法比较我们将比较以下两种贪吃蛇算法:1.贪心算法:每一步都选择离食物最近的方向。
2.最短路径算法:使用最短路径算法计算出到达食物的最短路径,并选择下一步的移动方向。
4. 实验结果在实际运行贪吃蛇游戏时,我们进行了以下几个实验:4.1 实验一:贪心算法在贪心算法中,蛇会选择离食物最近的方向进行移动。
我们对贪心算法进行了100次实验,并记录了每次游戏的得分。
结果显示,在100次实验中,贪心算法的平均得分为200。
4.2 实验二:最短路径算法最短路径算法使用最短路径计算来选择下一步的移动方向。
我们同样进行了100次实验,并记录了每次游戏的得分。
结果显示,在100次实验中,最短路径算法的平均得分为350。
5. 结论通过对贪心算法和最短路径算法的比较,我们可以得出以下结论:1.最短路径算法相对于贪心算法更加优越,其平均得分更高。
2.由于最短路径算法的计算复杂度较高,可能导致游戏运行速度变慢。
在进一步研究中,可以尝试更复杂的贪吃蛇算法,并优化算法的实现,以提高游戏的表现和用户体验。
6. 参考文献1.Python官方文档2.《算法导论》以上是本次贪吃蛇实验的报告,通过实验我们得出了最短路径算法在贪吃蛇游戏中的优越性,并提出了进一步研究的方向。
贪吃蛇实验报告
![贪吃蛇实验报告](https://img.taocdn.com/s3/m/24b7fdb6cd22bcd126fff705cc17552707225ec7.png)
贪吃蛇实验报告
一、实验目的
1、了解贪吃蛇游戏的原理和流程;
2、掌握贪吃蛇游戏的代码实现方法;
3、加深对 Python 语言编程和逻辑思维的理解。
二、实验材料
1、Python 编程环境 PyCharm;
2、Python 相关库 pygame、random;
3、贪吃蛇游戏素材(贴图等)。
三、实验步骤
1、安装 Python 开发环境 PyCharm,并安装 pygame 和 random 库;
2、设计贪吃蛇游戏的界面元素,包括蛇、食物、背景等,确定游戏的流程与规则;
3、根据设计,编写 Python 代码实现游戏界面和游戏规则;
4、调试程序,运行并测试贪吃蛇游戏的功能和流程。
四、实验结果
1、游戏开始时,蛇的长度为 1,位置在屏幕中央,食物随机
生成;
2、当蛇吃到食物时,蛇的长度加 1,食物重新生成;
3、如果蛇碰到屏幕边缘或自己的身体,则游戏结束,窗口显
示结束界面;
4、游戏界面左上角显示当前得分(蛇的长度),中间显示时
间和当前运行帧率;
5、游戏过程中可以通过键盘操作改变蛇的方向,即使按下相
反的方向键,也不会立刻死亡,而是会继续前进一格。
五、实验总结
贪吃蛇游戏是一种经典的小游戏,通过本次实验,我们学习了Python 编程语言、pygame 游戏引擎、random 库等相关知识,
并实现了一个简单的贪吃蛇游戏。
在实验过程中,我们深入了解游戏的规则和逻辑,并通过编写代码实现了游戏的基本流程。
通过该实验,加强了自己的编程和思维能力,为将来进行更复杂的游戏开发提供了基础。
贪吃蛇代码实验报告
![贪吃蛇代码实验报告](https://img.taocdn.com/s3/m/c316c4fbf424ccbff121dd36a32d7375a417c63d.png)
一、实验目的1. 掌握Python编程语言的基本语法和常用库。
2. 理解贪吃蛇游戏的基本原理和算法。
3. 提高编程实践能力,培养团队协作精神。
二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 开发工具:PyCharm三、实验内容1. 游戏界面设计2. 蛇的移动3. 食物的生成4. 分数的计算5. 游戏结束条件四、实验步骤1. 导入相关库```pythonimport randomimport curses```2. 初始化屏幕```pythons = curses.initscr()curses.curs_set(0) # 隐藏光标sh, sw = s.getmaxyx() # 获取屏幕宽度和高度w = curses.newwin(sh, sw, 0, 0) # 创建新的窗口w.keypad(1) # 接受键盘输入w.timeout(100) # 设置超时时间,单位为毫秒```3. 绘制游戏界面```pythons = 'Score : ' + str(score)w.addstr(sh//2, sw//2 - len(s)//2, s) # 显示分数w.border(0) # 绘制边框```4. 初始化蛇和食物```pythonsnk_x = sw//4snk_y = sh//2snake = [[snk_y, snk_x],[snk_y, snk_x-1],[snk_y, snk_x-2]]food = [sh//2, sw//2]w.addch(int(food[0]), int(food[1]), curses.ACS_PI) # 在食物位置显示符号```5. 初始化蛇的移动方向```pythonkey = curses.KEY_RIGHT```6. 游戏循环```pythonwhile True:next_key = w.getch()key = key if next_key == -1 else next_key # 检查蛇是否撞墙或撞到自己if snake[0][0] in [0, sh] or \snake[0][1] in [0, sw] or \snake[0] in snake[1:]:curses.endwin()quit()# 计算蛇的新头部位置new_head = [snake[0][0], snake[0][1]]if key == curses.KEY_DOWN:new_head[0] += 1if key == curses.KEY_UP:new_head[0] -= 1if key == curses.KEY_LEFT:new_head[1] -= 1if key == curses.KEY_RIGHT:new_head[1] += 1# 将新头部添加到蛇的头部snake.insert(0, new_head)# 检查蛇是否吃到食物if snake[0] == food:score += 1food = Nonewhile food is None:nf = [random.randint(1, sh-1),random.randint(1, sw-1)]food = nf if nf not in snake else Nonew.addch(food[0], food[1], curses.ACS_PI)else:# 移动蛇tail = snake.pop()w.addch(int(tail[0]), int(tail[1]), ' ')# 在蛇的新头部位置显示蛇w.addch(int(snake[0][0]), int(snake[0][1]), curses.ACS_CKBOARD) ```7. 输出最终分数```pythons = 'Score : ' + str(score)w.addstr(sh//2, sw//2 - len(s)//2, s) # 显示分数```五、实验总结通过本次实验,我们成功地实现了贪吃蛇游戏。
计算机实习报告----贪吃蛇
![计算机实习报告----贪吃蛇](https://img.taocdn.com/s3/m/b53ed148c850ad02de8041a7.png)
计算机实习报告题目贪吃蛇实验报告一.功能说明1.1总体功能说明贪吃蛇游戏主要实现的功能是蛇的移动,转向。
产生水果,吃水果增加蛇身的长度。
产生毒果,吃毒果就死亡。
碰壁死亡,撞到自己死亡。
另外还有游戏的帮助文件。
使用户可以更清楚地了解游戏的规则。
最高分排行榜可以看到排行榜。
1.2用户界面一、游戏的初界面:进入游戏首先进入游戏的初界面。
然后会有欢迎进入游戏。
然后会有一段简短的故事情节,故事情节可以选择跳过。
二、游戏的选择界面:进入后首先有音乐的选择,然后有游戏设置等选项,然后进入游戏关卡选择。
三、游戏的主界面:这个是游戏进行的界面,随着分数的增加,速度会加快,相应的游戏等级也会发生变化。
高分榜界面:帮助界面:四、游戏结束界面:在此界面中可以看到游戏的等级和最终得分,还可以选择进行重新开始。
1.3使用方法控制游戏的按键为:上:↑ 下:↓ 左:← 右:→ 按任意键暂停,然后按任意键开始。
游戏有六种等级可以选。
等级一到等级六。
区别是蛇的移动速度的不同。
二.程序设计说明2.1 总体设计框架进入游戏最开始界面游戏欢迎界面有故事简介的界面 跳过故事情节选择音乐开关游戏选项开始游戏帮助 退出游戏 游戏最高分排行榜 游戏最开始界面游戏欢迎界面有故事简介的界面跳过故事情节选择音乐开关游戏选项开始游戏 帮助 退出游戏 游戏最高分排行按a 按c游戏分为六个选择进入主程序主程序贪吃蛇的移动,增长水果的产生毒果的地产生蛇身的增长蛇身的移动蛇的死亡产生水果速度增快判断水果的位置是否正确正确不正确重新产生同水果碰壁,撞身,吃毒果游戏结束,通过选择可以重玩或结束2.2 关键算法描述算法1:void MOVE(int snakex[],int snakey[],int len,WORD wColors[],HANDLE handle){for(int i=len;i>0;i--){snakex[i]=snakex[i-1];snakey[i]=snakey[i-1];textout(handle,snakex[i],snakey[i],wColors,1,"●");textout(handle,snakex[len],snakey[len],wColors,1," ");}}实现的是蛇身的移动,后一个点跟随前一个点的运动轨迹。
贪吃蛇小游戏实验报告[
![贪吃蛇小游戏实验报告[](https://img.taocdn.com/s3/m/7d7c479e2dc58bd63186bceb19e8b8f67c1cef20.png)
- 0 -软件设计报告设计题目: 贪吃蛇 目录一. 需求分析 二. 概要设计 三. 详细设计四. 心得体会一. 需求分析1.1关于题目 1.1.1题目要求(1)利用MicrosoftVisualC++制作一个贪吃蛇的小游戏, 要求:(2)应用MFC 单文档制作(3)能够记录游戏成绩学 院:专业班级:学生姓名:学生学号:指导教师:提交时间:成 绩:(4)可根据玩家要求设置游戏速度(级别): 初级, 中级, 高级可以根据个人喜好更换背景图片, 食物图片, 障碍物图片, 结束图片等1.1.2选题背景贪吃蛇是家喻户晓的益智类小游戏, 选择这个题目一是为了将自己的所学知识加以运用, 二是一直以来贪吃蛇这个游戏就深深地吸引着我们, 它的制作方法对于以前的我们而言都是很神秘的。
我们希望通过自己的所学知识把它剖析开来, 真真正正的了解它的本质和精髓。
虽然我们的编程能力不是很强, 但是我们有信心, 在这次学习中我们将从实践和实际的项目中提高自己的编程能力。
因此我们选定了这个题目。
1.2关于编译软件本程序采用Microsoft Visual C++6.0的英文版本进行编译。
VisualC++6.0是Microsoft公司推出的基于Windows操作系统的可视化C++编程工具, 尽管Microsoft公司推出了.NET平台的集成开发环境, 但由于其良好的界面和可操作性, 加上支持标准C/C++规范, 但仍有相当多的编程人员使用VisualC++6.0进行应用系统的开发。
- 1 -1.3关于兼容性本程序经过调试, 可以在XP系统下编译运行, 也可以在Vista下运行, 界面稍有不同, 但不影响运行结果。
二. 概要设计2.1软件主要功能设计2.1.1程序结构根据分析, 贪吃蛇这个程序一共要实现如下几个功能, 包括游戏方面开始游戏、停止游戏, 设置游戏级别(速度), 设置图片等。
具体的程序结构如下面的图1-1所示。
- 2 -图2-1 贪吃蛇结构图2.1.2程序流程根据分析后的贪吃蛇结构设计出相应的贪吃蛇流程。
(完整word版)贪吃蛇实验报告
![(完整word版)贪吃蛇实验报告](https://img.taocdn.com/s3/m/e2a9048c804d2b160a4ec050.png)
《计算机程序设计》课程设计报告课题名称贪吃蛇游戏_____________ 班级_________________学号__________________姓名______________指导教师 ______________设计时间 _________ 至_______设计地点 __________________常熟理工学院计算机科学与工程学院常熟理工学院计算机科学与工程学院目录1需求分析 (1)2系统分析和设计 (1)2.1数据结构的设计和选择的理由 (1)2.2系统模块划分和模块结构 (2)2.3流程图 (2)2.4数据类型、全局变量和函数说明 (3)3程序测试和运行结果 (4)4课程报告小结 (5)4.1分数重叠显示 (5)4.2速度太快 (5)4.3食物可能出现在蛇身上 (5)附录A :程序源代码 (6)« C程序设计》课程设计1需求分析【阐述课程设计应该完成的功能】使用键盘的上下左右,来控制蛇的运动方向,ESC键退出,并显示得分。
2系统分析和设计2.1数据结构的设计和选择的理由本游戏中涉及的主要数据结构是如何表示运动的蛇、食物状态等问题。
2.1.1从游戏参考画面中我们可以看到,贪吃蛇的身体是一节节的,由一个个大小相同的方块组成,那么我们可以用一个(x,y)坐标为左上角的、固定宽度的正方形来表示一节蛇身。
为表示连续的多节身体,那么我们可以采用数组(或链表,或线性表)等数据结构来表示。
下面以数组方式为例:struct Point {int x, y;}struct Poi nt n odes[MAX_LENGTH]; // 蛇身数组,MAX_LENGTH 为最大蛇长贪吃蛇是在不断的运动的,我们研究蛇的运动可以发现这样的特点:1. 蛇头由键盘控制,键盘不操作时,保持原有方向运动;(用int direction;表示)2. 运动时,蛇身后面一节移动到前面一节的位置。
当我们用nodes[0]表示蛇头的时候,nodes[1]运动到nodes[0]处;nodes[2]运动到nodes[1]处…。
贪吃蛇游戏设计实训报告
![贪吃蛇游戏设计实训报告](https://img.taocdn.com/s3/m/4c1f94496fdb6f1aff00bed5b9f3f90f76c64dd9.png)
一、摘要随着计算机技术的飞速发展,图形界面编程在计算机科学中占据着越来越重要的地位。
贪吃蛇游戏作为一款经典的益智游戏,不仅能够锻炼玩家的反应能力,还能培养编程思维。
本次实训以贪吃蛇游戏为背景,采用Java编程语言和Swing图形用户界面库进行设计,实现了游戏的基本功能,并对游戏性能进行了优化。
二、引言贪吃蛇游戏是一款简单易玩、老少皆宜的益智游戏。
玩家通过控制蛇的移动,吃掉食物使蛇身变长,同时躲避墙壁和自身,最终达到游戏目标。
本次实训旨在通过贪吃蛇游戏的设计与实现,提高学生的编程能力、图形界面设计能力和团队协作能力。
三、游戏设计1. 游戏界面设计游戏界面采用Swing图形用户界面库进行设计,主要包括以下部分:(1)游戏区域:用于显示蛇、食物和墙壁,采用JPanel组件实现。
(2)游戏菜单:包括开始游戏、重新开始、退出游戏等选项,采用JButton组件实现。
(3)游戏得分:显示当前得分,采用JLabel组件实现。
2. 游戏逻辑设计游戏逻辑主要包括以下部分:(1)蛇的移动:根据玩家输入的方向键控制蛇头的移动,实现蛇的实时更新。
(2)食物的生成:随机生成食物,当蛇头吃到食物时,蛇身变长,同时增加得分。
(3)墙壁和自身碰撞检测:当蛇头触碰到墙壁或自身时,游戏结束。
(4)游戏得分:根据蛇头吃到的食物数量计算得分。
四、关键技术实现1. 蛇的移动蛇的移动通过监听键盘事件实现。
在键盘事件监听器中,根据按键的方向更新蛇头的坐标,然后重新绘制蛇身。
2. 食物的生成食物的生成采用随机算法实现。
首先生成一个随机坐标,然后判断该坐标是否在游戏区域内,如果不在则重新生成。
3. 碰撞检测碰撞检测包括墙壁碰撞和自身碰撞。
在蛇头移动时,判断蛇头的坐标是否超出游戏区域边界,或者与自身坐标相同,若满足任一条件,则游戏结束。
4. 游戏得分游戏得分通过计算蛇头吃到的食物数量实现。
每吃到一个食物,得分加1。
五、性能优化1. 游戏速度优化:通过调整蛇的移动速度和食物生成的速度,使游戏节奏更加紧凑。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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)*20);pDC->SelectObject(DrawBrush);}3.3.2游戏开始点击游戏开始菜单后,出现一个对话框,提示一秒后,将开始游戏。
void CSNAKEView::OnStart(){// TODO: Add your command handler code hereSetTimer(1,1000,NULL);AfxMessageBox("1秒后开始游戏!");}3.3.3游戏暂停点击游戏暂停菜单后,出现显示“已暂停游戏”的对话框。
void CSNAKEView::OnPause(){// TODO: Add your command handler code hereKillTimer(1);AfxMessageBox("已暂停游戏");}3.3.4游戏退出点击游戏退出菜单,显示“退出游戏”的对话框,随后关闭游戏界面。
void CSNAKEView::OnExit(){// TODO: Add your command handler code hereAfxMessageBox("退出游戏...");exit (0);}3.3.5游戏总界面大小设计使用CMainFrame的PreCreateWindow函数对总界面进行初始化。
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs){if( !CFrameWnd::PreCreateWindow(cs) )return FALSE;// TODO: Modify the Window class or styles here by modifying// the CREATESTRUCT cscs.style &= ~WS_OVERLAPPED;cs.cy = 615;cs.cx = 530;return TRUE;}3.3.6操作游戏界面大小及背景色设计将背景色设置为黑色,并将游戏区域显示出来。
void CSNAKEView::OnDraw(CDC* pDC){CSNAKEDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereCBrush backBrush(RGB(0,0,0));//设置画刷为希望的背景色CBrush* pOldBrush = pDC->SelectObject(&backBrush);//保存旧画刷CRect rect;pDC->GetClipBox(&rect);//擦除需要的区域pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(),PATCOPY);//用创建的画刷绘制背景区域pDC->SelectObject(pOldBrush);pDC->Rectangle(19,19,501,501);//设置需要区域的起始坐标和长宽。
oninit();}3.3.7版权所有点击帮助中的关于SNAKE,或者点击,会显示对话框---版权归刘坤炜所有。
3.4玩法规则设计当按键盘上的“上”“下”“左”“右”键时,蛇体方向的改变。
按“上”时,如果蛇的方向不是朝下的,就将direct方向置为1,使其向上运动,当然如果本身就是向上运动的,那么蛇的运动方向没有变化;如果蛇的方向朝下,按上,则不能改变它的方向。
其他按法与上类似。
void CSNAKEView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags){// TODO: Add your message handler code here and/or call defaultswitch(nChar){case VK_UP:if(Snake[0].direct!=2)Snake[0].direct=1;break;//按上时,只要不是朝下,都将方向置为上(1)case VK_DOWN:if(Snake[0].direct!=1)Snake[0].direct=2;break;case VK_LEFT:if(Snake[0].direct!=4)Snake[0].direct=3;break;case VK_RIGHT:if(Snake[0].direct!=3)Snake[0].direct=4;break;}CView::OnKeyDown(nChar, nRepCnt, nFlags);}3.5游戏核心设计当碰到白色区域的任何一边或者自己撞到自己的身体时,游戏结束,并输出自己所得分数。
根据蛇的运动方向来改变蛇的一个个身体部分坐标。
根据蛇头的坐标来判断是否吃到了食物,若吃到,将蛇的长度加1,食物的标志置为1,表示被吃,并且当食物标志为1时,随机生成下一个食物的坐标,此坐标必须要在游戏区域内,不在就循环生成,直到满足条件,并将标志置为0。
void CSNAKEView::OnTimer(UINT nIDEvent){// TODO: Add your message handler code here and/or call defaultCDC *pDC=GetDC();CString soure;if(Snake[0].len==2)SetTimer(1,370,NULL);if(Snake[0].len==3)SetTimer(1,270,NULL);if(Snake[0].len==6)SetTimer(1,200,NULL);if(Snake[0].len==9)SetTimer(1,100,NULL);soure.Format("得分:%d!",(Snake[0].len-3)*10);//撞界判断if(Snake[0].x*20<=37||Snake[0].y*20<=37||Snake[0].x*20>=462||Snake[0].y*20>=462){KillTimer(1);AfxMessageBox(soure);// s=0;}//蛇身相撞判断if(Snake[0].len>3)for(int sn=Snake[0].len-1;sn>0;sn--){if(Snake[0].x*20==Snake[sn].x*20&&Snake[0].y*20==Snake[sn].y*20){KillTimer(1);AfxMessageBox(soure);// s=0;}}/////////////////////////////////////////////////////////////////////// ////pDC->SelectStockObject(WHITE_PEN);pDC->Rectangle(Snake[Snake[0].len-1].x*20,Snake[Snake[0].len-1].y*20,(Snake[Snake[0].len -1].x+1)*20,(Snake[Snake[0].len-1].y+1)*20);for(int i=Snake[0].len-1;i>0;i--){Snake[i].x=Snake[i-1].x;Snake[i].y=Snake[i-1].y;}//运动方向判断if(Snake[0].direct==1)Snake[0].y--;if(Snake[0].direct==2)Snake[0].y++;if(Snake[0].direct==3)Snake[0].x--;if(Snake[0].direct==4)Snake[0].x++;pDC->SelectStockObject(BLACK_PEN);CBrush DrawBrush=(RGB(100,100,100));CBrush *Drawbrush=pDC->SelectObject(&DrawBrush);pDC->Rectangle(Snake[0].x*20,Snake[0].y*20,(Snake[0].x+1)*20,(Snake[0].y+1)*20);pDC->SelectObject(DrawBrush);//判断吃食物的条件,撞到就吃if(Snake[0].x*20==Food.x*20&&Snake[0].y*20==Food.y*20){Snake[0].len++;Food.isfood=1;Snake[Snake[0].len-1].x=Snake[Snake[0].len-2].x;Snake[Snake[0].len-1].y=Snake[Snake[0].len-2].y;}//如果食物被吃了就生成if(Food.isfood==1){srand((unsigned)time(NULL));do{for(int isfo=Snake[0].len-1;isfo>=0;isfo--)if(Snake[0].x*20==Snake[isfo].x*20&&Snake[0].y*20==Snake[isfo].y*20){Food.x=rand()%25;Food.y=rand()%25;}}while(Food.x*20<70||Food.y*20<70||Food.x*20>430||Food.y*20>430);pDC->Rectangle(Food.x*20,Food.y*20,(Food.x+1)*20,(Food.y+1)*20);Food.isfood=0;}CView::OnTimer(nIDEvent);}四、功能测试4.1游戏界面4.2游戏开始4.3游戏正在进行4.4游戏暂停4.5游戏退出4.6最后得分4.7关于SNAKE五、总结随机数生成函数rand()的应用在贪吃蛇游戏中是一个关键步骤,通过不断的循环和调用,能保证游戏的持续进行和更新,其实不止是贪吃蛇,在大多数需要随机生成元素的游戏中,都可以用rand()函数生成随机数,再控制坐标等变量实现“随机生成”功能。