贪吃蛇游戏课程设计实验报告全解

合集下载

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

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

贪吃蛇游戏程序设计实验报告贪吃蛇游戏程序设计实验报告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 后续改进方向附件:- 源代码文件- 参考文献法律名词及注释:- 版权:保护原创作品的独有权利,防止他人未经授权使用、复制或传播。

- 许可证:授权他人在特定条件下使用受版权保护的作品。

- 商标:用于标识特定产品或服务来源的标识,可以是文字、图形、颜色或声音。

- 专利:通过创造一种新的发明而获得的对该发明的独有权利,防止他人在未获许可的情况下制造、使用或销售该发明。

- 使用条款:规定使用软件、服务或作品的条件和限制。

- 免责声明:声明作者或提供者对使用软件、服务或作品时可能产生的损害不承担责任。

全文结束 \。

贪吃蛇编程实验报告

贪吃蛇编程实验报告

计算机实习报告:班级: 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语句来判断是否方向相反。

贪吃蛇游戏_实习报告

贪吃蛇游戏_实习报告

课程设计报告贪吃蛇游戏设计专业学生姓名班级学号指导教师完成日期盐城工学院本科生课程设计报告(2008)贪吃蛇游戏设计摘要:本设计主要围绕贪吃蛇游戏展开。

众所周知,贪吃蛇游戏一直以来是比较流行的。

传统的贪吃蛇游戏功能比较少,对蛇的控制仅限于向左转和向右转,而现在的贪吃蛇游戏已经发展的相当好;具有更多的功能和友好的界面。

例如,最近流行的免费的3D版的贪吃蛇游戏,界面相当的美观,有很强的立体效果,真实感更强,食物也为立体的且颜色绚丽。

在3D 版贪吃蛇游戏里面,墙壁是真实的墙壁,障碍物比较多,如树、土丘等。

此外,其功能更多更强,可以选择难度。

不过,总而言之,3D版与传统的贪吃蛇游戏有共性,即娱乐性与益智性。

这些也是贪吃蛇游戏的优点。

本人因水平有限,只能设计简单的贪吃蛇游戏。

不过,在功能上,比传统贪吃蛇游戏更丰富。

蛇可以反向运动,操作起来,显得更为灵活。

界面的颜色选用绿色,不易使眼睛疲劳。

关键词:3D版;传统;灵活;贪吃蛇游戏设计目录1、概述1.1、用TC设计程序的方法1.2、简要说明2、设计要求3、系统分析与模块设计3.1、算法设计3.2、数据结构3.3、模块设计3.4、模块枝干图4、程序流程图4.1、图形驱动4.2、开始画面4.3、显示食物4.4、蛇向前移动4.5、判蛇死4.6、吃到食物后处理4.7、判蛇反向移动4.8、游戏结束4.9、图形结束5、程序设计及关键源代码6、运行结果分析7、实习心得盐城工学院本科生课程设计报告(2008)贪吃蛇游戏的设计1 .概述1.1、用TC设计程序的方法首先应了解设计要求,然后按照功能设计模块,每个模块完成特定的功能,要使模块间的耦合性小,内聚性高;设计模块是相当重要的一个环节。

模块的数量不宜太多,也不宜太少,要使每个模块都能比较简单的转换成流程图。

模块设计完成后,就该给每个模块绘制流程图了。

流程图要简单,容易理解,多用中文。

不宜写过长的代码,增加理解难度。

流程图与模块枝干图均可用绘图软件绘制,可适当加些背景色,用以区分。

java贪吃蛇课程设计报告总结

java贪吃蛇课程设计报告总结

课程设计报告:Java贪吃蛇游戏1. 背景贪吃蛇是一款经典的街机游戏,通过控制蛇的移动,吃掉食物,使蛇变得越来越长,直到触碰到边界或自己的身体为止。

该游戏在20世纪80年代流行起来,并成为了一种代表性的休闲娱乐方式。

贪吃蛇游戏可以提高玩家的反应能力、体力协调和空间感知能力。

本次课程设计旨在通过使用Java编程语言,设计实现一个简化版的贪吃蛇游戏,以加深学生对面向对象程序设计的理解和应用,并培养学生的逻辑思维能力和团队协作精神。

2. 分析2.1 游戏规则分析在贪吃蛇游戏中,玩家通过控制蛇的移动方向,使蛇吃到食物从而变长,直到游戏结束。

具体规则如下:•初始状态下,蛇由一个长度为3的身体组成,呈水平放置。

•蛇的移动方式为每个时间单位(通常为固定时间间隔)前进一格,移动方向由玩家通过键盘输入控制。

•蛇在吃到食物后,身体变长一节,并在地图上随机生成新的食物。

•蛇头碰到地图边界或自身身体的任意部分,游戏结束。

2.2 功能模块分析基于对游戏规则的分析,可以将贪吃蛇游戏的功能模块划分如下:•游戏初始化模块:初始化地图、蛇的初始位置和长度、生成初始食物等。

•用户输入模块:读取用户的键盘输入,控制蛇的移动方向。

•游戏逻辑模块:根据用户输入和游戏规则,更新蛇的位置、判断是否吃到食物或撞到障碍物等。

•地图绘制模块:将地图、蛇、食物等元素绘制到屏幕上。

•游戏循环模块:根据固定时间间隔循环执行游戏逻辑、用户输入和地图绘制等操作。

•游戏结束模块:在游戏结束时输出游戏得分等信息。

2.3 设计思路基于上述功能模块的分析,我设计了如下的实现思路:1.使用Java面向对象编程的思想,抽象出地图、蛇、食物等对象,并为其封装相应的属性和方法。

2.在游戏初始化模块中,创建地图对象、蛇对象,初始化位置和长度,并生成初始食物。

3.在用户输入模块中,利用Java的键盘事件监听机制,获取用户的方向输入,并通过调用蛇对象的移动方法实现控制蛇的移动方向。

关于贪吃蛇的实训报告

关于贪吃蛇的实训报告

一、实训目的本次实训旨在通过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语言编程和程序设计有了更深入的理解,编程能力得到了显著提升。

设计贪吃蛇实验报告

设计贪吃蛇实验报告

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

贪吃蛇的实训报告

贪吃蛇的实训报告

一、实训目的本次实训旨在通过设计并实现贪吃蛇游戏,巩固和加深学生对C语言程序设计的基本知识,提高学生的编程能力和实际动手操作能力。

通过实训,使学生能够熟练掌握C语言编程技巧,理解程序设计的基本思想和流程,同时培养学生的团队协作和问题解决能力。

二、实训内容1. 游戏规则贪吃蛇是一款经典的电脑游戏,玩家通过键盘控制蛇在游戏区域中移动,吃掉随机出现的食物。

蛇在吃掉食物后,长度会增加,得分增加。

如果蛇头撞到墙壁或自己的身体,游戏结束。

2. 游戏界面游戏界面由一个矩形区域组成,代表游戏区域。

蛇用一系列方块表示,食物用不同的颜色表示。

游戏开始时,蛇的长度为3,随机生成食物。

游戏过程中,蛇会根据玩家的输入移动。

3. 游戏逻辑(1)初始化:设置游戏区域大小、蛇的初始位置和方向、食物的初始位置等。

(2)游戏循环:不断检测玩家输入,更新蛇的位置,判断蛇是否吃到食物、撞到墙壁或自己的身体。

(3)游戏结束:当蛇撞到墙壁或自己的身体时,游戏结束。

4. 程序设计(1)数据结构:定义蛇、食物和游戏区域的数据结构。

(2)函数设计:设计初始化函数、移动函数、判断是否吃到食物函数、判断是否撞到墙壁或自己的身体函数等。

(3)主函数:调用相关函数,实现游戏循环。

三、实训过程1. 设计阶段首先,根据游戏规则和界面设计,确定游戏的数据结构和函数。

然后,编写程序代码,实现游戏的基本功能。

2. 编码阶段根据设计阶段的设计,使用C语言编写程序代码。

在编写过程中,注意代码的可读性和可维护性。

3. 调试阶段在编写代码过程中,不断调试程序,修复出现的错误。

调试过程中,注意观察程序运行情况,分析问题原因,并找出解决方案。

4. 测试阶段完成程序编写后,进行测试,确保程序能够正常运行。

测试过程中,注意观察游戏效果,确保游戏规则和界面设计符合预期。

四、实训成果通过本次实训,成功设计并实现了贪吃蛇游戏。

游戏运行稳定,功能完整,达到了实训目的。

五、实训心得1. 理解程序设计的基本思想和流程,掌握C语言编程技巧。

贪吃蛇课程设计python报告

贪吃蛇课程设计python报告

贪吃蛇课程设计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.平时表现:通过课堂参与、提问、小组讨论等环节,评估学生的学习态度和积极性。

贪吃蛇java实验报告doc

贪吃蛇java实验报告doc

贪吃蛇java实验报告doc贪吃蛇java实验报告篇一:JAVA贪吃蛇课程设计报告《Java应用开发》课程设计报告题目:指导老师:姓名:专业:班级:日期:JAVA小游戏 - 贪吃蛇目录一、系统总体设计 ................................. 1 (一)设计目标及完成功能 ........................ 1 (二)系统结构设计 .............................. 1 二、详细设计 ..................................... 2(一) 界面设计 ................................... 2 (二) 系统设计 ................................... 4 (三) 关键技术及算法 ............................. 6 四、测试 ......................................... 7五、安装使用说明 (7)总结(体会) ..................................... 8参考文献 .. (8)一、系统总体设计(一)设计目标及完成功能本软件是针对贪吃蛇小游戏的JAVA程序,利用上、下、左、右方向键来改变蛇的运动方向,长按某个方向键后,蛇的运动速度会加快,在随机的地方产生食物,吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常进行游戏,在到达固定的分数后,游戏速度会加快。

1.窗口功能说明:设计了三个窗口,分别是游戏主窗口,成绩窗口,游戏帮助和关于作者窗口。

2.菜单栏分别为:游戏菜单和帮助菜单其中,游戏菜单包括开始游戏和退出游戏两项;帮助菜单包括游戏帮助和关于作者两项。

(二)系统结构设计图1-1 系统结构图二、详细设计(一) 界面设计贪吃蛇游戏的基本运行界面(1)生成初始界面:图2-1 初始界面(2)游戏菜单栏:图2-2 游戏菜单(2)积分排行菜单栏:图2-3 积分排行菜单(3)进行游戏界面:点击“游戏”,进入游戏菜单,选择“开始游戏”,或者。

贪吃蛇实验报告

贪吃蛇实验报告

贪吃蛇实验报告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.《算法导论》以上是本次贪吃蛇实验的报告,通过实验我们得出了最短路径算法在贪吃蛇游戏中的优越性,并提出了进一步研究的方向。

贪吃蛇实验报告

贪吃蛇实验报告

贪吃蛇实验报告
一、实验目的
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 库等相关知识,
并实现了一个简单的贪吃蛇游戏。

在实验过程中,我们深入了解游戏的规则和逻辑,并通过编写代码实现了游戏的基本流程。

通过该实验,加强了自己的编程和思维能力,为将来进行更复杂的游戏开发提供了基础。

贪吃蛇代码实验报告

贪吃蛇代码实验报告

一、实验目的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) # 显示分数```五、实验总结通过本次实验,我们成功地实现了贪吃蛇游戏。

贪吃蛇小游戏实验报告[

贪吃蛇小游戏实验报告[

- 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版)贪吃蛇实验报告

《计算机程序设计》课程设计报告课题名称贪吃蛇游戏_____________ 班级_________________学号__________________姓名______________指导教师 ______________设计时间 _________ 至_______设计地点 __________________常熟理工学院计算机科学与工程学院常熟理工学院计算机科学与工程学院目录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]处…。

贪吃蛇游戏实验报告

贪吃蛇游戏实验报告

*****************实验报告实验名称: 网络编程基础实训教程(贪吃蛇)指导教师:姓名:学号:班级:提交日期:1.实验目的通过开发一款贪吃蛇游戏程序, 熟练掌握C#编程语言、和面向对象程序设计方法, 独立完成一个游戏程序的开发。

2.实验题目使用C#编程语言, 开发一款贪吃蛇游戏, 如下图所示。

3.功能描述a)游戏场地是一片矩形区域的草坪。

b)一条蛇由蛇头和蛇身组成。

c)当游戏开始之后, 草坪中出现一颗豆和一条蛇, 并且蛇不停地移动, 蛇移动方向与蛇头一致。

d)当游戏暂停之后, 蛇停止移动。

e)当蛇移动时, 玩家使用“↑”、“↓”、“←”和“→”四个键控制蛇的移动方向。

f)当蛇头与豆的位置重合时, 豆被蛇吃掉, 同时在草坪中再生成一颗新的豆, 蛇身增加一节。

当蛇头碰到蛇身时, 则咬断蛇身, 后半部分的蛇身消失。

当蛇头碰到草坪四周时, 蛇立即毙命, 游戏结束。

4.需求分析根据功能描述可知, 贪吃蛇游戏的系统结构图如下所示。

1)定义数据字典如下:2)草坪(Lawn): 草坪是贪吃蛇游戏的场地。

豆和蛇只能存在于草坪范围之内。

草坪具有大小和颜色等属性。

蛇(Snake):在贪吃蛇游戏中, 蛇由若干节组成, 其中第一节是蛇头, 其余是蛇身。

在游戏过程中, 有且仅有一条蛇, 并且蛇在不停地移动。

如果蛇吃了豆, 则蛇生长一节。

如果蛇头碰到蛇身, 则咬断蛇身, 后半部分的蛇身消失。

如果蛇头离开草坪, 则蛇死亡游戏结束。

蛇具有长度、颜色、运动方向、每一节的位置等属性。

豆(Bean):在贪吃蛇游戏中, 豆是蛇的食物。

在游戏过程中, 有且仅有一颗豆。

如果蛇吃了豆, 则重新生成一颗豆。

豆具有位置、大小和颜色等属性。

5.设计说明根据需求分析可知, Snake的每一节都有位置和大小等属性。

而Bean也具有这两个属性。

抽象出二者的共同特征, 抽象出一般类Block, 用于描述一个块。

Block派生出Bean和SnakeBlock两个类, 其中SnakeBlock类用于描述蛇的一节。

贪吃蛇综合设计报告

贪吃蛇综合设计报告

《高级语言程序设计》综合实验报告第一小组:贪吃蛇游戏一、实验环境操作系统:Windows 10编程环境:codeblocks二、实验内容与完成情况(主要介绍项目总体功能分析与说明)功能1♦功能1的文字描述移动控制台光标坐标♦功能1实现的流程图♦功能1代码功能2♦功能2的文字描述改变蛇的移动方向♦功能2实现的流程图功能2代码功能3功能3的文字描述判断蛇是否吃到食物,是,则生成新食物的坐标,得分、等级、速度和蛇的长度增加;否,则保留原食物坐标。

功能3实现的流程图功能3代码功能4♦功能4的文字描述判断蛇是否存活♦功能4实现的流程图功能4代码功能5♦功能5的文字描述显示游戏图像、得分和等级。

♦功能5代码功能6♦功能6的文字描述运行调用游戏相关的函数,储存最高分、打破记录的人和分数、进入排行榜的人数(打破前一个最高分记录才能进入排行榜)。

♦功能6实现的流程图功能6的代码功能7♦功能7的文字描述调用功能6的函数,死亡后可选择重新开始或退出游戏输出排行榜。

♦功能7实现的流程图功能7的代码功能8♦功能8的文字描述读取储存了排行榜信息的文件,并赋值给姓名和得分变量char name1[10]、int score1,在控制台界面上输出排行榜♦功能8的代码三、功能测试1、游戏开始界面测试结果:用户可以输入自己喜欢的英文名字。

输入完成后按回车键可以看到游戏的操作指南。

2、蛇的移动、食物、分数记录测试结果:游戏开始,蛇头“@”和食物“*”出现,可以用“WSAD”来控制蛇上下左右移动,成功吃到食物蛇身变长并且每吃到一个食物右侧记录的等级和得分会增加一点。

3、蛇的死亡,最高纪录和排行榜显示测试结果:蛇死亡后界面自动弹出“Game over”并且显示出玩家在上一局的分数;接着玩家可以选择“y”或“n”来决定是否重玩游戏,不重玩游戏则输出排行榜并按任意键结束。

四、项目总结(其中的错误和解决方案)1闪屏。

游戏开始后界面上的所有字符都在闪烁,并且频率越来越快。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

辽宁科技大学课程设计说明书设计题目:基于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、实验要求利用Microsoft Visual Studio 2008 平台设计制作一个贪吃蛇小游戏,要求如下:(1)能够记录游戏成绩(计分按照每吃一块食物增加20累计)(2)可以暂停/继续游戏(通过按钮实现)(3)蛇的身体能够随着吃到食物的数量逐渐变长(4)可以自己添加障碍物,要求设计成红色墙壁(5)积分每增加50分要求蛇相应的加快速度(6)要求在游戏的过程中添加背景音乐和随机炸弹三、课程设计具体实现1、概要设计1.1、设计思想程序关键在于表示蛇的图形及蛇的移动。

用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头(绿色)用三节表示。

移动时必须从蛇头开始,所以蛇不可以向相反的方向移动,如果不按任意键,蛇自行在当前方向右前移,但按下有效方向键后,蛇头朝该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后节用背景色覆盖。

食物的出现与消失也是画矩形块和覆盖矩形块。

为了便于理解,定义两个结构体:食物与蛇,同时还定义了一个随意的墙。

然后利用图形驱动,,制作美观的游戏界面,通过随机函数产生随机的食物,控制游戏过程食物的出现。

定义键盘操作控制游戏过程蛇的移动方向,画出边界,并判断游戏是否结束,统计游戏过程中蛇吃的食物数量,计算并输出游戏成绩。

1.2、主模块实现1.snake的设计模块22. Form 的设计模块31.3、主函数流程图是开始游戏蛇开始移动根据键盘控制蛇移动方向判断蛇头和食物的坐标是否重合随机生成下一个食物判断蛇头和自身及墙、炸弹是否重合游戏结束否否是是暂停是否继续否42、详细设计2.1、设计思想首先进入VS2008打开文件新建一个项目,点击windows窗体应用程序,名字设为Snakes 。

进入Form的设计界面,首先我们都知道游戏最基本的功能有开始,暂停,继续,退出,所以首先要先加4个button键来控制游戏,再加一个TextBox文本框来显示成绩。

在窗体中加入Panel来实现贪吃蛇的运动空间,设置有一个游戏的界面运动空间。

之后就要定义一个sakes 类,来实现蛇的一些属性与方法,首先明白这个游戏实现的是贪吃蛇吃食物,所以还需要定义食物,食物被吃后要实现食物的重建。

玩游戏时还需要有控制键的设置,这一模块可以选用Switch语句来实现。

实现基本的功能后要注意怎样的情况会造成蛇的死亡,可以想到的有越界线,咬到自己都会死亡。

随着思想的成熟,觉得只吃食物好像太简单,所以在这个贪吃蛇游戏的基础上又设置了一些障碍,加了几堵墙,还设置了随机的炸弹,这样游戏就更有意思了,加上以前玩俄罗斯方块的一些感觉,还设置了游戏的不断加速的模块。

2.2、具体模块实现:1、snake 属性定义2、Form 属性定义53、创建蛇的模块创建蛇的模块和创建障碍物的思路想法是一致的,都是通过label实现:4、创建食物模块创建食物模块和创建随机炸弹思路是一致的,都是在一定范围内随机出现。

通过坐标点的方法来实现食物,食物是随机出现的,而且一旦被吃掉就会立刻创建新的食物。

而且还需要判断食物出现的地方时是否与墙壁重合。

65、蛇吃食物的模块通过Timer 控件来设置时间,,吃到食物之后身体增长,蛇的身体颜色是三色交替出现,每吃到一个食物积分加10,身体加长对应增长。

而且还要判断是否需要更改蛇的运行速度。

77、是否撞到自己模块当贪吃蛇自己碰到自己的身体时游戏结束8、游戏结束模块9、初始化panel810、初始化Form并添加背景音乐(Kalimba.wav)11、控制蛇的运动方向四、调试过程及运行结果1、调试过程(1)在实现撞障碍物的过程中,刚刚开始的时候墙不能起作用,贪吃蛇总是能穿过障碍物,后来才发现时障碍物的设置范围出现了错误。

经过不停的尝试与计算才算出正确的范围。

(2)在实现固定墙的过程中是通过使用Label来实现的,跟创建贪吃蛇的思想是一样的,但是在运行过程中刚刚开始的时候不出现障碍物,后来在老师的帮助下发现原来少一句话,需要在NowStar()函数中增加障碍物的显示for (int i = 0; i <sk.Wall.Count; i++){ this.panel1.Controls.Add((Label)sk.Wall[i]);}(3)在玩游戏的过程中发现食物会与墙壁还有炸弹重合的情况,然后通过分析原因,这与构造食物时判断食物与身体是否接触的道理是一样的,这里需要加一个循环语句来判断,如果不是墙的话才在这里创造食物。

(4)在创造炸弹的实现过程中,总是在炸弹的右半边任何位置都爆炸,通过一步一步的调试检查是在判断语句时右侧的范围太大,导致有半侧没有炸弹也爆炸。

通过调试找到正确的范围。

2、实验结果(1)游戏运行主界面(2)帮助界面(3)结束界面五、实验心得这次的课设对我来说有很大的收获,我学到了许多课本上没有学到的知识,这次我将将课本上的理论知识充分的转化成了一些实用技能。

通过这次自己制作的软件,丰富了自己的实践技能,扩展课本专业的知识面。

在这次设计的同时,我又从中学到了许多东西。

但由于我对这样的软件开发还只是一个开始,了解的不多,这其中或许还有很多的不足,有些模块做的不是很好,界面的设计及整体的布局还是比较简单。

此外,在这一次的课程设计过程中,我上网查阅了大量的资料,对C#有了更深的理解,对于软件工程这些辅助性的教材也巩固了不少,为我这次的课设提供了很大的帮助,锻炼了我的能力。

更重要的是,它还让我认识到了自己的不足之处,在编程方面,我还是比较欠缺,以后的路任重道远,我需要的事不断地丰富自己,充实自己,这样才能在程序设计方面有所收获。

最后感谢老师在这次课程设计中对我们的悉心教导,通过这次学习,让我们掌握了很多有关C#.NET的应用知识。

六、参考资料[1] 陈俊荣. ASP与网络数据库技术[M]. 北京:中国铁道出版社,2005.[2] 张绣兰. ASP网站建设实录[M]. 北京:北京希望电子出版社. 2008.[3] 李华. DreamWeaver8网页设计程序教程[M]. 北京:清华大学出版社. 2004.[4] 江开耀. 软件工程[M]. 西安:西安电子科技大学出版社.七、附录:源代码snake源代码如下:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Forms;using System.Collections;using System.Drawing;using ponentModel;using System.Data;namespace Snake{class snake{public Point food_p;//定义食物的位置private Label food; //定义食物public Label Food //食物属性{get { return food; }set { food = value; }}private ArrayList body = new ArrayList(); //定义食物定义食物链表public ArrayList Body //食物链表属性{get { return body; }set { body = value; }}//定义障碍物上下左右各面墙蛇撞墙即死private ArrayList wall = new ArrayList();public ArrayList Wall{}private ArrayList wall1 = new ArrayList();public ArrayList Wall1{get { return wall1; }set { wall1 = value; }}private ArrayList wall2 = new ArrayList();public ArrayList Wall2{get { return wall2; }set { wall2 = value; }}private ArrayList wall3 = new ArrayList();public ArrayList Wall3{get { return wall3; }set { wall3 = value; }}public void CreateSnake()//使用Label进行创建一个蛇{int left = 20;Label lb;for (int i = 0; i < 2; i++){lb = new Label(); = "label" + i.ToString();lb.BackColor = Color.Green;lb.Width = 10;lb.Height = 10;lb.Top = 0;lb.Left = left;body.Add(lb);left -= 10;}}public void CreateWall()//使用Label进行创建障碍物{int left = 200;Label lb0;for (int i = 0; i < 10; i++ ){lb0 = new Label(); = "label" + i.ToString();lb0.BackColor = Color.Red;lb0.Width = 10;lb0.Top = 50;lb0.Left = left;wall.Add(lb0);left -= 10;}}public void CreateWall1(){int left = 200;Label lb1;for (int i = 0; i < 10; i++){lb1 = new Label(); = "label" + i.ToString();lb1.BackColor = Color.Red;lb1.Width = 10;lb1.Height = 10;lb1.Top = 310;lb1.Left = left;wall1.Add(lb1);left -= 10;}}public void CreateWall2(){int top = 200;Label lb2;for (int i = 0; i < 10; i++){lb2 = new Label(); = "label" + i.ToString();lb2.BackColor = Color.Red;lb2.Width = 10;lb2.Height = 10;lb2.Left = 50;lb2.Top = top;wall2.Add(lb2);top -= 10;}}public void CreateWall3(){int top = 200;Label lb3;for (int i = 0; i < 10; i++){ = "label" + i.ToString();lb3.BackColor = Color.Red;lb3.Width = 10;lb3.Height = 10;lb3.Left = 260;lb3.Top = top;wall3.Add(lb3);top -= 10;}}//创建食物public void CreateFood(){Random rand = new Random();food_p.X = rand.Next(36) * 10;//限定食物物所能出现的横坐标food_p.Y = rand.Next(36) * 10;//限定食物物所能出现的横坐标for (int i = 0; i < body.Count; i++){if (food_p.Y == ((Label)body[i]).Top && food_p.X == ((Label)body[i]).Left){this.CreateFood();break;}}//判断食物和所见障碍物是否重合for (int i = 0; i < wall.Count; i++){if (food_p.Y == ((Label)this.Wall[i]).Top && food_p.X ==((Label)this.Wall[i]).Left){this.CreateFood();}else if (food_p.Y == ((Label)this.Wall1[i]).Top && food_p.X ==((Label)this.Wall1[i]).Left){this.CreateFood();}else if (food_p.X == ((Label)this.Wall2[i]).Left && food_p.Y ==((Label)this.Wall2[i]).Top){this.CreateFood();}else if (food_p.X == ((Label)this.Wall3[i]).Left && food_p.Y ==((Label)this.Wall3[i]).Top){this.CreateFood();}food = new Label();food.Width = 10;food.Height = 10;food.Top = food_p.Y;food.Left = food_p.X;//加载食物图片food.Image = Snake.Properties.Resources.food;}//蛇吃食物通过timer进行速度的设置public Panel EatFood(Panel panel1, Timer timer1, TextBox textBox1, TextBox textBox2) {if (((Label)body[0]).Top == food_p.Y && ((Label)body[0]).Left == food_p.X){panel1 = this.DeFood(panel1);Label lb = new Label();//增加蛇身 = "label" + body.Count.ToString();int i=body.Count%3;if(i==0)lb.BackColor = Color.DimGray;else if(i==1)lb.BackColor = Color.DeepPink;elselb.BackColor = Color.DeepSkyBlue;lb.Width = 10;lb.Height = 10;lb.Top = ((Label)body[body.Count - 1]).Top;lb.Left = ((Label)body[body.Count - 1]).Left;body.Add(lb);textBox1.Text = Convert.ToString(Convert.ToInt32(textBox1.Text) + 10);textBox2.Text = textBox1.Text;if (Convert.ToInt32(textBox2.Text) < Convert.ToInt32(textBox1.Text))textBox2.Text = textBox1.Text;//修改速度if (textBox1.Text == "50")timer1.Interval = 150;else if (textBox1.Text == "100")timer1.Interval = 100;else if (textBox1.Text == "150")timer1.Interval = 80;else if (textBox1.Text == "200")timer1.Interval = 50;else if (textBox1.Text == "250")timer1.Interval = 20;}return panel1;//吃过后销毁再创建食物public Panel DeFood(Panel panel1){panel1.Controls.Remove(food);this.CreateFood();panel1.Controls.Add(food);return panel1;}}}//Form 源代码:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Collections;using System.Media;namespace Snake{public partial class Form1 : Form{public Form1(){InitializeComponent();}private snake sk = new snake(); //构造一个蛇的对象private int dir = 3; //初始时要运动的方向(向右)private Point bomb_b; //定义炸弹private Label bomb;public void CreatBomb()//创建炸弹{Random rand = new Random();bomb_b.X = rand.Next(20) * 10;bomb_b.Y = rand.Next(20) * 10;bomb = new Label();bomb.Width = 10;bomb.Height = 10;bomb.Top = bomb_b.Y;bomb.Left = bomb_b.X;bomb.Image = Snake.Properties.Resources.b2;//判断随机炸弹是否与随机食物重合{CreatBomb();}}//清除炸弹public Panel DeBomb(Panel panel1){panel1.Controls.Remove(bomb);return panel1;}private int diring = -1; //正在运动的方向private void button1_Click(object sender, EventArgs e) //开始{textBox1.Text = "0";button3.Enabled = true;timer1.Start();panel1 = sk.DeFood(panel1);this.CreatBomb();panel1.Controls.Add(bomb);}private void button2_Click(object sender, EventArgs e) //暂停{timer1.Stop();}private void button3_Click(object sender, EventArgs e) //新游戏{textBox1.Text = "0";timer1.Interval = 200;button3.Enabled = false;panel1.Controls.Clear();sk.Body.Clear();sk.CreateSnake();NowStart();dir = 3;diring = -1;timer1.Stop();}private void NowStart()//初始化{//再panel中添加蛇的身体for (int i = 0; i < sk.Body.Count; i++){this.panel1.Controls.Add((Label)sk.Body[i]);}//再panel中添加障碍物for (int i = 0; i < sk.Wall.Count; i++){this.panel1.Controls.Add((Label)sk.Wall[i]);}for (int i = 0; i < sk.Wall1.Count; i++){this.panel1.Controls.Add((Label)sk.Wall1[i]);}for (int i = 0; i < sk.Wall2.Count; i++){this.panel1.Controls.Add((Label)sk.Wall2[i]);}for (int i = 0; i < sk.Wall3.Count; i++){this.panel1.Controls.Add((Label)sk.Wall3[i]);}}private void GameOver() //结束游戏{panel1.Controls.Remove(sk.Food);PictureBox over = new PictureBox();over.Image = Snake.Properties.Resources.the_end;over.Width = 360;over.Height = 360;this.panel1.Controls.Add(over);timer1.Stop();panel1 = this.DeBomb(panel1);MessageBox.Show("你本次的得分为:" + textBox1.Text+",历史最高分为:"+textBox2.Text);}private void panel1_Paint(object sender, PaintEventArgs e) //初始化panel{NowStart();}private void Form1_Load(object sender, EventArgs e) //初始化Form创建蛇的对象{sk.CreateSnake();sk.CreateWall();sk.CreateWall1();sk.CreateWall2();sk.CreateWall3();this.CreatBomb();SoundPlayer music = new SoundPlayer(@"H:\Kalimba.wav");music.Play();//this.Draws();}private void HitSelf() //撞击自己{for (int i = 1; i < sk.Body.Count; i++){if (((Label)sk.Body[0]).Top == ((Label)sk.Body[i]).Top &&((Label)sk.Body[0]).Left == ((Label)sk.Body[i]).Left){GameOver();break;}}}public void move()//控制蛇的前进{for (int i = sk.Body.Count - 1; i > 0; i--){//判断是否撞墙(所建的障碍物)if (((Label)sk.Body[0]).Top == ((Label)sk.Wall[i]).Top &&(((Label)sk.Wall[i]).Left - 90 <= ((Label)sk.Body[0]).Left &&((Label)sk.Body[0]).Left <= ((Label)sk.Wall[i]).Left + 20)){GameOver();break;}else if (((Label)sk.Body[0]).Top == ((Label)sk.Wall1[i]).Top &&(((Label)sk.Wall1[i]).Left - 90 <= ((Label)sk.Body[0]).Left &&((Label)sk.Body[0]).Left <= ((Label)sk.Wall1[i]).Left + 20)){GameOver();break;}else if (((Label)sk.Body[0]).Left == ((Label)sk.Wall2[i]).Left &&(((Label)sk.Wall2[i]).Top -90 <= ((Label)sk.Body[0]).Top &&((Label)sk.Body[0]).Top<= ((Label)sk.Wall2[i]).Top + 20)){GameOver();break;}else if (((Label)sk.Body[0]).Left == ((Label)sk.Wall3[i]).Left &&(((Label)sk.Wall3[i]).Top - 90 <= ((Label)sk.Body[0]).Top &&((Label)sk.Body[0]).Top <= ((Label)sk.Wall3[i]).Top + 20)){GameOver();break;}//判断是否撞上炸弹else if (bomb_b.Y == ((Label)sk.Body[0]).Top && bomb_b.X ==((Label)sk.Body[0]).Left){GameOver();break;}else if (dir == 0 && diring != 1)//Up//运动方向{((Label)sk.Body[i]).Top = ((Label)sk.Body[i - 1]).Top;((Label)sk.Body[i]).Left = ((Label)sk.Body[i - 1]).Left;if (i == 1){((Label)sk.Body[0]).Top -= 10;panel1 = sk.EatFood(panel1, timer1, textBox1, textBox2);HitSelf();}if (((Label)sk.Body[0]).Top < 0){GameOver();break;}}else if (dir == 1 && diring != 0)//Down{((Label)sk.Body[i]).Top = ((Label)sk.Body[i - 1]).Top;((Label)sk.Body[i]).Left = ((Label)sk.Body[i - 1]).Left;if (i == 1){((Label)sk.Body[0]).Top += 10;panel1 = sk.EatFood(panel1, timer1, textBox1, textBox2);HitSelf();}if (((Label)sk.Body[0]).Top > 360){GameOver();break;}}else if (dir == 2 && diring != 3)//Left{((Label)sk.Body[i]).Top = ((Label)sk.Body[i - 1]).Top;((Label)sk.Body[i]).Left = ((Label)sk.Body[i - 1]).Left;if (i == 1){((Label)sk.Body[0]).Left -= 10;panel1 = sk.EatFood(panel1, timer1, textBox1, textBox2);HitSelf();}if (((Label)sk.Body[0]).Left< 0){GameOver();break;}}else if (dir == 3 && diring != 2)//Right{((Label)sk.Body[i]).Top = ((Label)sk.Body[i - 1]).Top;((Label)sk.Body[i]).Left = ((Label)sk.Body[i - 1]).Left;if (i == 1){((Label)sk.Body[0]).Left += 10;panel1 = sk.EatFood(panel1, timer1, textBox1, textBox2);HitSelf();}if (((Label)sk.Body[0]).Left > 360){GameOver();break;}}else//逆向{GameOver();break;}}}//timer控件具体实现private void timer1_Tick(object sender, EventArgs e){move();}//控制蛇的移动方向protected override bool ProcessDialogKey(Keys keyData){switch (keyData){case Keys.Up:dir = 0; break;case Keys.Down:dir = 1; break;case Keys.Left:dir = 2; break;case Keys.Right:dir = 3; break;}if (keyData == Keys.Up || keyData == Keys.Down || keyData == Keys.Left || keyData== Keys.Right){return false;}else{return base.ProcessDialogKey(keyData);}}private void button4_Click(object sender, EventArgs e) //退出{this.Close();}private void button5_Click(object sender, EventArgs e) //继续{timer1.Start();}private void button6_Click(object sender, EventArgs e) //帮助{MessageBox.Show("游戏介绍:\n" + "\n1、通过上下左右键控制蛇的移动。

相关文档
最新文档