贪吃蛇实验报告
贪吃蛇游戏的开发报告

基于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分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或蛇头撞倒自己身体游戏结束。
实验报告贪吃蛇

一、实验目的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 后续改进方向附件:- 源代码文件- 参考文献法律名词及注释:- 版权:保护原创作品的独有权利,防止他人未经授权使用、复制或传播。
- 许可证:授权他人在特定条件下使用受版权保护的作品。
- 商标:用于标识特定产品或服务来源的标识,可以是文字、图形、颜色或声音。
- 专利:通过创造一种新的发明而获得的对该发明的独有权利,防止他人在未获许可的情况下制造、使用或销售该发明。
- 使用条款:规定使用软件、服务或作品的条件和限制。
- 免责声明:声明作者或提供者对使用软件、服务或作品时可能产生的损害不承担责任。
全文结束 \。
贪吃蛇游戏程序设计实验报告

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 贪吃蛇游戏实验报告

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有效时,则得分清零。
嵌入式课设实验报告——贪吃蛇

题目:贪吃蛇游戏设计专业:电子信息工程班级:姓名:、成绩:导师签字:年月日任务书题目:贪吃蛇游戏设计参数:供电电源电压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周的课程设计。
贪吃蛇报告完整版

贪吃蛇报告完整版课程设计基础课程设计贪吃蛇游戏设计院系:,,,,,,,,,,,班级:,,,,,,,,,,,姓名:,,,,,,,,,,,合作者:,,,,,,,,,,,指导教师:,,,,,,,,,,,时间 _____年____月____日课程设计课程设计目录1(1概述 ..................................................................... ................................错误~未定义书签。
1.1.1研究的背景与意义 ..................................................................... ...错误~未定义书签。
1.1.2 设计的任务和需要的知识点...................................................错误~未定义书签。
1. 生成设计主要完成的任务 ......................................................错误~未定义书签。
2. 需要掌握和应用的知识点 ......................................................错误~未定义书签。
1.1.3 具体完成的设计内容.................................................................错误~未定义书签。
1.2需求分析...................................................................... ...........................错误~未定义书签。
1.2.1 功能需求 ..................................................................... .................错误~未定义书签。
设计贪吃蛇实验报告

一、实验目的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)游戏逻辑实现方面:蛇头移动、吃到食物、撞墙等逻辑实现正确,游戏运行稳定。
- 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创作者:凤呜大王*。