《软件工程导论》实验报告 贪吃蛇源程序加报告

合集下载

实验报告贪吃蛇

实验报告贪吃蛇

一、实验目的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. 游戏控制实现在游戏主函数中,通过监听键盘事件来控制蛇的移动方向。

C语言贪吃蛇实验报告

C语言贪吃蛇实验报告

C语言程序设计报告题目:贪吃蛇游戏的程序设计院系:西语学院英语教育6班姓名:学号:1.1题目:设计贪吃蛇小游戏1.2题目的要求:玩家通过键盘控制蛇在地图上寻找食物,蛇吃下食物,可以加分,碰到四壁游戏结束。

1.3设计的步骤:分析设计题目的要求,即需求分析。

总体设计,确定所需模块及模块间调用关系,定义系统中使用的数据类型。

详细设计,确定每个模块的功能,绘制主要函数的流程图。

编写程序代码,调试程序使其能正确运行。

要求书写规范,注意采用缩进格式。

函数名、变量名要见文晓意,注释要简而不失、详而不缀。

设计完成的软件要便于操作和使用。

程序测试,发现程序中存在的错误并改正。

完成报告。

2详细设计说明2.1课程设计的要求:通过游戏程序设计,提高编程兴趣与编程思路,巩固C语言中所学的知识,合理的运用资料,实现理论与实际相结合。

收集资料,分析课题,分解问题,形成总体设计思路;对于设计中用到的关键函数,要学会通过查资料,弄懂其用法,要联系问题进行具体介绍;上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能正常运行;完成课程设计报告。

2.2程序的功能:贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。

2.3课程设计的思想:程序关键在于表示蛇的图形及蛇的移动。

用一个小圆点来表示蛇的一节身体,身体每长一节,增加一个圆点,蛇头用四节来表示。

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

《软件工程导论》实验报告(推荐文档)

《软件工程导论》实验报告(推荐文档)

2011-2012(2)《软件工程导论》实验报告学院:计算机学院班级:软件工程114姓名:黄芳恺学号:119074258目录实验1:项目计划、分析和设计实验2;编码实验3:代码复查、编译实验4:项目测试总结软件工程导论实验一:项目计划、分析和设计[ 实验日期 ] 2012 年 4 月 20 日[ 实验目的 ]初步了解结构化分析、设计方法的原理、步骤以及各阶段的文档,练习撰写简要的需求文档、设计文档。

[ 实验内容 ]贪吃蛇程序:贪吃蛇游戏是一个深受人们喜爱的游戏,一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物则表示食物被蛇吃掉,这时蛇的身体长一节,同时计1分,接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体,游戏结束。

根据编写贪吃蛇的游戏规则,我们利用c语言来进行编辑具体步骤,从而使游戏能够运行,根据编写贪吃蛇程序,掌握软件工程思想及要领,进一步巩固编程思想和掌握画图函数底层,依据项目可行性研究的结果,进行需求分析和设计,编写简要的需求规格说明书,绘制程序流程图。

[ 实验原理和步骤]当前的建模方法主要有传统的结构化分析、设计方法(SA/D)和面向对象分析、设计方法(OOA/D)两种。

分析阶段:结构化分析(SA)是一种建模技术,它通过一定方法帮助开发人员定义系统需要什么功能,系统需要存储和使用哪些数据,以及为完成这些功能,系统需要什么样的输入和输出以及如何把这些功能结合在一起来完成任务。

设计阶段:分总体设计和详细设计两阶段。

总体设计阶段的任务主要是确定系统由哪些模块组成,以及这些模块之间的相互关系;详细设计阶段的任务主要是设计每个模块的处理过程。

常用的结构化设计(SD)方法有面向数据流分析(DFA)的设计方法和面向数据的设计方法。

DFA设计技术实施的通用步骤:(1)复查并精化DFD;(2)确定DFD类型;(3)把DFD映射到系统模块结构,设计出模块结构的上层;(4)基于DFD逐步分解高层模块,设计出下层模块〈初步结构〉;(5)根据模块独立性原理,精化模块结构,得到更为合理的软件结构;(6)模块接口描述;(7)修改和补充数据词典;(8)制定测试计划。

嵌入式课设实验报告——贪吃蛇

嵌入式课设实验报告——贪吃蛇

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

JAVA开放性实验报告贪吃蛇

JAVA开放性实验报告贪吃蛇

JAVA开放性实验报告贪吃蛇实验目的:本实验旨在利用Java语言实现一个经典的贪吃蛇游戏,通过实践提升对面向对象程序设计的理解和应用能力,加深对Java语言的熟练程度,并提高解决问题的能力和编程实践经验。

实验内容:1.设计游戏界面:通过Java中的Swing库实现游戏窗口的设计,包括游戏区域、游戏开始按钮、得分显示等。

2.实现游戏逻辑:设计贪吃蛇的移动规则,食物的生成和吃掉判定,碰撞检测等游戏逻辑。

同时实现游戏的主循环,控制游戏的进行。

3.实现键盘控制:通过监听键盘事件,实现玩家控制贪吃蛇的移动方向。

4.设计游戏机制:设置游戏的难度等级,增加贪吃蛇的移动速度、食物生成间隔等参数,使游戏更具挑战性。

5.设计游戏结束逻辑:当贪吃蛇头碰到墙壁或自身时,游戏结束并显示得分。

玩家可以选择重新开始游戏或退出。

实验步骤:1.设计游戏界面:创建一个JFrame窗口,在窗口中添加游戏画布,开始按钮和得分显示等组件。

2.实现游戏逻辑:设计Snake类和Food类,表示贪吃蛇和食物。

通过ArrayList存储贪吃蛇的身体节点,并实现移动、吃食物等方法。

3.实现键盘控制:通过实现KeyListener接口来监听键盘事件,根据按键控制贪吃蛇的移动方向。

4.设计游戏机制:设置贪吃蛇的移动速度、食物生成间隔等参数,根据难度级别逐步增加,使游戏更具挑战性。

5.设计游戏结束逻辑:当贪吃蛇头碰到墙壁或自身时,游戏结束并显示得分。

提供重新开始游戏和退出游戏的选项。

实验结果:经过实验设计和编码实现,成功完成了Java贪吃蛇游戏的开发。

游戏界面美观,操作流畅,游戏逻辑完整,玩家能够通过控制贪吃蛇吃到食物并获得得分。

随着游戏的进行,贪吃蛇会不断变长,玩家需要避开障碍,控制蛇头移动,体验游戏的乐趣和挑战。

实验总结:通过本次实验,我深入学习了Java语言的面向对象编程思想和应用,掌握了Swing库的使用方法,加深了对Java语言的理解和应用。

贪吃蛇实习报告范文

贪吃蛇实习报告范文

一、实习背景随着计算机技术的不断发展,编程技能已经成为现代社会人才必备的能力之一。

为了提高自己的编程能力,我在某科技公司进行了为期一个月的贪吃蛇游戏开发实习。

通过这次实习,我对贪吃蛇游戏有了更深入的了解,并掌握了相关编程技能。

二、实习目的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语言编程技巧。

贪吃蛇实验报告论文

贪吃蛇实验报告论文
第三行代码设置重复播放
注意一下:为了防止编译时文件拷贝到其他文件盘的根目录下导致使用绝对位置而打不开文件,所以贴图和背景音乐都使用的是相对位置。
学生资源提供了一个
backmusic.wma的文件:
2.
将蛇身体转化为行列坐标,每个节点为20X20:
遍历输出蛇身体,默认为红色,蛇头居中加一个黄色的圆圈作为眼睛:
tail=(snake*)malloc(sizeof(snake));
tail->left=startCol*20;
tail->top=(startRow+i+1)*20;
tail->right=(startCol+1)*20;
tail->bottom=(startRow+i+2)*20;
p->next=tail;
for(i=0;i<ROWS;i++)
{
left=X;
right=left+20;
for(j=0;j<COLS;j++)
{
if(map[i][j]==1&&i==0)
{
putimage(left,top,&imgtop);
}
if(map[i][j]==1&&i==(ROWS-1))
{
putimage(left,top,&imgbottom);
inty=(p->top+p->bottom)/2;
setfillcolor(YELLOW);
fillcircle(x,y,2);
}
p=p->next;
}

C语言课程设计报告——贪吃蛇源程序

C语言课程设计报告——贪吃蛇源程序

C 语言课程设计(小游戏贪吃蛇得程序设计报告)设计人:班级:201年月号目录一:概述1:研究背景及意义2:设计得任务与需要知识点3:具体完成设计内容二:需求分析1:功能需求2:操作方法三:总体设计1:模块划分2:数据结构设计四:详细设计1:主空摸块设计2:绘制游戏界面3:游戏得具体过程4:游戏得结束处理5:显示排行榜信息模块五:程序得调试与测试1:动画与音乐同步2:蛇得运行3:终止程序六:结论七::结束语八:程序清单九:参考文献一. 概述本课程设计以软件工程方法为指导,采用了结构化,模块化得程序设计方法,以C语言技术为基础,使用TurboC++3、0为主要开发工具,对贪吃蛇游戏进行了需求分析,总体设计,详细设计,最终完成系统得实现与测试。

1、1 研究得背景及意义随着社会得发展,人们生活得节奏日益加快,越来越多得人加入了全球化得世界。

人们不再拘泥与一小块天地,加班,出差成了现代人不可避免得公务。

而此时一款可以随时随地娱乐得游戏成为了人们得需要。

此次课程设计完成得贪吃蛇小游戏,正就是为了满足上述需求而设计出来得。

贪吃蛇游戏虽小,却设计诸多得知识点。

通过开发贪吃蛇游戏系统,可使读者初步了解使用软件工程得与那个发,技术与工具开发软件得过程,进一步掌握结构化,模块化得程序设计方法与步骤,进一步掌握总体数据结构设计,模块划分方法,掌握局部变量,全局变量,结构体,共用体,数组,指针,文件等数据结构得使用方法,掌握图形,声音,随机数等多种库函数得使用方法,学习动画,音乐,窗口,菜单,键盘等多项编程技术,进一步学会软件调试,测试,组装等软件测试方法,为后续课程得学习与将来实际软件开发打下坚实得基础。

1、2设计得任务与需要得知识点1、2、1 课程设计主要完成得任务1)、通过编写“贪吃蛇游戏”程序,掌握结构化,模块块化程序设计得思想,培养解决实际问题得能力。

2)有同步播放动画,声音效果。

3)设计好数组元素与蛇,食物得对应关系。

贪吃蛇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. 熟悉C语言的基本语法和编程规范。

2. 掌握贪吃蛇游戏的设计与实现。

3. 培养团队协作和沟通能力。

三、实训内容1. 游戏设计:确定游戏规则、界面设计、功能模块划分等。

2. 代码编写:使用C语言实现游戏逻辑、图形界面、用户交互等。

3. 调试与优化:找出并修复代码中的错误,提高游戏性能。

四、实训过程1. 游戏设计在游戏设计阶段,我们首先明确了游戏规则:玩家通过键盘控制蛇的移动,吃掉食物使蛇变长,同时避免撞到墙壁和自己的身体。

游戏界面设计简洁,以蓝色背景和白色蛇身为主,食物用红色表示。

2. 代码编写在代码编写过程中,我们采用了模块化设计,将游戏分为以下几个模块:(1)主函数:初始化游戏环境,创建窗口,设置定时器等。

(2)蛇的移动:根据键盘输入控制蛇的移动方向,更新蛇的位置。

(3)食物的生成:随机生成食物位置,并在蛇吃到食物时更新食物位置。

(4)游戏结束判断:判断蛇是否撞到墙壁或自己的身体,如果发生碰撞则游戏结束。

(5)图形界面:使用图形库绘制蛇、食物和游戏界面。

3. 调试与优化在调试过程中,我们遇到了许多问题,如蛇的移动方向相反、食物生成位置不合理等。

通过查阅资料和团队合作,我们逐一解决了这些问题。

在优化方面,我们主要关注了以下两点:(1)提高游戏性能:通过减少不必要的计算和绘制,提高游戏运行速度。

(2)优化用户体验:调整游戏难度,使游戏更具挑战性。

五、实训收获1. 编程能力得到提升:通过编写贪吃蛇游戏,我熟悉了C语言的基本语法和编程规范,提高了自己的编程能力。

2. 编程思维得到锻炼:在游戏设计过程中,我学会了如何分析问题、设计算法和实现代码。

3. 团队协作能力得到提高:在实训过程中,我与团队成员共同解决问题,学会了沟通和协作。

Java程序设计报告《贪吃蛇》

Java程序设计报告《贪吃蛇》

《Java程序设计》课程设计报告题目:贪吃蛇游戏的设计与实现指导老师:沈泽刚专业:计算机科学与技术班级:10-3姓名:梁潇一、课程设计目的贪吃蛇游戏一款非常经典的手机游戏,因为它比较简单有趣,无论老少都比较适合。

目的是更好地了解和掌握java语言,并熟练的运用java语言来实现项目。

培养自主学习的能力。

本软件在设计方面本着方便、实用及娱乐性高的宗旨,在外界进行设计的过程中,始终坚持清晰明了,在性能方面能够实现效率高,不易出错等优点。

二、课程设计要求贪吃蛇游戏设计与实现,主要分为以下二个模块:游戏主界面模块、游戏控制模块。

三、课程设计报告内容(一) 系统设计1、程序概述本程序是一个利用Java应用软件制作的贪吃蛇小游戏。

在游戏过程中,用户通过点击小键盘区的方向键来控制蛇的运行方向;当蛇没有吃到食物且碰到墙壁或自己的身体时游戏结束。

本程序的另一个功能是在程序运行窗口的左上角显示,用户在游戏过程中所得的分数,不过缺点就是在退处程序后,下次打开程序时无法保存。

2、游戏的主界面设计游戏的主界面是进入游戏后,能够给玩家第一感官的部分,主要包括游戏图形区域界面、游戏的速度选择更新界面、游戏分数的显示更新界面、游戏开始按钮、暂停游戏按钮、退出游戏按钮以及游戏排行榜按钮。

3、游戏控制模块设计这个模块是游戏的中心环节,主要完成控制游戏的开始、暂停、退出等功能。

为了能够给玩家一个很好的游戏环境,这部分应该做到易懂、易操作。

(二)主界面设计游戏界面主框架主要包括游戏图形区域界面、游戏的开始按钮、暂停按钮、游戏的退出按钮、困难程度、积分排行、关于作者。

(三)代码设计import java.awt.Color;import java.awt.Container;import java.awt.Graphics;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.InputEvent;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import javax.swing.*;public class TanChiShe extends JFrame implements ActionListener, KeyListener,Runnable{private JMenuBar menuBar;private JMenu youXiMenu,nanDuMenu,fenShuMenu,guanYuMenu;private JMenuItem kaiShiYouXi,exitItem,zuoZheItem,fenShuItem;private JCheckBoxMenuItem cJianDan,cPuTong,cKunNan;private int length = 6;private Toolkit toolkit;private int i,x,y,z,objectX,objectY,object=0,growth=0,time;private int difficult=2;private int m[]=new int[50];private int n[]=new int[50];private Thread she = null;private int life=0;private int foods = 0;private int fenshu=0;public void run() //运行{time=500;for(i=0;i<=length-1;i++){m[i]=90-i*10;n[i]=60;}x=m[0];y=n[0];z=4;while(she!=null){check();try{she.sleep(time);}catch(Exception ee){System.out.println(z+"");}}}public TanChiShe(){//***************创建新对象**************setVisible(true);menuBar = new JMenuBar();Container con=getContentPane();toolkit=getToolkit();//**************游戏菜单对象*****************youXiMenu = new JMenu("游戏");kaiShiYouXi = new JMenuItem("开始游戏");exitItem = new JMenuItem("退出游戏");//***************困难程度对象****************nanDuMenu = new JMenu("困难程度");cJianDan = new JCheckBoxMenuItem("简单");cPuTong = new JCheckBoxMenuItem("普通");cKunNan = new JCheckBoxMenuItem("困难");//*****************分数菜单对象****************fenShuMenu = new JMenu("积分排行");fenShuItem = new JMenuItem("最高记录");//****************关于对象*********************guanYuMenu = new JMenu("关于");zuoZheItem = new JMenuItem("关于作者");//***************设置关于菜单*******************guanYuMenu.add(zuoZheItem);//****************设置困难程度菜单**************nanDuMenu.add(cJianDan);nanDuMenu.add(cPuTong);nanDuMenu.add(cKunNan);//******************设置分数菜单***************fenShuMenu.add(fenShuItem);//*****************设置游戏菜单****************youXiMenu.add(kaiShiYouXi);youXiMenu.add(exitItem);//******************设置主菜单********************menuBar.add(youXiMenu);menuBar.add(nanDuMenu);menuBar.add(fenShuMenu);menuBar.add(guanYuMenu);//*********************监听注册*****************zuoZheItem.addActionListener(this);kaiShiYouXi.addActionListener(this);exitItem.addActionListener(this);addKeyListener(this);fenShuItem.addActionListener(this);//*********************加快捷键********************KeyStroke keyOpen = KeyStroke.getKeyStroke('O',InputEvent.CTRL_DOWN_MASK);kaiShiYouXi.setAccelerator(keyOpen);KeyStroke keyExit = KeyStroke.getKeyStroke('X',InputEvent.CTRL_DOWN_MASK); exitItem.setAccelerator(keyExit);//*****************设置框架**********************setJMenuBar(menuBar);setTitle("贪吃蛇");setResizable(false);setBounds(300,200,400,400);validate();setDefaultCloseOperation(EXIT_ON_CLOSE);}public static void main(String args[]){new TanChiShe();}//******************菜单监听******************************public void actionPerformed(ActionEvent e){if(e.getSource()==kaiShiYouXi){length = 6;life = 0;foods = 0;if(she==null){she=new Thread(this);she.start();}else if(she!=null){she=null;she= new Thread(this);she.start();}}if(e.getSource()==exitItem){System.exit(0);}if(e.getSource()==zuoZheItem){JOptionPane.showMessageDialog(this, "梁潇"+"\n\n");}if(e.getSource()==fenShuItem){JOptionPane.showMessageDialog(this,"最高记录为"+fenshu+""); }}//**************检查一下******************************* public void check(){isDead();if(she!=null){if(growth==0){reform();}else{upgrowth();}if(x==objectX&&y==objectY){object=0;growth=1;toolkit.beep();}//****************产生食物坐标**********************if(object==0){object=1;objectX=(int)Math.floor(Math.random()*39)*10;objectY=(int)Math.floor(Math.random()*29)*10+50;}this.repaint();}}void isDead(){if(z==4){x=x+10;}else if(z==3){x=x-10;}else if(z==2){y=y+10;}else if(z==1){y=y-10;}if(x<0||x>390||y<50||y>390) {she=null;}for(i=1;i<length;i++){if(m[i]==x&&n[i]==y){she=null;}}}public void upgrowth(){if(length<50){length++;}growth--;time=time-10;reform();life+=100;if(fenshu<life){fenshu = life;}foods++;}public void reform(){for(i=length-1;i>0;i--){m[i]=m[i-1];n[i]=n[i-1];if(z==4){m[0]=m[0]+10;}if(z==3){m[0]=m[0]-10;}if(z==2){n[0]=n[0]+10;}if(z==1){n[0]=n[0]-10;}}public void keyPressed(KeyEvent e){if(she!=null){if(e.getKeyCode()==KeyEvent.VK_UP){if(z!=2){z=1;check();}}else if(e.getKeyCode()==KeyEvent.VK_DOWN) {if(z!=1){z=2;check();}}else if(e.getKeyCode()==KeyEvent.VK_LEFT){if(z!=4){z=3;check();}else if(e.getKeyCode()==KeyEvent.VK_RIGHT){if(z!=3){z=4;check();}}}}public void keyReleased(KeyEvent e){// TODO自动生成方法存根}public void keyTyped(KeyEvent e){// TODO自动生成方法存根}public void paint(Graphics g){//*******************画图********************** g.setColor(Color.DARK_GRAY);g.fillRect(0,50,400,400);g.setColor(Color.pink);for(i=0;i<=length-1;i++){g.fillRect(m[i],n[i],10,10);}g.setColor(Color.green);g.fillRect(objectX,objectY,10,10);g.setColor(Color.white);g.drawString("当前分数"+this.life,6,60);g.drawString("当前已吃食物数"+this.foods,6,72);}}(四)测试(五)使用说明在游戏过程中,用户通过点击小键盘区的方向键来控制蛇的运行方向;当蛇没有吃到食物且碰到墙壁或自己的身体时游戏结束。

贪吃蛇代码实验报告

贪吃蛇代码实验报告

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

Java程序设计报告《贪吃蛇》

Java程序设计报告《贪吃蛇》

《Java程序设计》课程设计报告题目:贪吃蛇游戏的设计与实现指导老师:泽刚专业:计算机科学与技术班级: 10-3 姓名:梁潇一、课程设计目的贪吃蛇游戏一款非常经典的手机游戏,因为它比较简单有趣,无论老少都比较适合。

目的是更好地了解和掌握java语言,并熟练的运用java语言来实现项目。

培养自主学习的能力。

本软件在设计方面本着方便、实用及娱乐性高的宗旨,在外界进行设计的过程中,始终坚持清晰明了,在性能方面能够实现效率高,不易出错等优点。

二、课程设计要求贪吃蛇游戏设计与实现,主要分为以下二个模块:游戏主界面模块、游戏控制模块。

三、课程设计报告容(一) 系统设计1、程序概述本程序是一个利用Java应用软件制作的贪吃蛇小游戏。

在游戏过程中,用户通过点击小键盘区的方向键来控制蛇的运行方向;当蛇没有吃到食物且碰到墙壁或自己的身体时游戏结束。

本程序的另一个功能是在程序运行窗口的左上角显示,用户在游戏过程中所得的分数,不过缺点就是在退处程序后,下次打开程序时无法保存。

2、游戏的主界面设计游戏的主界面是进入游戏后,能够给玩家第一感官的部分,主要包括游戏图形区域界面、游戏的速度选择更新界面、游戏分数的显示更新界面、游戏开始按钮、暂停游戏按钮、退出游戏按钮以及游戏排行榜按钮。

3、游戏控制模块设计这个模块是游戏的中心环节,主要完成控制游戏的开始、暂停、退出等功能。

为了能够给玩家一个很好的游戏环境,这部分应该做到易懂、易操作。

(二)主界面设计游戏界面主框架主要包括游戏图形区域界面、游戏的开始按钮、暂停按钮、游戏的退出按钮、困难程度、积分排行、关于作者。

(三)代码设计import java.awt.Color;import java.awt.Container;import java.awt.Graphics;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.InputEvent;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import javax.swing.*;public class TanChiShe extends JFrame implements ActionListener, KeyListener,Runnable{private JMenuBar menuBar;private JMenu youXiMenu,nanDuMenu,fenShuMenu,guanYuMenu;private JMenuItem kaiShiYouXi,exitItem,zuoZheItem,fenShuItem;private JCheckBoxMenuItem cJianDan,cPuTong,cKunNan;private int length = 6;private Toolkit toolkit;private int i,x,y,z,objectX,objectY,object=0,growth=0,time;private int difficult=2;private int m[]=new int[50];private int n[]=new int[50];private Thread she = null;private int life=0;private int foods = 0;private int fenshu=0;public void run() //运行{time=500;for(i=0;i<=length-1;i++){m[i]=90-i*10;n[i]=60;}x=m[0];y=n[0];z=4;while(she!=null){check();try{she.sleep(time);}catch(Exception ee){System.out.println(z+""); }}}public TanChiShe(){//***************创建新对象**************setVisible(true);menuBar = new JMenuBar();Container con=getContentPane();toolkit=getToolkit();//**************游戏菜单对象*****************youXiMenu = new JMenu("游戏");kaiShiYouXi = new JMenuItem("开始游戏");exitItem = new JMenuItem("退出游戏");//***************困难程度对象****************nanDuMenu = new JMenu("困难程度");cJianDan = new JCheckBoxMenuItem("简单");cPuTong = new JCheckBoxMenuItem("普通");cKunNan = new JCheckBoxMenuItem("困难");//*****************分数菜单对象**************** fenShuMenu = new JMenu("积分排行");fenShuItem = new JMenuItem("最高记录");//****************关于对象********************* guanYuMenu = new JMenu("关于");zuoZheItem = new JMenuItem("关于作者");//***************设置关于菜单******************* guanYuMenu.add(zuoZheItem);//****************设置困难程度菜单**************nanDuMenu.add(cJianDan);nanDuMenu.add(cPuTong);nanDuMenu.add(cKunNan);//******************设置分数菜单***************fenShuMenu.add(fenShuItem);//*****************设置游戏菜单****************youXiMenu.add(kaiShiYouXi);youXiMenu.add(exitItem);//******************设置主菜单******************** menuBar.add(youXiMenu);menuBar.add(nanDuMenu);menuBar.add(fenShuMenu);menuBar.add(guanYuMenu);//*********************监听注册*****************zuoZheItem.addActionListener(this);kaiShiYouXi.addActionListener(this);exitItem.addActionListener(this);addKeyListener(this);fenShuItem.addActionListener(this);//*********************加快捷键********************KeyStroke keyOpen = KeyStroke.getKeyStroke('O',InputEvent.CTRL_DOWN_MASK);kaiShiYouXi.setAccelerator(keyOpen);KeyStroke keyExit = KeyStroke.getKeyStroke('X',InputEvent.CTRL_DOWN_MASK);exitItem.setAccelerator(keyExit);//*****************设置框架**********************setJMenuBar(menuBar);setTitle("贪吃蛇");setResizable(false);setBounds(300,200,400,400);validate();setDefaultCloseOperation(EXIT_ON_CLOSE);}public static void main(String args[]){new TanChiShe();}//******************菜单监听******************************public void actionPerformed(ActionEvent e){if(e.getSource()==kaiShiYouXi) {length = 6;life = 0;foods = 0;if(she==null){she=new Thread(this);she.start();}else if(she!=null){she=null;she= new Thread(this);she.start();}}if(e.getSource()==exitItem){System.exit(0);}if(e.getSource()==zuoZheItem){JOptionPane.showMessageDialog(this, "梁潇"+"\n\n");}if(e.getSource()==fenShuItem){JOptionPane.showMessageDialog(this,"最高记录为"+fenshu+""); }}//**************检查一下*******************************public void check(){isDead();if(she!=null){if(growth==0){reform();}else{upgrowth();}if(x==objectX&&y==objectY){object=0;growth=1;toolkit.beep();}//****************产生食物坐标********************** if(object==0){object=1;objectX=(int)Math.floor(Math.random()*39)*10;objectY=(int)Math.floor(Math.random()*29)*10+50;}this.repaint();}}void isDead(){if(z==4){x=x+10;else if(z==3){x=x-10;}else if(z==2){y=y+10;}else if(z==1){y=y-10;}if(x<0||x>390||y<50||y>390) {she=null;}for(i=1;i<length;i++){if(m[i]==x&&n[i]==y){she=null;}}public void upgrowth() {if(length<50){length++;}growth--;time=time-10;reform();life+=100;if(fenshu<life){fenshu = life;}foods++;}public void reform() {for(i=length-1;i>0;i--) {m[i]=m[i-1];n[i]=n[i-1];}if(z==4){m[0]=m[0]+10;}if(z==3){m[0]=m[0]-10;}if(z==2){n[0]=n[0]+10;}if(z==1){n[0]=n[0]-10;}}public void keyPressed(KeyEvent e){if(she!=null){if(e.getKeyCode()==KeyEvent.VK_UP){if(z!=2){z=1;check();}}else if(e.getKeyCode()==KeyEvent.VK_DOWN) {if(z!=1){z=2;check();}}else if(e.getKeyCode()==KeyEvent.VK_LEFT) {if(z!=4){z=3;check();}}else if(e.getKeyCode()==KeyEvent.VK_RIGHT) {if(z!=3){z=4;check();}}}}public void keyReleased(KeyEvent e){// TODO自动生成方法存根}public void keyTyped(KeyEvent e){// TODO自动生成方法存根}public void paint(Graphics g){//*******************画图********************** g.setColor(Color.DARK_GRAY);g.fillRect(0,50,400,400);g.setColor(Color.pink);for(i=0;i<=length-1;i++){g.fillRect(m[i],n[i],10,10);}g.setColor(Color.green);g.fillRect(objectX,objectY,10,10);g.setColor(Color.white);g.drawString("当前分数"+this.life,6,60);g.drawString("当前已吃食物数"+this.foods,6,72); }}(四)测试(五)使用说明在游戏过程中,用户通过点击小键盘区的方向键来控制蛇的运行方向;当蛇没有吃到食物且碰到墙壁或自己的身体时游戏结束。

贪吃蛇实验报告实验心得(3篇)

贪吃蛇实验报告实验心得(3篇)

第1篇一、实验背景随着科技的不断发展,计算机编程已成为现代教育的重要组成部分。

贪吃蛇游戏作为一款经典的编程学习项目,不仅能够帮助学生掌握编程基础,还能提高学生的逻辑思维能力和编程实践能力。

本次实验,我选择了使用C语言编写贪吃蛇游戏,通过实验过程,我收获颇丰。

二、实验目的1. 熟悉C语言编程环境,掌握基本的语法和编程技巧。

2. 学习并应用数组和结构体等数据结构,提高编程能力。

3. 理解并实现贪吃蛇游戏的算法,提高逻辑思维能力。

4. 掌握游戏开发的基本流程,提高编程实践能力。

三、实验过程1. 需求分析:在实验开始前,我首先对贪吃蛇游戏进行了需求分析,明确了游戏的基本规则和功能。

游戏规则包括:蛇的移动、食物的生成、蛇的吃食、蛇的生长、游戏结束等。

2. 设计思路:根据需求分析,我制定了以下设计思路:- 使用二维数组表示游戏界面,数组中的每个元素代表一个格子,蛇、食物、墙壁等都在数组中用特定的值表示。

- 使用结构体表示蛇的各个部分,包括蛇头的位置、方向、长度等。

- 通过键盘输入控制蛇的移动方向。

- 使用循环和条件语句实现蛇的移动、食物的生成、蛇的吃食、蛇的生长等功能。

- 判断游戏结束的条件,如蛇头撞墙、撞到自己等。

3. 编程实现:在确定了设计思路后,我开始编写代码。

首先,我定义了二维数组表示游戏界面,并初始化蛇和食物的位置。

然后,编写了蛇的移动、食物的生成、蛇的吃食、蛇的生长等功能。

最后,编写了游戏结束的判断条件。

4. 调试与优化:在编程过程中,我遇到了一些问题,如数组越界、蛇头移动方向错误等。

通过查阅资料和调试,我逐步解决了这些问题。

在实验过程中,我还对代码进行了优化,提高了程序的运行效率。

四、实验心得1. 编程基础的重要性:通过本次实验,我深刻体会到编程基础的重要性。

只有掌握了基本的语法和编程技巧,才能在编程过程中游刃有余。

2. 逻辑思维能力:在编写贪吃蛇游戏的过程中,我需要不断思考如何实现游戏的各个功能,这锻炼了我的逻辑思维能力。

Java 贪吃蛇 课程设计报告

Java 贪吃蛇 课程设计报告
2.按下1键进入单人模式
单人模式界面的构图与双人模式与电脑对战的构图一样,分为3大块,左边的是关卡列表,右边上面的是地图预览,右边下面的是地图信息。在关卡列表中可以按上下方向键进行关卡选择,然后按下enter键进入游戏或者点击界面的按钮“开始游戏”进入游戏界面。
3.进入游戏界面
此界面中,分为两块,最上面一层黄色的是分数面板,下面一层是地图面板。如图所示,此时操纵的蛇就快吃到食物。
2.行走时不会撞墙,不撞移动障碍物,不咬自己
3.当新出食物更近选择这个,放弃原本想去吃的
4.没食物的时候攻击玩家
5.避免自己被对方攻击
九、比赛结果的面板
1.根据模式,再比较分得出结果
2.用户输入姓名,输出到排行榜文件,保存姓名、分数、时间
十、障碍物
1.普通障碍物墙
2.移动障碍物
3.移动障碍物可以一直往复一个方向来回,像角色扮演游戏中怪物往返一个范围巡逻
3.有毒食物
4.不出现障碍物中
5.被吃了可以再生成
六、关卡
1.关卡从地图文件读取
2.达到一定分数过关
3.过关时线程从左到右刷新
七、分数面板
1.当玩家操纵的蛇吃到了食物,进行加分
2.加分是先以粒子效果从中心往周围散发许多黑色小点,像是原来分数的数字炸裂开来一样。增加美感
八、电脑蛇AI
1.电脑自动行走,寻找最近食物并吃食
我将BFS算法带入游戏中,使用在电脑蛇自动行动寻找食物,原理就是根据蛇位置不断搜索地图中存在食物的坐标,然后保存在List中再读取路线从而达到寻路AI功能。
2.3Eclipse
Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

贪吃蛇游戏实验报告

贪吃蛇游戏实验报告
1.2 用户界面 [关键游戏界面,并且要说明该界面完成的功能,不用把所有界面都显示出来] 游戏开始界面:选择游戏的难度
游戏过程界面:进行游戏
2008 年 8 月 22 日 2
2008 年计算机实习报告
游戏结束界面:选择是否重新游戏
1.3 使用方法 [比如:可以是什么键控制游戏?是否可以划分那难度?游戏是否可配置,界面风格是 否可选等等] 用方向键控制蛇的移动,输入 1,2,3,选择难度,游戏中按除方向键其他键暂停,结束 界面 y 重新游戏,n 退出游戏
一个元素取代前一个位置,蛇头向前移动一,如有按键,则跳出内循环,根据按键寻则蛇的 运动
伪代码: while 循环 检测是否有按键,若有,进入相应循环 休眠 原来蛇位置变为空白 蛇身数组后一个元素取代前一个元素位置 根据按键改变蛇头位置 显示蛇身 若有按键,跳出内循环
算法 2:水果的产生 使用结构表示水果,当水果被蛇吃掉后,随机产生一个水果 伪代码:if 蛇头位置与水果位置重合
While 循环 随机产生水果的坐标 If 坐标在框图内 { If 水果坐标不与蛇每一个坐标重合 跳出循环 } 算法 3:判断蛇的死亡 While a=0 For 取遍蛇身每一个元素 { If 蛇头出了框图或蛇头与蛇身重合 a=1 }(a=1 则循环停止) 2.3 程序设计的难点和关键点 :1 随机产生水果的位置,要保证水果在框图内且水果与蛇身不重和, 2,判断蛇的死亡 3,控制蛇的颜色变换 4,对于分数的储存和导入 2.4 调试的方法
2008 年 8 月 22 日 3
2008 年计算机实习报告
二.程序设计说明
2.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类用于描述蛇的一节。

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

《软件工程导论》实验报告学院:班级:姓名:学号:[ 实验目的 ]初步了解结构化分析、设计方法的原理、步骤以及各阶段的文档,练习撰写简要的需求文档、设计文档。

[ 实验内容 ]贪吃蛇程序:贪吃蛇游戏是一个深受人们喜爱的游戏,一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物则表示食物被蛇吃掉,这时蛇的身体长一节,同时计1分,接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体,游戏结束。

根据编写贪吃蛇的游戏规则,我们利用c语言来进行编辑具体步骤,从而使游戏能够运行,根据编写贪吃蛇程序,掌握软件工程思想及要领,进一步巩固编程思想和掌握画图函数底层,依据项目可行性研究的结果,进行需求分析和设计,编写简要的需求规格说明书,绘制程序流程图。

[ 实验原理和步骤]当前的建模方法主要有传统的结构化分析、设计方法(SA/D)和面向对象分析、设计方法(OOA/D)两种。

分析阶段:结构化分析(SA)是一种建模技术,它通过一定方法帮助开发人员定义系统需要什么功能,系统需要存储和使用哪些数据,以及为完成这些功能,系统需要什么样的输入和输出以及如何把这些功能结合在一起来完成任务。

设计阶段:分总体设计和详细设计两阶段。

总体设计阶段的任务主要是确定系统由哪些模块组成,以及这些模块之间的相互关系;详细设计阶段的任务主要是设计每个模块的处理过程。

常用的结构化设计(SD)方法有面向数据流分析(DFA)的设计方法和面向数据的设计方法。

DFA设计技术实施的通用步骤:(1)复查并精化DFD;(2)确定DFD类型;(3)把DFD映射到系统模块结构,设计出模块结构的上层;(4)基于DFD逐步分解高层模块,设计出下层模块〈初步结构〉;(5)根据模块独立性原理,精化模块结构,得到更为合理的软件结构;(6)模块接口描述;(7)修改和补充数据词典;(8)制定测试计划。

详细设计阶段的任务主要是确定每个模块的处理过程,包括(1)确定每个模块的算法。

(2)确定每一个模块的数据组织。

(3)为每个模块设计一组测试用例。

(4)编写详细设计说明书。

详细设计阶段采用的方法是结构化程序设计(SP),与SA,SD方法衔接。

目标是给出可以直接用以编码的程序逻辑结构,强调清晰第一。

设计思路:这个程序的关键点是表示蛇的图形以及蛇的移动。

用一个小矩形块表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用两节表示。

移动时必须从蛇头开始,所以蛇不能向相反方向移动,也就是蛇尾不能改作蛇头。

如果不按任何键,蛇自行在当前方向上前移,当游戏者按了有效的方向键后,蛇头朝着指定的方向移动,一步移动一节身体,所以当按了有效的方向键后,先确定蛇头的位置,然后蛇身体随着蛇头移动,图形的实现是从蛇头的新位置开始画出蛇,这时,由于没有清屏的原因,原来蛇的位置和新蛇的位置差一个单位,所以看起来蛇会多一节身体,所以将蛇的最后一节用背景色覆盖。

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

为了便于理解,定义了两个结构体:食物和蛇。

[ 需求规格说明书 ]主要功能陈述:这是一款适合各年龄阶层小游戏,它可以使人们休息时的一种放松方式也可以是孩子们的娱乐游戏;另外对于一些对于有一定的C 语言基础的,可以一边在玩的时候,感受在其中的编程思想并且自己进行尝试。

IPO 图:数据字典:先进行蛇与食物的定义,再制定游戏中蛇的光标处理方法,初始化蛇的位置坐标,接着创建整个游戏的活动界面从而确定游戏的整体的框架。

初始化游戏的计分系统,设置初始化分数,再增加分数统计系统确立分数处理的方法。

接着编写游戏的规则,蛇的走动方法与吃到食物增长的处理以及游戏中碰壁或碰到自身的处理,最后进行对游戏失败的处理以及游戏的清屏处理。

输入 处理 输出1判断密码正确2判断操作正确性3进行操作执行判断4分数统计 5游戏界面构建 6游戏刷屏输入密码 是否进入游戏游戏玩法操作游戏中执行相应的操作游戏系统操作 分数状况 界面相应[ 详细设计说明书]模块的文字描述:main()主函数:这是程序的大体流程,首先定义使用到的常数、全局变量及函数原型说明,然后初始化图形系统,调用函数画出开始画面,调用函数,即玩游戏的具体过程与分数的增加,游戏结束后调用关闭图形系统清理屏幕,结束程序画界面函数:设计游戏的活动界面,就是一个密封的围墙加上一个数据处理界面,利用printf 来构建游戏的大体框架与各个部分的具体内容游戏具体过程函数:这一部分是游戏的重要组成,调用这个函数是游戏的主要部分,重点是一次次反复表示蛇与食物的新位置并进行对前一次的反复清屏。

采用的方法是每次移动的时候从最后一节开始到倒数第二节,将前一节的坐标赋值给后一节的坐标,移动后只要把最后一节用背景色去除即可。

蛇的方向通过w a s d键进行控制数组的加减。

如果没有食物,随机出现食物;如果有食物,则显示食物,蛇移动身体,根据蛇的方向改变坐标值,并判断蛇是否撞到了墙或自己吃了自己,如果出现这两种情况之一,则蛇死,调用游戏结束函数结束本次游戏或重新开始。

如果蛇吃到了食物,蛇身体长一节,数组元素增加一个,身体节数、分数都进行相应的改变。

如果有按键,则识别键值。

如果按键为Esc键则结束游戏,程序运行结束;如果所按键为方向键,则根据该键改变代表蛇方向的变量的值,要考虑相反方向键无效。

游戏结束函数:游戏结束,显示游戏结束信息。

HIPO图:游戏控制模块开始游戏暂停游戏继续游戏退出游戏输入密码[详细设计说明书]:[注意事项]1.程序流程图应符合结构化思想:单入口、单出口。

程序开始初始化输入密码判断开始游戏判断是否出现死亡 否进行玩家决定是否继续游戏退出游戏(调用结束程序)否是是贪吃蛇流程图编码的原理包括几方面,首先编码风格要强调“清晰易读”,不能过分个性化或过多的插入个人技巧,要做到自己编的程序对于那些会编程的人都能够轻易理解并能够在不足的地方进行修改。

编码过程中要注意变量或函数的名字要赋予相应的意义,做到每个代码都有自己存在的意义与作用。

编码中的表达式和语句要一目了然,排版风格、循环语句风格要保持一致,使人在阅读你的程序是能够很快理解你要表达的意思与目的。

在函数宏的定义,常数的定义,注释方面要全面。

注释包括序言性注释、函数模块注释和程序语句注释。

[具体步骤]首先制定相应的程序框架,然后根据实验一种相应的模块进行相应的填充。

当整体程序基本成型后,再通过反复测试,找出其中的不足,进行不断地完善。

然后对程序中相应的模块与需要理解的地方进行合理的简洁的注释,使他人能够跟快的理解。

对每个函数前写模块注释,重要语句写功能性注释,变量或函数的名字要有意义,排版,从而使程序变得美观易懂。

[ 程序源代码]#include <stdio.h>#include <windows.h>#include <time.h>#include <conio.h>#include <stdlib.h>#include <string.h>int snake_len=1;//蛇的长度int snake_loc[50][2]={31,12};//整条蛇的位置,最长为50int snake_head[2]={31,12};//蛇头位置,初始值为11,12;int food[2];//食物位置char snake_direction='s';int delay=200; //蛇每delay个时间走一步int eat_flag=0;//1表示吃了食物,0表示未吃int liv_stat=0;//1表示死了,游戏该结束了;0表示还活着void gotoxy(int x, int y)//定位光标,x为行坐标,y为列坐标{COORD pos = {x,y};HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hOut, pos);}void hidden()//隐藏光标{HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_CURSOR_INFO cci;GetConsoleCursorInfo(hOut,&cci);cci.bVisible=0;//赋1为显示,赋0为隐藏SetConsoleCursorInfo(hOut,&cci);}void init()//初始化{int i;snake_len=1;//蛇的长度snake_loc[0][0]=31;//整条蛇的位置snake_loc[0][1]=12;snake_head[0]=31;//蛇头位置,初始值为11,12;snake_head[1]=12;snake_direction='s';delay=200;eat_flag=0;liv_stat=0;for(i=1;i<50;i++){snake_loc[i][0]=0;//整条蛇的位置snake_loc[i][1]=0;}}void create_window()//创建窗口{gotoxy(0,0);printf("********************************************************************* ***********");printf("* * *");printf("* * *");printf("* * 分数:1 *");printf("* * 按键说明:*");printf("* * 上:w *");printf("* * 下:s *");printf("* *左:a *");printf("* * 右:d *");printf("* * 暂停:空格*");printf("* * 退出:Esc键*");printf("* * *");printf("* * *");printf("* * *");printf("* * *");printf("* * *");printf("* * *");printf("* * *");printf("* * *");printf("* * *");printf("* * *");printf("* * *");printf("* * *");printf("********************************************************************* ***********");}void update_score()//更新分数{gotoxy(73,3);printf("%2d",snake_len);}void create_food()//产生食物的位置{time_t t;srand(time(&t));while(1){food[0]=rand()%62+1;//生成1~62之间的随机数,其中random函数生成0~77之间的随机数food[1]=rand()%22+1;//生成1~22之间的随机数,其中random函数生成0~17之间的随机数if(food[0]!=snake_head[0]&&food[1]!=snake_head[1])break;}gotoxy(food[0],food[1]);printf("*");}void direction(){char keyhit=0,i;while(kbhit()!=0)keyhit=getch();if( ((keyhit=='a') || (keyhit=='d') || (keyhit=='w') || (keyhit=='s')) && (abs(snake_direction/16-keyhit/16)==1) )snake_direction=keyhit;else if(keyhit==' '){gotoxy(30,24);system("pause");gotoxy(30,24);for(i=0;i<19;i++)printf(" ");}else if(keyhit==27)exit(0);}void state()//判定蛇死没死{if(snake_head[0]<1||snake_head[0]>62||snake_head[1]<1||snake_head[1]>22)liv_stat=1; }void eat()//判定蛇吃没吃上,并对根据方向对蛇头位置进行更新{switch(snake_direction){case 'w': snake_head[1]--;break;case 's': snake_head[1]++;break;case 'a': snake_head[0]--;break;case 'd': snake_head[0]++;break;}if((food[0]==snake_head[0]) && (food[1]==snake_head[1]) ){eat_flag=1;switch(snake_direction){case 'w': snake_head[1]--;break;case 's': snake_head[1]++;break;case 'a': snake_head[0]--;break;case 'd': snake_head[0]++;break;}}}void show_snake()//更新蛇在屏幕中的位置{gotoxy(snake_head[0],snake_head[1]);printf("*");gotoxy(snake_loc[snake_len-1][0],snake_loc[snake_len-1][1]);printf(" ");}void update_maxtrix()//更新存储蛇位置的数组{int i;if(eat_flag!=1){for(i=snake_len-1;i>0;i--){snake_loc[i][0]=snake_loc[i-1][0];snake_loc[i][1]=snake_loc[i-1][1];}}else{snake_len++;if(snake_len>3 && delay>100)delay-=30;for(i=snake_len-1;i>1;i--){snake_loc[i][0]=snake_loc[i-2][0];snake_loc[i][1]=snake_loc[i-2][1];}snake_loc[1][0]=food[0];snake_loc[1][1]=food[1];eat_flag=0;create_food();update_score();}snake_loc[0][0]=snake_head[0];snake_loc[0][1]=snake_head[1];}void main(){int flag;long password=123456;int i=1;long pw;printf("请输入密码\n");scanf("%ld",&pw);if(password!=pw)while(1){i++;printf("密码错误\n请重新输入:");scanf("%ld",&pw);if(password==pw){printf("密码正确,欢迎使用\n");flag=1;break;}i f(i==3){printf("请稍后再试\n");flag=0;break;}}else{printf("密码正确,欢迎使用");f lag=1;LOOP:system("cls");init();create_window();hidden();create_food();while(1){int i;Sleep(delay);direction();eat();show_snake();update_maxtrix();state();if(liv_stat==1){for(i=1;i<snake_len;i++){gotoxy(snake_loc[i][0],snake_loc[i][1]);printf(" ");}gotoxy(food[0],food[1]);printf(" ");gotoxy(30,12);printf("Game over!\n");gotoxy(25,13);printf("继续请按y,退出请按n");while(1){i=getch();if(i=='y')goto LOOP;else if(i=='n')break;}break;}}}}[注意事项]1.模块的逻辑描述应该清晰第一、使用标准的、规范的控制结构、正确可靠[实验总结 ]通过对实验二的学习让我对程序的编写有了更深的理解也对编程的谨慎性有了更深层次的体会,即使在小的疏忽或错误都会影响整个实验的进行。

相关文档
最新文档