贪吃蛇游戏测试计划.docx
- 文档编号:11843151
- 上传时间:2023-04-05
- 格式:DOCX
- 页数:28
- 大小:149.75KB
贪吃蛇游戏测试计划.docx
《贪吃蛇游戏测试计划.docx》由会员分享,可在线阅读,更多相关《贪吃蛇游戏测试计划.docx(28页珍藏版)》请在冰豆网上搜索。
贪吃蛇游戏测试计划
贪吃蛇游戏的
开发与设计
一、实验目的………………………………………………………………2
二、实验任务与要求……………………………………………………2
2.1实验内容………………………………………………………………2
2.2实验要求………………………………………………………………2
2.3实验环境………………………………………………………………2
三、设计方案………………………………………………………………2
3.1程序功能………………………………………………………………3
3.2设计思想………………………………………………………………3
3.3设计总体流程图………………………………………………………4
3.4设计的具体实现………………………………………………………5
附录……………………………………………………………………………
附录A:
主要源程序…………………………………………………………
附录B:
软件使用说明书……………………………………………………
一、实验目的
1.1课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。
1.2培养学生在项目开发中团队合作精神、创新意识及能力。
二、实验任务与要求
2.1实验内容
贪吃蛇游戏开发,首先它可以为大家提供一种当前比较流行的休闲小游戏。
贪吃蛇是家喻户晓的益智类小游戏,选择这个题目一是为了将自己的所学知识加以运用,二是一直以来贪吃蛇这个游戏就深深地吸引着很多人,它的制作方法对于很多同学而言都是很神秘的。
所以我们希望通过这学期所学知识把它剖析开来,真真正正的了解它的本质和精髓。
在这次学习中我们将从实践和实际的项目中提高自己的编程能力。
因此决定选择这个题目作为VC#.NET的课程设计。
最后一部分就是游戏的模块划分,根据分析,贪吃蛇这个程序一共要实现如下几个功能,包括游戏方面开始游戏、暂停游戏以及停止游戏,游戏设置(蛇的颜色、食物的颜色、游戏难度设置),游戏帮助(游戏控制说明)与积分。
2.2实验要求
1)对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理;
2)系统设计要实用,采用模块化程序设计方法,编程简练、可用,功能全面;
3)说明书、流程图要清楚;
4)记录设计情况(备查,也为编写设计说明书作好准备);
2.3实验环境
Windows7操作系统,VS.NET2005开发环境。
三、设计方案
3.1程序功能
1)游戏选项:
主要实现游戏的开始、暂停、退出,分别可以使用快捷键F2、空格键、F4。
2)设置:
a)游戏难度等级设置:
初级、中级、高级三个难度等级,每个难度等级又实现了三级加速,主要包括一级加速、二级加速、三级加速;
b)蛇体颜色设置:
绿色、红色、蓝色、黑色四种颜色可以选择;
c)蛇体宽度设置:
初始大小、放大两倍、放大三倍三种选择;
d)食物颜色设置:
橙色、黄色、紫色三种颜色可以选择。
3)帮助:
游戏操作说明,可以使用快捷键F3打开,主要介绍游戏的操作方法、以及版本信息、制作时间。
3.2设计思想
1)贪吃蛇的游戏规则:
蛇头不能反向移动,若反向则保持原来的运动方向不变;不能碰到场地四周和自身,若碰到到四周墙壁或者自身,则游戏结束;当吃到食物后,应在随机生成一个新的坐标产生食物,并且食物不能再蛇身内生成;选择相应的游戏难度等级,当分数累加到一定程度以后,速度增加,每个等级有分为三个加速阶段。
2)游戏场地的绘制:
将panel控件设计为游戏的背景,场地、贪吃蛇以及食物都是在panel控件中完成绘制。
3)蛇身和食物的绘制:
本实验主要使用Graphics类在panel控件中绘制游戏的场地以及贪吃蛇、食物,食物模块、蛇身各模块的绘制是在单元格中进行绘制的,这样蛇身移动和食物生成过程中不需要重新绘制背景;根据蛇身模块宽度,可以改变蛇体的大小和场地坐标图方格的大小;根据食物类和蛇类各自的颜色变量,再通过菜单来改变其相应的颜色。
4)游戏的动态刷新控制:
使用Timer组件来实现贪吃蛇的移动,通过设置该组件的Interval属性大小来控制移动的速度。
5)蛇身移动的实现:
蛇身的移动主要是用ArrList类来实现的,该类的主要功能是使用大小可以根据需要动态增加数组,即建立动态数组来存储蛇身,本实验主要使用ArrList类的Insert方法和RemoveAt方法实现蛇模块的增加、蛇体移动的清除移动尾部。
3.3设计总体流程图
程序结构图:
程序流程图
3.4、设计的具体实现
1)游戏界面设计:
主要是使用panel1控件设计为游戏的背景,添加菜单项目,积分显示Label2,用于聚焦的TextBox1控件,菜单控件meuStrip1控件和Timer1控件,如下图所示:
2)创建一个Snake类:
a)在Snake类中定义全局变量
//设置蛇体模块大小
publicstaticintSnakeBone=10;
//设置方向
publicstaticintDirect=0;
//设置蛇体各模块的位置
publicstaticPoint[]Place={newPoint(-1,-1),newPoint(-1,-1),newPoint(-1,-1),newPoint(-1,-1),newPoint(-1,-1)};
//是否有食物,有食物为true
publicstaticboolhasFood=false;
//游戏是否结束,游戏结束为true
publicstaticboolisGame=false;
//场地的宽度、长度
publicstaticintField_with=0;publicstaticintField_length=0;
//记录绘制贪吃蛇的控件
publicstaticControlcontrol;
//记录Time组件
publicstaticTimertimer;
//设置贪吃蛇身体颜色
publicstaticSolidBrushSolidSnake=newSolidBrush(Color.Green);
//设置背景颜色
publicstaticSolidBrushSolidBack=newSolidBrush(Color.Green);
//记录label控件
publicstaticLabellabel;
//实例化一个ArrayList数组
publicstaticArrayListList=newArrayList();
Graphicsg;//实例化Graphics类
//实例化Food类
Foodfood=newFood();
b)定义贪吃蛇的起始位置和游戏场地初始化GamePlaceSet()函数:
主要实现蛇的初始位置,以及游戏场地的初始化。
publicvoidGamePlaceSet(Controlcon,intBone)代码具体实现见附录A的Snake类中
c)蛇的移动方法SnakeMove()函数:
主要实现蛇体的移动,每移动一次需要判定是否反向,如果反向则记录下来,原来移动方向不变,还需要判断是否游戏结束,如果没有结束则重新绘制蛇体,吃东西,绘制食物。
publicvoidSnakeMove(intN,Form1control1)代码具体实现见附录A的Snake类中
d)判断蛇是否反向方法EstimateMove()函数:
用于判断贪吃蛇的移动方向是否向相反的方向移动,如果方向移动则返回false。
publicboolEstimateMove(PointES)代码具体实现见附录A的Snake类中。
e)判断游戏是否结束GameEnd()函数:
主要实现判断蛇体是否和自身、四周墙壁是否相撞,如果相撞则游戏结束。
publicboolGameEnd(PointGE)代码具体实现见附录A的Snake类中。
f)吃东西Eatefood()函数:
主要实现贪吃蛇吃东西,没吃到一个食物,分数加5,当分数达到一定程度时候需要判断是否加速,这里主要实现蛇的三级加速,包括一级加速、二级加速、三级加速。
publicvoidEatefood(Form1control1)代码具体实现见附录A的Snake类中
3)创建一个Food类:
a)定义全局变量
//设置食物颜色
publicstaticSolidBrushSolidFood=newSolidBrush(Color.Orange);
//食物坐标的初始化
publicstaticPointFoodPoint=newPoint(-1,-1);
b)随机生成坐标方法RectPoint()函数:
用Random类随机生成随机的纵坐标和横坐标,用返回Point结构
publicPointRectPoint(Controlpon)代码具体实现见附录A的Food类中。
c)生成食物方法Buildfood()函数:
没有食物的时候需要生成食物,生成食物的位置不能和蛇体重叠,如果重叠则重新获取随机坐标。
publicvoidBuildfood(boolhasFood,Controlcon)代码具体实现见附录A的Food类中。
4)MainForm窗体功能实现
a)定义全局变量
//用于设置贪吃蛇的速度
publicintspeed=350;
//用于游戏是否开始
publicstaticboolifStart=false;
//用于游戏是否暂停,游戏暂停为true
publicstaticboolpause=true;
//实例化Snake类
Snakesnake=newSnake();
//实例化Food类
Foodfood=newFood();
b)绘制游戏场景单元格的绘制:
主要实现panel1控件中单元格绘制。
publicvoidProtractTable(GraphicsG)代码具体实现见附录A的MainForm窗体的主要代码中。
c)在panel1控件里初始化游戏场地方法panel1_Paint()函数:
主要实现panel1控件中绘制蛇和食物,以及游戏的是否结束的判断。
privatevoidpanel1_Paint(objectsender,PaintEventArgse)代码具体实现见附录A的MainForm窗体的主要代码中。
d)游戏开始、暂停、退出实现:
选择开始,贪吃蛇在游戏场地运行;暂停选项只在贪吃蛇移动可以使用,其他情况下处于无效状态;退出选项只用当游戏处于非运行状态起作用,退出游戏并且添加了判断。
//开始
privatevoid开始F2ToolStripMenuItem_Click(objectsender,EventArgse)
//暂停
privatevoid暂停SpaceToolStripMenuItem_Click(objectsender,EventArgse)
//退出
privatevoid退出F4ToolStripMenuItem_Click(objectsender,EventArgse)
//控制游戏的开始、暂停、和退出
publicvoidNoviceControl(intn)
代码具体实现见附录A的MainForm窗体的主要代码中。
e)游戏等级实现:
主要分为初级、中级、高级三个级别,分别设置相应的刷新时间,并且限制只能在游戏结束运行和开始没有开始游戏时可以设置。
//初级
privatevoid初级ToolStripMenuItem_Click_1(objectsender,
EventArgse)
//中级
privatevoid中级ToolStripMenuItem_Click(objectsender,EventArgse)
//高级
privatevoid高级ToolStripMenuItem_Click(objectsender,EventArgse)
代码具体实现见附录A的MainForm窗体的主要代码中。
f)游戏键盘操作游戏键盘操作:
主要实现游戏的开始、暂停、退出,分别可以使用快捷键F2、空格键、F4,游戏操作说明用F4键打开;贪吃蛇移动方向操作:
右移按→键或D键,左移按←键或A键,上移按↑键或W键,下移按↓键或S键。
//键盘操作设置
privatevoidForm1_KeyDown(objectsender,KeyEventArgse)代码具体实现见附录A的MainForm窗体的主要代码中。
g)蛇体颜色和食物颜色设置实现:
主要实现蛇的四种颜色设置和食物的三种颜色设置,并且限制只能在游戏结束运行和开始没有开始游戏时可以设置。
//蛇体颜色设置
privatevoid绿色ToolStripMenuItem_Click(objectsender,EventArgse)
privatevoid红色ToolStripMenuItem_Click(objectsender,EventArgse)
privatevoid蓝色ToolStripMenuItem_Click(objectsender,EventArgse)
privatevoid黑色ToolStripMenuItem_Click(objectsender,EventArgse)
//食物颜色设置
privatevoid橙色ToolStripMenuItem_Click(objectsender,EventArgse)
privatevoid黄色ToolStripMenuItem_Click(objectsender,EventArgse)
privatevoid紫色ToolStripMenuItem_Click(objectsender,EventArgse)
代码具体实现见附录A的MainForm窗体的主要代码中。
h)蛇体宽度放大实现:
主要实现蛇体宽度的大小蛇置,同时相应放大单元格的宽度,并且限制只能在游戏结束运行和开始没有开始游戏时可以设置。
privatevoid初始大小ToolStripMenuItem_Click(objectsender,EventArgse)
privatevoid放大两倍ToolStripMenuItem_Click(objectsender,EventArgse)
privatevoid放大三倍ToolStripMenuItem_Click(objectsender,EventArgse)
代码具体实现见附录A的MainForm窗体的主要代码中。
i)打开帮助:
主要是想打开游戏操作说明窗体,并且限制只能在游戏结束运行和开始没有开始游戏时可以设置。
privatevoid游戏操作说明F3ToolStripMenuItem_Click_1(objectsender,EventArgse)
j)timer1_Tick的触发事件:
主要实现在一定的时间间隔内调用SnakeMove()函数,实现蛇的动态移动。
privatevoidtimer1_Tick(objectsender,EventArgse)代码具体实现见附录A的MainForm窗体的主要代码中。
参考文献
【1】《C#高级编程(第3版)》清华大学出版社
【2】《VisualC#开发典型模块大全》人民邮电出版社出版社
附录
附录A:
主要源程序
1)创建一个Snake类的代码
classSnake
{//在snake类中第一全局变量
publicstaticintSnakeBone=10;//设置蛇体模块大小
publicstaticintDirect=0;//设置方向
publicstaticPoint[]Place={newPoint(-1,-1),newPoint(-1,-1),newPoint(-1,-1),newPoint(-1,-1),newPoint(-1,-1)};//设置蛇体各模块的位置
publicstaticboolhasFood=false;//是否有食物,有食物为true
publicstaticboolisGame=false;//游戏是否结束,游戏结束为true
publicstaticintField_with=0;//场地的宽度
publicstaticintField_length=0;//场地的长度
publicstaticControlcontrol;//记录绘制贪吃蛇的控件
publicstaticTimertimer;//记录Time组件
//设置贪吃蛇身体颜色
publicstaticSolidBrushSolidSnake=newSolidBrush(Color.Green);publicstaticSolidBrushSolidBack=newSolidBrush(Color.Green);
publicstaticLabellabel;//记录label控件
publicstaticArrayListList=newArrayList();//实例化一个ArrayList数组
Graphicsg;//实例化Graphics类
Foodfood=newFood();
//定义一个函数用于绘制贪吃蛇的起始位置,以及对游戏场地进行初始化设置
publicvoidGamePlaceSet(Controlcon,intBone)
{Field_with=con.Width;//获取场地的宽度
Field_length=con.Height;//获取场地的长度
SnakeBone=Bone;//记录蛇体模块大小
control=con;//记录背景控件
g=control.CreateGraphics();//创建背景控件的Graphics类
SolidBack=newSolidBrush(con.BackColor);//设置画刷颜色
for(inti=0;i {//设置蛇初始位置的横坐标 Place[i].X=(Place.Length-i-1)*SnakeBone; //设置蛇初始位置的纵坐标//temp.Y Place[i].Y=(Field_length/2)-SnakeBone; g.FillRectangle(SolidSnake,Place[i].X+1,Place[i].Y+1,SnakeBone-1,SnakeBone-1);//绘制蛇体 } List=newArrayList(Place);//记录每一个模块的位置 isGame=false;//停止游戏 Direct=0;//设置方向向右 } //定义一个SnakeMove函数用于蛇体移动,根据蛇的位置,判断是否吃到食物,如果吃到食物,重新生成食物 publicvoidSnakeMove(intN,Form1control1) {Pointtem_point=newPoint(-1,-1);//定义坐标结构 switch(N) {case0: {tem_point.X=((Point)List[0]).X+SnakeBone;//蛇头右移动 tem_point.Y=((Point)List[0]).Y; break; } case1: {tem_point.X=((Point)List[0]).X-SnakeBone;//蛇头左移动 tem_point.Y=((Point)List[0]).Y; break; } case2: {tem_point.X=((Point)List[0]).X; tem_point.Y=((Point)List[0]).Y-SnakeBone;//蛇头上移动 break; } case3: {tem_point.X=((Point)List[0]).X; tem_point.Y=((Point)List[0]).Y+SnakeBone;//蛇头下移动 break; } } if(! EstimateMove(tem_point))//如果没有向相反的方向移动 {Direct=N;//改变贪吃蛇的方向 if(! GameEnd(tem_point))//如果游戏没有结束 {ProtractSnake(tem_point);//重新绘制蛇体 Eatefood(control1);//吃食物 } //绘制食物 g.FillRectangle(Food.SolidFood,Food.FoodPoint.X+1,Food.FoodPoint.Y+1,SnakeBone-1,SnakeBone-1); } } //吃东西 publicvoidEatefood(Form1control1) {intm,n;//记录分数和速度 if(((Point)List[0])==Food.FoodPoint)//如果蛇头吃到了食物 {List.Add(List[List.Count-1]);//在蛇的尾部添加蛇身 hasFood=false;//没有食物 food.Buildfood(hasFood,control);//生成食物 m=Convert.ToInt32(label.Text); if(m==10)//积分为10时加速 {n=control1.speed-50; timer.Interval=n; label.Text=Convert.ToString(m+5);//显示当前分数 g.DrawString("一级加速中",newFont("宋体",15,FontStyle.Bold),newSolidBrush(Color.Green),newPointF(180,30)); } elseif(m==20)//积分为20时加速 {g.FillRectangle(Snake.SolidBack,0,0,control.Width,control.Height); control1.ProtractTable(g); g.DrawString("二级加速中",newFont("宋体",15,FontStyle.Bold),newSolidBrush(Color.Blue),newPointF(180,30)); n=control1.speed-100; tim
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 贪吃 游戏 测试 计划