贪吃蛇游戏课程设计实验报告
- 格式:doc
- 大小:999.50 KB
- 文档页数:26
一、实验目的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游戏开始点击游戏开始菜单后,出现一个对话框,提示一秒后,将开始游戏。
辽宁科技大学课程设计说明书设计题目:基于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技术的理解和掌握;提高和加强学生的计算机应用及软件开发能力,使学生具备初级程序员的基本素质;培养学生独立分析问题、解决问题、查阅资料以及自学能力,以适应信息管理行业日新月异的发展形势;本次课程设计是以学生独立思考解决问题为主,教师指导为辅,结合上机操作,完成指定的任务,做出设计报告。
一、实训目的本次实训旨在通过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. 提高自己的编程能力,特别是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. 培养了团队合作和沟通能力。
一、实验目的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编程语言实现一个贪吃蛇游戏,让学生掌握以下知识目标: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.平时表现:通过课堂参与、提问、小组讨论等环节,评估学生的学习态度和积极性。
贪吃蛇实验报告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篇一、实验背景随着科技的不断发展,计算机编程已成为现代教育的重要组成部分。
贪吃蛇游戏作为一款经典的编程学习项目,不仅能够帮助学生掌握编程基础,还能提高学生的逻辑思维能力和编程实践能力。
本次实验,我选择了使用C语言编写贪吃蛇游戏,通过实验过程,我收获颇丰。
二、实验目的1. 熟悉C语言编程环境,掌握基本的语法和编程技巧。
2. 学习并应用数组和结构体等数据结构,提高编程能力。
3. 理解并实现贪吃蛇游戏的算法,提高逻辑思维能力。
4. 掌握游戏开发的基本流程,提高编程实践能力。
三、实验过程1. 需求分析:在实验开始前,我首先对贪吃蛇游戏进行了需求分析,明确了游戏的基本规则和功能。
游戏规则包括:蛇的移动、食物的生成、蛇的吃食、蛇的生长、游戏结束等。
2. 设计思路:根据需求分析,我制定了以下设计思路:- 使用二维数组表示游戏界面,数组中的每个元素代表一个格子,蛇、食物、墙壁等都在数组中用特定的值表示。
- 使用结构体表示蛇的各个部分,包括蛇头的位置、方向、长度等。
- 通过键盘输入控制蛇的移动方向。
- 使用循环和条件语句实现蛇的移动、食物的生成、蛇的吃食、蛇的生长等功能。
- 判断游戏结束的条件,如蛇头撞墙、撞到自己等。
3. 编程实现:在确定了设计思路后,我开始编写代码。
首先,我定义了二维数组表示游戏界面,并初始化蛇和食物的位置。
然后,编写了蛇的移动、食物的生成、蛇的吃食、蛇的生长等功能。
最后,编写了游戏结束的判断条件。
4. 调试与优化:在编程过程中,我遇到了一些问题,如数组越界、蛇头移动方向错误等。
通过查阅资料和调试,我逐步解决了这些问题。
在实验过程中,我还对代码进行了优化,提高了程序的运行效率。
四、实验心得1. 编程基础的重要性:通过本次实验,我深刻体会到编程基础的重要性。
只有掌握了基本的语法和编程技巧,才能在编程过程中游刃有余。
2. 逻辑思维能力:在编写贪吃蛇游戏的过程中,我需要不断思考如何实现游戏的各个功能,这锻炼了我的逻辑思维能力。
- 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程序流程根据分析后的贪吃蛇结构设计出相应的贪吃蛇流程。
《计算机程序设计》课程设计报告课题名称贪吃蛇游戏_____________ 班级_________________学号__________________姓名______________指导教师 ______________设计时间 _________ 至_______设计地点 __________________常熟理工学院计算机科学与工程学院常熟理工学院计算机科学与工程学院目录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]处…。
一、摘要随着计算机技术的飞速发展,图形界面编程在计算机科学中占据着越来越重要的地位。
贪吃蛇游戏作为一款经典的益智游戏,不仅能够锻炼玩家的反应能力,还能培养编程思维。
本次实训以贪吃蛇游戏为背景,采用Java编程语言和Swing图形用户界面库进行设计,实现了游戏的基本功能,并对游戏性能进行了优化。
二、引言贪吃蛇游戏是一款简单易玩、老少皆宜的益智游戏。
玩家通过控制蛇的移动,吃掉食物使蛇身变长,同时躲避墙壁和自身,最终达到游戏目标。
本次实训旨在通过贪吃蛇游戏的设计与实现,提高学生的编程能力、图形界面设计能力和团队协作能力。
三、游戏设计1. 游戏界面设计游戏界面采用Swing图形用户界面库进行设计,主要包括以下部分:(1)游戏区域:用于显示蛇、食物和墙壁,采用JPanel组件实现。
(2)游戏菜单:包括开始游戏、重新开始、退出游戏等选项,采用JButton组件实现。
(3)游戏得分:显示当前得分,采用JLabel组件实现。
2. 游戏逻辑设计游戏逻辑主要包括以下部分:(1)蛇的移动:根据玩家输入的方向键控制蛇头的移动,实现蛇的实时更新。
(2)食物的生成:随机生成食物,当蛇头吃到食物时,蛇身变长,同时增加得分。
(3)墙壁和自身碰撞检测:当蛇头触碰到墙壁或自身时,游戏结束。
(4)游戏得分:根据蛇头吃到的食物数量计算得分。
四、关键技术实现1. 蛇的移动蛇的移动通过监听键盘事件实现。
在键盘事件监听器中,根据按键的方向更新蛇头的坐标,然后重新绘制蛇身。
2. 食物的生成食物的生成采用随机算法实现。
首先生成一个随机坐标,然后判断该坐标是否在游戏区域内,如果不在则重新生成。
3. 碰撞检测碰撞检测包括墙壁碰撞和自身碰撞。
在蛇头移动时,判断蛇头的坐标是否超出游戏区域边界,或者与自身坐标相同,若满足任一条件,则游戏结束。
4. 游戏得分游戏得分通过计算蛇头吃到的食物数量实现。
每吃到一个食物,得分加1。
五、性能优化1. 游戏速度优化:通过调整蛇的移动速度和食物生成的速度,使游戏节奏更加紧凑。
贪吃蛇游戏程序设计一、课程设计任务贪吃蛇小游戏程序设计二、设计要求通过游戏程序设计,提高编程兴趣与编程思路,巩固C语言中所学的知识,合理的运用资料,实现理论与实际相结合。
(1).收集资料,分析课题,分解问题,形成总体设计思路;(2).对于设计中用到的关键函数,要学会通过查资料,弄懂其用法,要联系问题进行具体介绍;(3).上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能正常运行;(4).完成课程设计报告,并进行答辩三、需求分析3.1、程序功能贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。
3.2、设计思想程序关键在于表示蛇的图形及蛇的移动。
用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用俩节表示。
移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。
食物的出现与消失也是画矩形块和覆盖矩形块。
为了便于理解,定义两个结构体:食物与蛇。
3.3、流程图四、设计的具体实现(1)函数定义函数定义是对各个基础函数的定义,并且设置需要运用的信息,便于调用#define N 200#define M 200#include"graphics.h"#include<stdlib.h>#include<stdio.h>#include<string.h>#include<iostream.h>#include<dos.h>#include<conio.h>#include <windows.h>#define LEFT 97//A#define RIGHT 100//D#define DOWN 115//S#define UP 119//W#define Esc 0x011bint i,key;int score=0;int gamespeed=250;//游戏速度可根据实际情况自行调整struct Food {int x;//食物的横坐标int y;//食物的纵坐标int yes;//判断是否要出现食物的变量}food;//食物的结构体struct Snake{int x[M];int y[M];int node;//蛇的节数int direction;//蛇的移动方向int life;//蛇的生命,0表示活着,1表示死亡}snake;void Init();//图形驱动void Close();//图形结束void DrawK();//开始画面void GamePlay();//玩游戏的具体过程void GameOver();//游戏结束void PrScore();//输出成绩(2)主函数main( )主函数是程序的主流程,首先定义使用到的常数、全局变量及函数原型说明,然后初始化图形系统,调用函数DrawK()画出开始画面,调用函数GamePlay(),即玩游戏的具体过程,游戏结束后调用Close()关闭图形系统,结束程序void main()//主函数{Init();//图形驱动DrawK();//开始画面GamePlay();//玩游戏的具体过程Close();//图形结束}void Init()//图形驱动{int gd=DETECT,gm;initgraph(&gd,&gm," ");/*此处为turboc的路径,读者可以根据自己的电脑而改*/ cleardevice();}(3)画界面函数DrawK( )主界面是一个封闭的围墙,用两个循环语句分别在水平和垂直方向输出连续的宽度和高度均的矩形方块,表示围墙,为了醒目,设置为白色。
贪吃蛇游戏开发一、需求分析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++语言,让我对我所学习的计算机更加了解喜欢,也更加希望自己能学好计算机方面的设计,去设计更多有意思的游戏。
*****************实验报告实验名称: 网络编程基础实训教程(贪吃蛇)指导教师:姓名:学号:班级:提交日期: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类用于描述蛇的一节。
辽宁科技大学课程设计说明书设计题目:基于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、通过上下左右键控制蛇的移动。