贪吃蛇实验报告
贪吃蛇游戏的开发报告
![贪吃蛇游戏的开发报告](https://img.taocdn.com/s3/m/0712d20b52ea551810a68717.png)
基于VC#.NET的贪吃蛇游戏的开发与设计目录1.实验目的 (3)2.实验任务与要求 (3)2.1实验内容 (3)2.2实验要求 (3)2.3实验环境 (3)3.设计方案 (3)3.1程序功能 (4)3.2设计思想 (4)3.3设计总体流程图 (4)3.4设计的具体实现 (4)4.程序测试 (15)4.1测试内容与结果 (15)4.2程序运行效果图 (17)5.实验总结 (17)参考文献 (17)附录 (18)附录A:主要源程序 (18)附录B:软件使用说明书 (23)一、实验目的(1)复习、巩固VC#.NET的基础知识,进一步加深对VC#.NET技术的理解和掌握;(2)课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。
(3)培养学生在项目开发中团队合作精神、创新意识及能力二、实验任务与要求(1)实验内容贪吃蛇游戏开发,首先它可以为大家提供一种当前比较流行的休闲小游戏。
贪吃蛇游戏开发的最后一部分就是游戏的模块划分,根据分析,贪吃蛇这个程序一共要实现如下几个功能,包括游戏方面开始游戏、暂停游戏以及停止游戏,游戏设置(蛇的颜色、食物的颜色),游戏结束时的积分。
(2)实验要求●对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理;●系统设计要实用,采用模块化程序设计方法,编程简练、可用,功能全面;●说明书、流程图要清楚;●记录设计情况(备查,也为编写设计说明书作好准备);(3)实验环境WindowsXP操作系统,2005开发环境。
三、设计方案(1)程序功能一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键或A,D,W,S控制蛇向上下左右四个方向移动,蛇头撞到食物,则食物被吃掉,蛇身体长一节,同时记1分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或蛇头撞倒自己身体游戏结束。
实验报告贪吃蛇
![实验报告贪吃蛇](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/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游戏开始点击游戏开始菜单后,出现一个对话框,提示一秒后,将开始游戏。
VHDL 贪吃蛇游戏实验报告
![VHDL 贪吃蛇游戏实验报告](https://img.taocdn.com/s3/m/dcd1c2edaeaad1f346933f00.png)
1 / 22贪吃蛇游戏摘要:本实验以设计贪吃蛇游戏为课题。
最终结果是以8*8点阵作为本游戏的显示界面,通过按键BTN1,BTN2,BTN3,BTN4分别控制蛇的运动方向,分别为“上下左右”。
蛇的长度为六个点阵,另外以一点表示老鼠,当蛇头吃到老鼠时,老鼠则在点阵上改变位置,也就是说通过一个伪随机函数在点阵上产生老鼠的位置,每当蛇头吃到老鼠时,就自动加一分,并在数码管显示。
每隔五分钟,在蛇没有吃到老鼠的前提下,老鼠就自动在点阵上改变位置,这样就增加了游戏的趣味性和难度性。
关键字:8*8点阵,贪吃蛇,数码管,EPM7128SLC8—15数电实验开发板课题设计任务及要求:简要说明:用一个8×8 点阵作为基本显示屏,六个连续移动的的发光点表示一条蛇,用任意出现的一个亮点表示老鼠,用4 个排成一条线的发光点表示“墙”,用四个按键控制蛇的运动方向,完成贪食蛇游戏,蛇撞“墙”、边或者游戏时间到,则游戏结束。
1. 老鼠出现的地方是随机的,在某个地点出现的时间是5 秒钟,如果5 秒钟之内没有被吃掉,它就会在其它地方出现;2. 用数码管显示得分情况和游戏的剩余时间,每吃掉一只老鼠就加一分;3. 游戏时间和速度可以手动设置。
4. 选做:增加游戏难度或自拟其它功能。
设计思路:当开启电源时,初始化EPM7128SLC8—15数电实验开发板。
8*8点阵也初始化,每来一个时钟脉冲就对8*8点阵进行一次扫描,并依次点亮六个蛇身和一个老鼠所对应的点,由于扫描频率是1MHz (远远超出人眼所能分辨的范围),故人眼看来蛇身是连续的。
用BTN1,BTN2,BTN3,BTN4键分别控制蛇的运动方向“上下左右”,每次按键时通过和蛇原来的运动方向进行比较来控制蛇接下来的运动方向。
在七段数码管上显示得分情况,每当蛇吃到一个老鼠时则自动加一分,并在数码管上显示出当前得分。
设置一个控件SW1来对得分进行复位,即每当SW1有效时,则得分清零。
嵌入式课设实验报告——贪吃蛇
![嵌入式课设实验报告——贪吃蛇](https://img.taocdn.com/s3/m/0f03e5e6856a561252d36f36.png)
题目:贪吃蛇游戏设计专业:电子信息工程班级:姓名:、成绩:导师签字:年月日任务书题目:贪吃蛇游戏设计参数:供电电源电压3.3V矩形墙壁的位置坐标(20,20)(200,200)蛇的初始位置坐标(40,20)(30,20)(20,20)蛇的每一节为边长为10的矩形要求:利用嵌入式开发系统设计一个贪吃蛇的小游戏。
开始显示为初始界面,然后开始进行游戏。
游戏开始出现3节的蛇,一个食物,右边显示得分。
当进入游戏后,蛇自动向右前行。
通过按键上下左右来控制蛇前行的方向,当蛇吃到食物后,得分加100分,蛇身体变长一节。
当蛇在游行过程中撞到墙壁或者自身则游戏结束。
日程安排:6月30日:选择课设题目、查阅资料、完成第一步。
7月1、2日:完成方案设计。
即提出设计思路与软硬件的设计方案。
7月3、4日:学习硬件原理7月7、8、9日:根据软件设计方案做软件。
7月10日:测试7月11日:完成论文目录第一章课题研究······························· 1.1研究目的······································ 1.2研究背景······································ 1.3主要研究内容··································第二章设计思路及方案设计····················· 2.1设计思路······································ 2.1.1实现功能································· 2.1.2各功能的实现方法························· 2.1.3硬件说明································· 2.1.4软件说明································· 2.2硬件设计······································ 2.3软件设计······································第三章硬件设计······························· 3.1处理器最小系统································ 3.2硬件基本电路··································3.2.1按键····································· 3.2.2 LCD····································· 3.2.3 USB接口与电源···························第四章软件设计·······························第五章调试与测试·····························5.1调试··········································5.2测试··········································第六章结论···································参考文献······································第一章课题研究1.1研究目的为了巩固所学嵌入式系统的基础知识,加强实际应用和动手实践能力,开始为期2周的课程设计。
贪吃蛇报告完整版
![贪吃蛇报告完整版](https://img.taocdn.com/s3/m/f31ce053c8d376eeaeaa31d2.png)
贪吃蛇报告完整版课程设计基础课程设计贪吃蛇游戏设计院系:,,,,,,,,,,,班级:,,,,,,,,,,,姓名:,,,,,,,,,,,合作者:,,,,,,,,,,,指导教师:,,,,,,,,,,,时间 _____年____月____日课程设计课程设计目录1(1概述 ..................................................................... ................................错误~未定义书签。
1.1.1研究的背景与意义 ..................................................................... ...错误~未定义书签。
1.1.2 设计的任务和需要的知识点...................................................错误~未定义书签。
1. 生成设计主要完成的任务 ......................................................错误~未定义书签。
2. 需要掌握和应用的知识点 ......................................................错误~未定义书签。
1.1.3 具体完成的设计内容.................................................................错误~未定义书签。
1.2需求分析...................................................................... ...........................错误~未定义书签。
1.2.1 功能需求 ..................................................................... .................错误~未定义书签。
设计贪吃蛇实验报告
![设计贪吃蛇实验报告](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语言编程技巧。
贪吃蛇总结报告
![贪吃蛇总结报告](https://img.taocdn.com/s3/m/a1ef1a669e3143323868932b.png)
贪吃蛇设计综合实验总结报告课程名称:程序设计实践选题名称:贪吃蛇小组长姓名:方娟 200911211056小组成员姓名:邹甜 200911211004杜家萱 200911211066任课老师:伊乾报告递交时间:2009.6.9一系统功能说明贪食蛇游戏是一个深受人们喜爱的游戏:一条蛇在密闭的围墙内,在围墙内出现食物,通过按键控制蛇向上下左右四个方向移动,蛇撞到食物,则食物被吃掉,蛇的身体增加一节。
如果蛇在移动的过程中,撞到墙壁或身体的交叉(蛇头撞到自己的身体)游戏结束。
现要求利用Turbo C2.0来实现该游戏。
功能要求如下:一、基本功能1.提供一个图形模式下的界面。
2.开始游戏:空格键或回车键;退出游戏:Esc键。
3.支持用键盘的方向键来控制蛇的移动,蛇可以向上、下、左、右四个方向移动。
4.当蛇头碰到食物时,食物被吃掉,蛇的身体增长一节。
5.初始场景内随即出现1个食物,当食物被吃掉时,再随机出现一个食物。
6.要有记分机制,没吃掉一个食物,增加相应的分数。
7.蛇碰到墙壁或是自己身体的一部分则游戏结束。
二、高级功能1.暂停功能:能随时通过按键来暂停游戏,再按一次则继续游戏。
2.速度调节功能:当分数达到某个值后,对蛇的移动速度进行一定的提升,但会有一个速度上限。
3.奖励机制:增加另一种的奖励食物,蛇吃到该种食物后蛇的身体减少一节(最短不能少于2节),但不增加分数。
该种食物的颜色要区别与普通食物的颜色。
奖励食物有时间限制,在一定时间内没有吃掉则会消失。
4.音效功能:在游戏开始、吃掉食物、撞墙、撞到自己时提供不同的音效。
二程序结构(2)重要数据说明基本思路:首先设计主界面,主界面是一个密封的围墙,并在屏幕最右面留一部分用来显示分数、计时等其他信息。
围墙直接画一个矩形来表示,四面围成密闭的矩形来作为围墙。
接着是初始化蛇与食物的位置并将他们用图形表示出来。
然后进行一个循环,将蛇按当前的方向移动,并处理键盘的方向按键信息,调整蛇的移动方向。
贪吃蛇测试分析报告
![贪吃蛇测试分析报告](https://img.taocdn.com/s3/m/d4a8b43af4335a8102d276a20029bd64783e62b2.png)
贪吃蛇测试分析报告一、引言贪吃蛇作为一款经典的游戏,其简单的规则和有趣的玩法深受玩家喜爱。
为了深入了解贪吃蛇游戏的性能和用户体验,我们进行了一系列的测试,并在此基础上形成了这份测试分析报告。
二、测试环境1、硬件环境测试设备:_____手机处理器:_____内存:_____屏幕分辨率:_____2、软件环境操作系统:_____游戏版本:_____三、测试目标本次测试的主要目标包括以下几个方面:1、评估游戏的稳定性和流畅性,是否存在卡顿、闪退等问题。
2、检验游戏的操作响应速度,判断操作是否及时准确。
3、分析游戏的难度设置是否合理,是否能满足不同玩家的需求。
4、考察游戏的画面和音效质量,对用户体验的影响。
5、探究游戏的可玩性和趣味性,是否能吸引玩家持续投入。
四、测试方法1、手动测试通过人工操作游戏,模拟不同的游戏场景和玩家行为,观察游戏的表现。
2、自动化测试使用专业的测试工具,对游戏进行性能监测和数据分析。
五、测试结果1、稳定性和流畅性在长时间的游戏过程中,未出现明显的卡顿现象,但在游戏分数较高、蛇身较长时,偶尔会出现轻微的帧率下降。
经过多次重复测试,未发生闪退情况,游戏的稳定性较好。
2、操作响应速度玩家的操作能够及时在游戏中得到响应,方向控制的灵敏度适中,没有明显的延迟。
3、难度设置游戏的初始难度较低,适合新手玩家上手。
随着分数的增加,蛇的移动速度逐渐加快,难度逐渐提升,具有一定的挑战性。
然而,对于一些资深玩家来说,可能会觉得难度提升的速度不够快,缺乏足够的挑战性。
4、画面和音效游戏画面简洁清晰,色彩搭配协调,蛇身和食物的设计较为醒目。
音效方面,背景音乐轻松愉悦,但相对较为单一,长时间游戏可能会产生听觉疲劳。
5、可玩性和趣味性游戏的基本玩法具有一定的趣味性,能够吸引玩家在短时间内投入。
但游戏模式较为单一,缺乏创新性的玩法和元素,可能会影响玩家的长期留存。
六、问题分析1、性能优化针对帧率下降的问题,需要进一步优化游戏算法,减少资源占用,提高游戏的运行效率。
贪吃蛇实验报告
![贪吃蛇实验报告](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/bcfc805f15791711cc7931b765ce050877327566.png)
贪吃蛇代码实训心得报告前言贪吃蛇是一款经典的游戏,其简单的玩法和上瘾的乐趣一直深受大众喜爱。
在代码实训中,我选择了贪吃蛇作为我的项目,通过编写贪吃蛇的代码,我在实训过程中收获了很多知识和经验,本报告旨在总结我在实训中的收获和心得体会。
项目介绍我的贪吃蛇项目基于Python语言开发,通过使用Pygame库来实现游戏的图形界面。
在实现贪吃蛇游戏的过程中,我主要实现了以下几个功能:1. 绘制游戏界面2. 控制蛇的移动3. 检测蛇与食物的碰撞4. 判断游戏结束5. 计分系统收获与体会代码实践能力的提升通过编写贪吃蛇的代码,我对Python语言的理解更加深入了。
熟悉Python的语法和特性,对于编写代码来说是非常重要的。
通过实践,我掌握了Python程序的基本结构、函数的定义和使用、条件和循环语句等基础知识,并且能够灵活运用这些知识来解决实际问题。
另外,在代码实践中,我也意识到了代码规范的重要性。
良好的代码规范可以提高代码的可读性和可维护性,在开发过程中能够更加高效地协同工作。
因此,我在编写代码的过程中注意了命名规范、缩进格式以及注释的添加,以保证代码的可读性和可维护性。
协作能力的培养在实训中,我与同伴合作完成了这个项目。
通过合作,我学会了与人沟通协作的重要性。
我们合理分工,明确任务目标,并尽力去协调和解决问题。
通过充分的沟通和协作,我们相互之间可以更好地理解彼此的想法和意图,为项目的顺利完成做出了积极的贡献。
在项目中,通过与同伴一起编写代码,我学到了如何利用版本控制工具进行代码管理。
我们使用Git进行代码的版本管理,这样可以方便地和同伴分享和协同开发代码。
掌握了这一技能,对于今后的工作和学习都具有重要的意义。
解决问题的能力提升在项目开发过程中,我遇到了很多问题,例如蛇如何移动、如何检测碰撞等等。
通过仔细研究问题、查找资料、请教同伴和老师,我逐渐掌握了解决问题的方法和技巧。
我学会了如何分析问题、找出问题的根源,并提出解决问题的方案。
贪吃蛇小游戏实验报告[
![贪吃蛇小游戏实验报告[](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程序流程根据分析后的贪吃蛇结构设计出相应的贪吃蛇流程。
贪食蛇游戏实习报告
![贪食蛇游戏实习报告](https://img.taocdn.com/s3/m/470b443483c4bb4cf7ecd1a8.png)
贪吃蛇游戏开发一、需求分析1、该贪吃蛇设计主要具有吃食、暂停、开始以及重新开始游戏。
2、主要目标:本游戏实现贪吃蛇在制定空间去吃随机出现的方块。
游戏可以暂停,如不满意这一次游戏的成果还能重新开始游戏。
二、项目设计1、流程设计程序流程图2、游戏具体设计:(1) 蛇移动的实现蛇的移动方向主要受头结点控制,所以每次画蛇时只要把前一结点的值赋给后一节点即可。
当蛇头的移动方向向右时,y 值不变x 的值不断增加。
当蛇头的移动方向向左时,y 值不变x 的值不断减少。
当蛇头的移动方向向下时,y 值增加x 的值不变。
当蛇头的移动方向向上时,y 值减小x 的值不变。
(2) 蛇死亡的判断当蛇头的值与蛇身或与墙的值相等时,蛇即算死亡.(3)蛇到达边框时从另一端出现和传送的实现当蛇头的x 或y 值达到边框的最大或最小位置时相应的给x 或y 赋以边框的最小或最大值以实现当蛇到达边框时能从另一端出来,同理当蛇头的x,y 值等于传送点位置的值时将蛇头x,y 的值赋以被传送到位置的值,这样将实现蛇的传送功能。
三、项目实现①蛇身颜色、最大长度及速度int speed;//设置蛇的速度int maxLen;//设置蛇的最大长度②随机生成食物产生随机种子:qsrand(QTime().currentTime().msec());定义食物的坐标、形状及颜色:int mx = (qrand()%(w/20))*20;int my = (qrand()%(h/20))*20;food = new QLabel(this);food->move(mx,my);food->resize(20,20);//食物大小food->setAutoFillBackground(true);//设置食物自动填充背景颜色food->setFrameShape(QFrame::Box);//设置形状food->setFrameShadow(QFrame::Sunken);food->setPalette(QPalette(QColor(qrand()%255,qrand()%110,qrand()%255)));//改变调色板的颜色return food;③方向控制及按键事件处理方向控制:switch(d){case d_up:nheady-=speed;break;case d_down:nheady+=speed;break;case d_left:nheadx-=speed;break;case d_right:nheadx+=speed;break;}按键事件处理:void snake::keyPressEvent(QKeyEvent *f){if(f->key()==Qt::Key_Up){d=d_up;}else if(f->key()==Qt::Key_Down){d=d_down;}else if(f->key()==Qt::Key_Left){d=d_left;}else if(f->key()==Qt::Key_Right){d=d_right;}}④食物的显示与蛇吃食物食物显示:data.push_back(getFood());//将吃到的食物添加在蛇身之后timer = new QTimer();//初始化时钟timer->setInterval(400);//设置时钟周期timer->start();connect(timer,SIGNAL(timeout()),this,SLOT(move()));//传递信号food = getFood();food->show();蛇吃食物:if((nheadx==foodx)&&(nheady==foody)){data.push_back(food);food = getFood();food->show();}游戏截图1游戏截图2游戏截图3游戏截图4⑤游戏结束条件if(data.size()>=10){QMessageBox msg(this);msg.setText("game over!");msg.setStandardButtons(QMessageBox::Yes|QMessageBox::No);msg.show();if(msg.exec()==QMessageBox::Yes){this->close();}}四、总结经过10天的培训,让我进一步熟悉了Linux系统下命令的使用、文件的编写与调试,更熟悉了以前所学的C++语言,让我对我所学习的计算机更加了解喜欢,也更加希望自己能学好计算机方面的设计,去设计更多有意思的游戏。
贪吃蛇游戏课程设计实验报告
![贪吃蛇游戏课程设计实验报告](https://img.taocdn.com/s3/m/c850300aad51f01dc381f10f.png)
辽宁科技大学课程设计说明书设计题目:基于C#的贪吃蛇游戏学院、系:装备制造学院专业班级:计算机科学与技术学生姓名:叶佳佳指导教师:丁宁成绩:2015年12月12日目录一、概述 (1)1、用C#实现该设计的方法 (1)2、贪吃蛇游戏说明 (1)二、实验目的及设计要求 (1)1、实验目的 (1)2、实验要求 (2)三、课程设计具体实现 (2)1、概要设计 (2)1.1、设计思想 (2)1.2、主模块实现 (2)1.3、主函数流程图 (4)2、详细设计 (5)2.1、设计思想 (5)2.2、具体模块实现: (5)四、调试过程及运行结果 (10)1、调试过程 (10)2、实验结果 (11)五、实验心得 (12)六、参考资料 (13)七、附录:源代码 (13)一、概述1、用C#实现该设计的方法首先应该了解设计要求,然后按照功能设计出实际模块,每个模块都要完成特定的功能,要实现模块间的高内聚,低耦合。
设计模块是一个相当重要的环节,模块的数量不宜太多,也不宜太少,要是每个模块都能比较简单的转换成流程图。
模块设计完成后,就该给每个模块绘制流程图。
流程图要尽可能的简单且容易理解,多使用中文,补一些过长的代码,增加理解难度。
此外,流程图应容易转换成代码。
根据流程图编写好代码后在WindowsXP操作系统,2008开发环境下进行运行测试,检查错误,最终设计出可行的程序。
2、贪吃蛇游戏说明游戏操作要尽可能的简单,界面要尽可能的美观。
编写程序实现贪吃蛇游戏,贪吃蛇游戏是一个深受人们喜欢的游戏:一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被吃掉,这时蛇的身体长一节,同时计10分;接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁、障碍物或身体交叉(蛇头撞到自己的身体),则游戏结束。
游戏结束时输出相应得分。
具体要求有以下几点:(1)对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理;(2)系统设计要实用,采用模块化程序设计方法,编程简练、可用,功能全面;(3)说明书、流程图要清楚;二、实验目的及设计要求1、实验目的.NET课程设计是教学实践环节中一项重要内容,进行此课程设计旨在掌握基础知识的基础上,进一步加深对VC#.NET技术的理解和掌握;提高和加强学生的计算机应用及软件开发能力,使学生具备初级程序员的基本素质;培养学生独立分析问题、解决问题、查阅资料以及自学能力,以适应信息管理行业日新月异的发展形势;本次课程设计是以学生独立思考解决问题为主,教师指导为辅,结合上机操作,完成指定的任务,做出设计报告。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
创作编号:GB8878185555334563BT9125XW创作者:凤呜大王*《计算机程序设计》课程设计报告课题名称贪吃蛇游戏班级学号姓名指导教师设计时间至设计地点常熟理工学院计算机科学与工程学院常熟理工学院计算机科学与工程学院目录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 Point nodes[MAX_LENGTH]; //蛇身数组,MAX_LENGTH为最大蛇长贪吃蛇是在不断的运动的,我们研究蛇的运动可以发现这样的特点:1. 蛇头由键盘控制,键盘不操作时,保持原有方向运动;(用int direction;表示)2. 运动时,蛇身后面一节移动到前面一节的位置。
当我们用nodes[0]表示蛇头的时候,nodes[1]运动到nodes[0]处;nodes[2]运动到nodes[1]处...。
3. 吃到一个食物以后,蛇身会增加一节。
即该数组中的有效数据个数加一。
(用int length;表示)根据上面的情况,我们可以设计蛇的数据结构如下:struct Snake {struct Point nodes[MAX_LENGTH]; //蛇身数组,保存每节蛇身的坐标。
MAX_LENGTH为最大蛇长int length; //当前蛇长int direction; //蛇头运动方向int live; //蛇活的,还是已经死了?}2.1.2 关于食物,有两个属性:1. 坐标位置2. 状态:存在,或被吃。
故我们用以下结构表示:struct Food {struct Point position; //食物的位置int exist; //存在?还是被吃?}1常熟理工学院计算机科学与工程学院2.2 系统模块划分和模块结构void main() {init(); /*初始化*/l=1;while(l) /*循环游戏*/{select(); /*游戏速度和结束的选择菜单*/gamePlay(); /*游戏主程序*/}close(); /*关闭游戏*/}2.3 流程图《C程序设计》课程设计2.4 数据类型、全局变量和函数说明2.4.1数据类型struct Point { /*一个存放点坐标的结构体*/int x, y; /*被多个结构体调用的基本参数,所以统一用point结构体来表示*/};struct Snake { /*用来模拟蛇状态的结构体*/struct Point nodes[MAX_LENGTH]; /*用来存放蛇每一节的位置*/int length; /*蛇长*/int direction; /*蛇移动的方向*/int live; /*蛇是否活着*/} snake;/*比较形象的把蛇抽象为一个数据类型*/struct Food { /*用来模拟食物状态的结构体*/struct Point position; /*食物的位置*/int exist; /*食物是否存在*/} food;2.4.2全局变量Score \\得分left,top,right,bottom \\游戏区域范围lastx,lasty \\用来保存最后一节蛇的位置keyCode \\用来保存按下的键2.4.3函数说明void init(void); \\初始化程序,给一些初始值赋值void gamePlay(void); \\游戏主循环void close(void); \\关闭游戏void drawWall(void); \\画墙void createFood(void); \\创造一个食物void drawFood(void); \\画出食物void drawSnake(void); \\画出蛇void drawScore(void); \\画出分数int touchWall(void); \\判断是否碰到墙int touchSelf(void); \\判断是否碰到自己void gameOver(void); \\游戏结束3常熟理工学院计算机科学与工程学院void moveSnake(void); \\移动蛇int oppositeDirection(int keyCode); \\判断是否方向有误int foodEat(void); \\判断是否吃到食物void expandSnake(void); \\把蛇增长一节3 程序测试和运行结果----------------------------------------------------------------------------选择速度开始或退出《C程序设计》课程设计----------------------------------------------------------------------------------------游戏运行中--------------------------------------------------------------------------------------------------------游戏结束5常熟理工学院计算机科学与工程学院4 课程报告小结【遇到的问题及解决方法分析等】4.1分数重叠显示解决方法:每次都用一块黑的矩形覆盖setfillstyle(1,16);bar(45,45,150,80);4.2速度太快解决方法:循环delayfor(d=0;d<4;d++)delay(GAME_SPEED);4.3食物可能出现在蛇身上解决方法:依次判断,若重叠则重新生成食物void createFood() {int i;label:food.position.x=left+10*((int)rand()%11);food.position.y=top+10*((int)rand()%11);for(i=0;i<=snake.length-1;i++){if(snake.nodes[i].x==food.position.x&&snake.nodes[i].y==food.position.y)goto label;}附录A:程序源代码/*writer: neolone(LB)*/#include <graphics.h>#include <stdlib.h>#include <time.h>#include <stdio.h>#include <dos.h>#include <conio.h>#include <bios.h>#define TRUE 1#define FALSE 0#define UP 0x4800#define DOWN 0x5000#define LEFT 0x4B00#define RIGHT 0x4D00#define ESC 0x011B#define SPEED1 0x0231#define SPEED2 0x0332#define SPEED3 0x0433《C程序设计》课程设计#define QUIT 0x0B30#define ENTER 0x1C0D#define MAX_LENGTH 100 /* max length of snake nodess */#define GAME_SPEED 100 /* game speed *//* data structure */struct Point {int x, y;};struct Snake {struct Point nodes[MAX_LENGTH];int length;int direction;int live;} snake;struct Food {struct Point position;int exist;} food;intscore=0,max,max1,max2,max3,left=200,top=200,right=300,bottom=300,lastx,lasty,keyCod e,keyCode2,sp,l,sel,times=1;char text[80];/* functions declaration */void init(void);void gamePlay(void);void close(void);void drawWall(void);void createFood(void);void drawFood(void);void drawSnake(void);void drawScore(void);int touchWall(void);int touchSelf(void);void gameOver(void);void moveSnake(void);7常熟理工学院计算机科学与工程学院int oppositeDirection(int keyCode);int foodEat(void);void expandSnake(void);void select(void);/*------------------------*/void main() {init();l=1;while(l){select();gamePlay();}close();}void init() {int gdriver=VGA ,gmode=VGAHI ;snake.nodes[0].x=250;snake.nodes[0].y=250;snake.nodes[1].x=250;snake.nodes[1].y=260;snake.length=2;snake.live=1;snake.direction=UP;score=0;food.exist=0;initgraph (&gdriver,&gmode,"C:\\tc20\\BGI");randomize();/*sui ji shu fa sheng qi*/drawWall();}void close() {FILE *fp;closegraph();if((fp=fopen("data.txt","w"))==NULL) /*关闭时保存最高分*/{exit(0);}else{fprintf(fp,"%d,%d,%d",max1,max2,max3);fclose(fp);}printf("pess any key to continue");}void gamePlay() {int keyCode,d;getch();while(TRUE) {drawScore();drawWall();if (touchWall() || touchSelf()) {gameOver();return;}if (!food.exist) createFood();food.exist=1;drawFood();drawSnake();for(d=0;d<sp;d++)delay(GAME_SPEED);if (bioskey(1) != 0) {keyCode = bioskey(0);switch(keyCode) {case ESC:gameOver();return;default:lastx=snake.nodes[snake.length-1].x;lasty=snake.nodes[snake.length-1].y;if (!oppositeDirection(keyCode)) {snake.direction = keyCode;}}}9moveSnake();if (foodEat()) {food.exist = FALSE;score += 10;expandSnake();}}}void drawWall() {rectangle(left,top,right+10,bottom+10);}void createFood() {int i;label:food.position.x=left+10*((int)rand()%11);food.position.y=top+10*((int)rand()%11);for(i=0;i<=snake.length-1;i++){if(snake.nodes[i].x==food.position.x&&snake.nodes[i].y==food.position.y)goto label;}}void drawFood() {setfillstyle(1,2);bar(food.position.x,food.position.y,food.position.x+10,food.position.y+10);}void drawSnake() {int j;setfillstyle(1,4);for(j=0;j<=snake.length-1;j++){bar(snake.nodes[j].x,snake.nodes[j].y,snake.nodes[j].x+10,snake.nodes[j].y+10);}void drawScore(void) {setfillstyle(1,16);bar(45,45,150,80);setcolor(WHITE);sprintf(text,"writer:neolone");outtextxy(170,50,text);sprintf(text,"score:%5d",score);outtextxy(50,50,text);}int touchWall() {int x1=snake.nodes[0].x;int y1=snake.nodes[0].y;if(x1<left||x1>right||y1<top||y1>bottom)return TRUE;elsereturn FALSE;}int touchSelf() {int i;for (i=3;i<snake.length-1;i++){if(snake.nodes[0].x==snake.nodes[i].x&&snake.nodes[0].y==snake.nodes[i].y) return TRUE;}return FALSE;}void gameOver() {FILE *fp;int x2,y2;x2=180;y2=250;11setcolor(WHITE);sprintf(text,"Game over !!your score is %d,%d",score,sel);outtextxy(x2,y2,text);delay(1000);getch();switch(sel%4){case 1:if(score>max1){max1=score;}break;case 2:if(score>max2){max2=score;}break;case 3:if(score>max3){max3=score;}break;default :{break;}}}void moveSnake() {int k;setfillstyle(1,16);lastx=snake.nodes[snake.length-1].x;lasty=snake.nodes[snake.length-1].y;bar(snake.nodes[snake.length-1].x,snake.nodes[snake.length-1].y,snake.nodes[snake.length-1].x+10,snake.nodes[snake.length-1].y+10);for(k=snake.length-2;k>=0;k--){snake.nodes[k+1].x=snake.nodes[k].x;snake.nodes[k+1].y=snake.nodes[k].y;}if(snake.direction==UP)snake.nodes[0].y-=10;else if(snake.direction==DOWN)snake.nodes[0].y+=10;else if(snake.direction==LEFT)snake.nodes[0].x-=10;else if(snake.direction==RIGHT)snake.nodes[0].x+=10;else;}int oppositeDirection(int keyCode) {if(keyCode==UP&&snake.direction==DOWN){return 1;}else if(keyCode==DOWN&&snake.direction==UP) {return 1;}else if(keyCode==LEFT&&snake.direction==RIGHT){return 1;}else if(keyCode==RIGHT&&snake.direction==LEFT){return 1;}elsereturn 0;}int foodEat() {if(snake.nodes[0].x==food.position.x&&snake.nodes[0].y==food.position.y) return 1;elsereturn 0;}void expandSnake() {if(keyCode==UP){lastx-=10;}else if(keyCode==DOWN) {lastx+=10;13}else if(keyCode==LEFT){lasty-=10;}else if(keyCode==RIGHT){lasty+=10;}else;snake.nodes[snake.length].x=lastx;snake.nodes[snake.length].y=lasty;snake.length++;}void select(){setfillstyle(1,7); /*实现选择速度的可视化菜单*/ bar(420,220,490,310);setfillstyle(1,9);bar(430,230,480,240);setfillstyle(1,5);setcolor(WHITE);sprintf(text,"speed1");outtextxy(430,230,text);bar(430,250,480,260);sprintf(text,"speed2");outtextxy(430,250,text);bar(430,270,480,280);sprintf(text,"speed3");outtextxy(430,270,text);bar(430,290,480,300);sprintf(text," quit ");outtextxy(430,290,text);sel=1;t=1;while(t){delay(10);if (bioskey(1) != 0) {keyCode = bioskey(0);switch(keyCode) {case UP:sel--;break;case DOWN:sel++;break;case ENTER:t=0;break;default :break;}switch(sel%4) {case 0:setfillstyle(1,9);bar(430,290,480,300);setcolor(WHITE);setfillstyle(1,5);bar(430,230,480,240);sprintf(text,"speed1");outtextxy(430,230,text);bar(430,250,480,260);sprintf(text,"speed2");outtextxy(430,250,text);bar(430,270,480,280);sprintf(text,"speed3");outtextxy(430,270,text);sprintf(text," quit ");outtextxy(430,290,text);break;case 1:setfillstyle(1,9);bar(430,230,480,240);setfillstyle(1,5);setcolor(WHITE);sprintf(text,"speed1");outtextxy(430,230,text);bar(430,250,480,260);sprintf(text,"speed2");outtextxy(430,250,text);bar(430,270,480,280);sprintf(text,"speed3");outtextxy(430,270,text);bar(430,290,480,300);15sprintf(text," quit ");outtextxy(430,290,text);break;case 2:setfillstyle(1,9);bar(430,250,480,260);setfillstyle(1,5);bar(430,230,480,240);setcolor(WHITE);sprintf(text,"speed1");outtextxy(430,230,text);sprintf(text,"speed2");outtextxy(430,250,text);bar(430,270,480,280);sprintf(text,"speed3");outtextxy(430,270,text);bar(430,290,480,300);sprintf(text," quit ");outtextxy(430,290,text);break;case 3:setfillstyle(1,9);bar(430,270,480,280);setfillstyle(1,5);bar(430,230,480,240);setcolor(WHITE);sprintf(text,"speed1");outtextxy(430,230,text);bar(430,250,480,260);sprintf(text,"speed2");outtextxy(430,250,text);sprintf(text,"speed3");outtextxy(430,270,text);bar(430,290,480,300);sprintf(text," quit ");outtextxy(430,290,text);break;default :break;}}}/*ch=getch();*/if(times==1) /*读取历史最高分*/ {if((fp=fopen("data.txt","r"))==NULL){sprintf(text,"Can not open the file");exit(0);}else{fscanf(fp,"%d,%d,%d",&max1,&max2,&max3);}fclose(fp);times=0;}switch(sel%4) { /*选择速度*/case 0:l=0;gameOver();close();break;case 1:sp=5;init();sprintf(text,"Hightest score:%d",max1);outtextxy(50,90,text);break;case 2:sp=3;init();sprintf(text,"Hightest score:%d",max2);outtextxy(50,90,text);break;case 3:sp=1;init();sprintf(text,"Hightest score:%d",max3);17outtextxy(50,90,text);break;default :break;}}创作编号:GB8878185555334563BT9125XW创作者:凤呜大王*。