计算机实习报告(贪吃蛇游戏编程)
- 格式:doc
- 大小:86.50 KB
- 文档页数:13
一、实验目的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.2⽤户界⾯本图为游戏的主界⾯,其中外⾯的⼀圈紫⾊“■”为边界,边界内连成⼀串的“■”是蛇的⾝体,“●”形状的图标即为⾷物。
该界⾯⽤于玩家与计算机的交流,使玩家能够通过图形界⾯来控制蛇的⾏为,进⽽实现游戏过程。
1.3使⽤⽅法分别使⽤“↑↓←→”四个按键来实现对蛇的上下左右的控制,随着蛇的长度的增加,虽然蛇移动的速度没有变化,但是由于空间⼤⼩有限,⽽蛇的长度在逐渐增加,故使得游戏的难度组建增⼤。
⼆.程序设计说明2.1 总体设计框架int main(){ 播放声⾳定义数组记录蛇的横纵坐标定义变量记录蛇的长度定义变量记录⾷物⽬标的位置定义变量判定游戏是否结束init(snakeLocation_x,snakeLocation_y,snakeLength); createObject(object_x,object_y); //初始化while(select为真){ switch(choice){case KEY_UP:do {将蛇的末尾擦除后⼀节赋值给前⼀节判断游戏是否结束蛇头转向转弯后的位置}case KEY_DOWN:{将蛇的末尾擦除后⼀节赋值给前⼀节判断游戏是否结束蛇头转向转弯后的位置}case KEY_RIGHT:{将蛇的末尾擦除后⼀节赋值给前⼀节判断游戏是否结束蛇头转向转弯后的位置}case KEY_LEFT:{将蛇的末尾擦除后⼀节赋值给前⼀节判断游戏是否结束蛇头转向转弯后的位置}case KEY_ESC :程序将会停⽌}}}2.2 关键算法描述算法1:voidinit(int* snakeLocation_x,int* snakeLocation_y,int&snakeLength)该算法的功能是⽤来进⾏初始化实现,实现游戏边界的设计、贪吃蛇⾝体的初始化、贪吃蛇⾝体长度的初始化、在⽆输⼊的情况下蛇的移动。
第1篇一、引言随着计算机技术的飞速发展,编程教育逐渐成为我国教育体系中的重要组成部分。
贪食蛇游戏作为经典的编程案例,不仅能够激发学生的学习兴趣,还能锻炼他们的编程思维和逻辑能力。
本实训报告旨在通过贪食蛇游戏的设计与实现,总结实训过程中的收获与体会。
二、实训目标1. 掌握贪食蛇游戏的基本原理和设计方法。
2. 学会使用编程语言(如Python、Java等)实现贪食蛇游戏。
3. 提高编程能力和逻辑思维能力。
4. 培养团队协作和沟通能力。
三、实训内容1. 游戏设计贪食蛇游戏是一款经典的益智游戏,玩家通过控制蛇的移动方向,使蛇吃到食物,同时避免撞到墙壁和自己的身体。
游戏的主要元素包括:- 蛇:游戏的主角,由多个方格组成,每个方格代表蛇身体的一个部分。
- 食物:散落在游戏区域内的食物,蛇吃到食物后长度会增加。
- 游戏区域:蛇和食物移动的区域,通常是一个矩形区域。
- 分数:玩家吃到的食物数量,分数越高,游戏难度越大。
2. 游戏实现(1)选择编程语言本实训选择Python作为编程语言,因为它具有简洁易懂的语法和丰富的库支持,非常适合初学者。
(2)游戏框架搭建使用Python的Tkinter库搭建游戏窗口,定义游戏区域、蛇、食物等元素。
```pythonimport tkinter as tk游戏窗口window = ()window.title("贪食蛇游戏")游戏区域canvas = tk.Canvas(window, width=400, height=400, bg="white")canvas.pack()... 其他元素定义 ...游戏主循环def game_loop():... 游戏逻辑 ...启动游戏window.after(100, game_loop)window.mainloop()```(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语句来判断是否方向相反。
一、实训目的本次实训旨在通过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语言编程技巧。
第1篇一、项目背景随着计算机技术的发展和普及,编程教育越来越受到重视。
为了提高学生的编程能力和逻辑思维,许多高校和培训机构都开设了编程实践课程。
贪吃蛇游戏作为经典的编程学习项目,因其简单易懂、趣味性强而广受欢迎。
本报告旨在记录一次基于Python语言的贪吃蛇游戏软件实践过程,分析项目实现中的关键技术,并总结实践经验。
二、项目目标1. 掌握Python编程基础,熟悉Python图形界面库Tkinter的使用。
2. 理解贪吃蛇游戏的基本原理,包括游戏逻辑、数据结构、事件处理等。
3. 培养编程实践能力,提高问题解决能力。
4. 实现一个功能完善、界面友好的贪吃蛇游戏软件。
三、项目实施1. 需求分析贪吃蛇游戏的核心功能包括:- 游戏界面:显示蛇的移动轨迹、食物、分数等信息。
- 蛇的移动:通过键盘或鼠标控制蛇的上下左右移动。
- 食物生成:在游戏区域内随机生成食物。
- 分数统计:记录玩家得分,并在游戏结束后显示最高分。
- 游戏结束:当蛇碰到墙壁或自身时,游戏结束。
2. 技术选型- 编程语言:Python- 图形界面库:Tkinter- 数据结构:列表(用于存储蛇的身体节点)3. 项目实现(1)初始化游戏界面使用Tkinter库创建游戏窗口,设置窗口大小和标题。
在窗口内创建一个画布(Canvas),用于绘制蛇、食物和分数等信息。
```pythonimport tkinter as tk创建游戏窗口root = ()root.title("贪吃蛇游戏")canvas = tk.Canvas(root, width=400, height=400)canvas.pack()```(2)绘制蛇和食物定义蛇和食物的形状、颜色等属性,使用画布的create_rectangle()方法绘制。
```pythondef draw_snake(snake):for x, y in snake:canvas.create_rectangle(x, y, x+10, y+10, fill="green")def draw_food(food):canvas.create_oval(food[0], food[1], food[2], food[3], fill="red")```(3)控制蛇的移动使用键盘事件绑定函数bind(),监听键盘按键事件,根据按键方向更新蛇的移动方向。
计算机实习报告题目:贪吃蛇实验报告邮箱:yych2009@贪吃蛇实验报告一.功能说明1.1总体功能说明游戏分单人和双人两种。
单人游戏中有一条小蛇,不停地在屏幕上游走,“吃”掉界面上随即出现的果子,每吃一个果子,蛇的身体长度就增长一个单位。
当吃下的果子积累到一定程度时,蛇的运动速度会相应地增加,等级也提高了。
随着蛇的长度的增长,游戏界面会出现随机产生的毒刺“★”,毒刺固定不动。
只要蛇头碰到屏幕四周,或者碰到自己的身子,或者碰到毒刺,活着小蛇就立即毙命,游戏结束。
在双人游戏中,有两条蛇头分别为红色和黄色的小蛇,争吃果子,比比谁吃的果子多。
只要任意一条蛇的蛇头碰到屏幕四周,或者碰到自己的身子(碰到对方的身体没关系),或者任一条蛇碰到毒刺,游戏就会结束。
该游戏的特色是:一、添加了障碍“毒刺”,同时增加游戏等级这一项,让蛇的运动速度随分数的增加而适当增加,相比传统的贪吃蛇游戏增加了难度;二、增加双人游戏,使其具有竞赛性,让玩家在与他人竞赛中获得乐趣。
三、游戏的背景画面更为细腻。
1.2用户界面游戏开始和退出菜单选择单人、双人游戏的菜单1.3使用方法在单人游戏中,用小写的w、s、a、d四个按键分别控制蛇头上下左右四个方向的转向。
双人游戏中,w、s、a、d按键控制红蛇的方向,上下左右四个方向键控制黄蛇的方向。
二.程序设计说明2.1 总体设计框架[包括程序执行流程,模块划分等,需要有文字说明和框图表示]2.2 关键算法描述算法1:[算法输入参数和输出参数,算法功能,使用什么存储结构,在主程序中起什么作用,可以使用框图或伪代码表示。
算法1:蛇身运动函数算法1:if(snake.direct[0]==97){textout(handle,--(--snake.s_x[0]),snake.s_y[0],wColors+10,1,"◆");Sleep(speed);PRODUCT_FRUIT(snake.s_x,snake.s_y,&snake.length,&fruit.f_x,&fruit.f_ y,wColors,handle);MOVE(snake.s_x,snake.s_y,snake.length,wColors+2,handle);这是蛇的运动算法,以单人游戏中的向上运动为例。
当蛇的结构中的方向变量为97(即“w”)时,蛇头的纵坐标增加一个单位,并延时一定时间。
接着运行进行PRODUCT_FRUIT函数,该函数的作用是判断蛇头坐标是否与果子坐标重合,若是,则生成新的果子,且蛇的长度加一。
接着再运行move函数,该函数的作用为令蛇身最后一格处显示背景颜色,蛇身的其它部分随蛇头向前移动一位,整体上看就像是蛇向前移动了一格。
算法 2 :void RE_POISON_FRUIT(int pfoodx[],int pfoody[],int *foodx,int *foody,int *length,int snakex[],int snakey[]){while(1){srand((unsigned)time(NULL)*(unsigned)time(NULL));int poison_x=2*(rand()%28+2);int poison_y=rand()%37;if(poison_x>=4&&poison_y>=2){for(q=0;q<*length;q++){if((snakex[q]==poison_x)&&(snakey[q]==poison_y))break;}if(q==*length){for(i=0;i<100;i++){if(pfoodx[i]==*foodx&&pfoody[i]==*foody)break;}if(i==100){pfoodx[num]=poison_x;pfoody[num]=poison_y;num++;break;}}}}}随机产生毒果的函数。
产生两个随机数,分别是毒刺的横纵坐标,若该坐标不与蛇的身体的任一节重合,也不与当前显示的果子重合,则该坐标符合要求。
算法3:int DEAD(int snakex[],int snakey[],int len,int pfoodx[],int pfoody[],HANDLE handle){int temp;for(int i=2;i<=len;i++){if((snakex[0]<4||snakex[0]>60||snakey[0]<2||snakey[0]>40)||(snakex[0]==snak ex[i]&&snakey[0]==snakey[i])){temp=1;break;}}for( int b=0;b<=num;b++){if((snakex[0]==pfoodx[b])&&(snakey[0]==pfoody[b])){temp=1;break;}}if(temp==1)return 1;elsereturn 0;}判断游戏是否结束的函数,以单人游戏为例。
首先用for循环判断蛇头的横纵坐标是否在规定的范围内以及蛇头是否碰到蛇身,接着再用一个for循环判断是否碰到毒刺,以上条件符合一个,该函数就返回整数1,若两者都不返回,则返回0。
在主函数中,用一个if语句,用此函数返回的值作为判断条件,若值为1,则执行退出游戏,显示结束画面的语句。
算法4:int stop(char dir){r=!r;s=!s;if(!s){so=dir;return 98;}else{ int r=int(so);return r;}}暂停函数,以单人游戏为例。
在主函数所在的源文件设置一个bool类型的全局变量s,初始化为真。
玩家在游戏中按下回车键时,执行暂停函数,执行语句s=!s,最后函数返回一个值。
将暂停函数的返回值赋值给蛇的运动方向变量,使蛇不再运动。
在双人游戏中,设置了两个暂停函数,分别控制两条蛇的停止与运动。
算法五:DIR=_getch();switch (DIR){case 97:if(snake.direct[0]!=100)snake.direct[0]=97;break;case 100:if(snake.direct[0]!=97)snake.direct[0]=100;break;case 119:if(snake.direct[0]!=115)snake.direct[0]=119;break;case 115:if(snake.direct[0]!=119)snake.direct[0]=115;break;case 13:snake.direct[0]=stop(snake.direct[0]);break;default:break;换取按键信息,以单人游戏为例。
用swith判断语句对不同的按键信息,另设做出上移、下移、左移、右移、暂停/开始等动作。
算法六:c=(score/10)%5;b=(score/10)/5;if(speed!=75){if(c==0&&b==m+1){speed-=25;level++;m++;}}char bu[10];itoa(level,bu,10);textout(handle,72,8,wColors,1,bu);增加蛇的移动速度及显示等级的算法,以单人游戏为例。
类似毒刺产生的原理,设置两个全局变量,当这两个变量满足一定条件时,游戏等级增加一个单位,相应地蛇的速度增加。
等级的最高限度为五级,防止贪吃蛇运动过快。
2.3 程序设计的难点和关键点一、在游戏运行的同时,播放背景音乐,运用到多线程的知识。
二、在双人游戏中,分别编写两条蛇的运动算法,但两条蛇需要同时获取按键信息,这样两者才能同时运动。
三、设置蛇移动的算法时,让后一个点跟随前一个点的运动轨迹,原来最后一个点的位置就显示背景颜色,使得蛇在整体上看上去一偶那个了一格。
四、蛇的得分增加一定程度2.4 调试的方法[过程中出现的问题和解决方法]在编该游戏的过程中,出现了各种问题和错误,后来都一一解决了。
一、开始设置游戏等级时,当蛇满足一个升级的条件时,蛇却停止了运动,而不是像预想的那样加快运动速度。
后来发现原来是因为我用的if判断语句的判断条件出现问题,导致蛇的速度会一直减小直到零。
我借鉴产生毒刺的算法,设置判断条件,使得蛇每次增加速度都都能继续稳定运行。
二、开始加入背景音乐时,贪吃蛇死亡后,不显示游戏结束的画面,而是停留在原画面中继续播放音乐。
后来我设置了一个bool类型的全局变量r,把原来背景音乐函数中的无限循环的判断条件“1”换成r,当游戏结束时r变为假,使音乐不再播放。
三、刚设置双人游戏时,几乎需要把单人游戏中的每一个功能对应的函数再设置一个新的,以适应双人游戏的要求。
若不仔细检查,其中微小的错误在程序编译时无法发现,但运行游戏却会出现问题。
所以将单人游戏改成双人也需要极大的耐心和细致。
四、在增加毒刺和游戏等级的算法中,采用了类似的程序,都是设置两个变量,当这两个变量分别满足整除和取余的相应条件时,才执行添加毒刺或增加等级的算法。
2.5 程序性能评价从运行效果上进行分析:优点:添加背景颜色和背景音乐,使游戏画面更细腻绚丽。
同时增加了规避毒刺、等级上升、双人游戏等功能,更具娱乐性。
不足:背景音乐单一,双人游戏的蛇头部分闪烁不同步。
从程序设计上进行分析:优点:运用多个功能函数,且单人游戏与双人游戏分别对应,条例清晰。
不足:程序的设计没有运用到类的知识。
三.心得体会经过这次小学期的编程,使我很好地复习回顾了一遍C++的相关知识,同时对编程有了更为深刻的了解。
编译一个好的游戏,首先要考虑游戏的界面和操作是否友好方便,其次要尽量精简程序,增加程序的可读性,提高运算速度。
好的创意和想法是十分关键的,这不是书本能交给我们的,需要我们独立思考,交流取经。
小学期的编程很好地锻炼了我的全局统筹以及逻辑思维的能力,也培养了严谨、细心、耐心、专注等优良素质。
这次编写游戏的经历,使我认识了一个深刻的道理——任何事情要做好,都需要付出极大的努力。
即使是一个简单得不想玩的小游戏,编译起来也如此费神,可以想象编写一个软件、一个操作系统需要的惊人的人力物力。
这次小学期里我的收获很大。
在以后的学习中我一定要继续努力,端正态度,取得更好的成绩。