贪吃蛇游戏实验报告.docx
- 文档编号:12921504
- 上传时间:2023-04-22
- 格式:DOCX
- 页数:19
- 大小:50.91KB
贪吃蛇游戏实验报告.docx
《贪吃蛇游戏实验报告.docx》由会员分享,可在线阅读,更多相关《贪吃蛇游戏实验报告.docx(19页珍藏版)》请在冰豆网上搜索。
贪吃蛇游戏实验报告
*****************
实验报告
实验名称:
网络编程基础实训教程(贪吃蛇)
指导教师:
姓名:
学号:
/
班级:
提交日期:
1.实验目的
通过开发一款贪吃蛇游戏程序,熟练掌握C#编程语言、和面向对象程序设计方法,独立完成一个游戏程序的开发。
2.实验题目
—
使用C#编程语言,开发一款贪吃蛇游戏,如下图所示。
3.功能描述
a)游戏场地是一片矩形区域的草坪。
b)一条蛇由蛇头和蛇身组成。
c)当游戏开始之后,草坪中出现一颗豆和一条蛇,并且蛇不停地移动,蛇移动方向与蛇头一致。
d)当游戏暂停之后,蛇停止移动。
e)当蛇移动时,玩家使用“↑”、“↓”、“←”和“→”四个键控制蛇的移动方向。
f)当蛇头与豆的位置重合时,豆被蛇吃掉,同时在草坪中再生成一颗新的豆,蛇身增加一节。
g)当蛇头碰到蛇身时,则咬断蛇身,后半部分的蛇身消失。
h):
i)当蛇头碰到草坪四周时,蛇立即毙命,游戏结束。
4.需求分析
根据功能描述可知,贪吃蛇游戏的系统结构图如下所示。
定义数据字典如下:
1)草坪(Lawn):
草坪是贪吃蛇游戏的场地。
豆和蛇只能存在于草坪范围之内。
草坪具有大小和颜色等属性。
2)蛇(Snake):
在贪吃蛇游戏中,蛇由若干节组成,其中第一节是蛇头,其余是蛇身。
在游戏过程中,有且仅有一条蛇,并且蛇在不停地移动。
如果蛇吃了豆,则蛇生长一节。
如果蛇头碰到蛇身,则咬断蛇身,后半部分的蛇身消失。
如果蛇头离开草坪,则蛇死亡游戏结束。
蛇具有长度、颜色、运动方向、每一节的位置等属性。
3)豆(Bean):
在贪吃蛇游戏中,豆是蛇的食物。
在游戏过程中,有且仅有一颗豆。
如果蛇吃了豆,则重新生成一颗豆。
豆具有位置、大小和颜色等属性。
5.)
6.设计说明
根据需求分析可知,Snake的每一节都有位置和大小等属性。
而Bean也具有这两个属性。
抽象出二者的共同特征,抽象出一般类Block,用于描述一个块。
Block派生出Bean和SnakeBlock两个类,其中SnakeBlock类用于描述蛇的一节。
为了使游戏的运行更易于控制,定义Game类用于启动、暂停和继续游戏。
根据需求分析可知,Lawn仅包含大小和颜色两个属性。
为了减少类的数量,可将其大小和颜色等属性添加到Game类中。
综上所述,在贪吃蛇游戏中,有Block(块)、Bean(豆)、SankeBlock(节)、Snake(蛇)、Game(游戏)和MainForm(用户接口)六个类。
贪吃蛇游戏的逻辑模型如下图所示。
7.源代码
1)Block(块)类的编码
Block是用来构成Bean(豆)和Snake(蛇)的最基本的单位,是Bean和SnakeBlock的基类。
Block类的参考代码如下。
usingSystem;
using;
using;
namespaceWindowsFormsApplication1
{
classBlock
{
-
protectedPointorigion;rigion)
break;
}
if(i==
bGetAPosition=true;
}
Display(g);
}
}
}
3)SnakeBlock(节)类编码
…
SnakeBlock表示蛇的一节,是由Block派生而来的。
SnakeBlock类的参考代码如下:
usingSystem;
using;
using;
namespaceWindowsFormsApplication1
{classSnakeBlock:
Block
{
privateboolisHead;
publicboolIsHead
{
>
get
{
returnisHead;
}
}
publicSnakeBlock(intx,inty,Color_color,bool_isHead)
{
origion=newPoint(x,y);
color=_color;
isHead=_isHead;
}
【
publicvoidChangeHeadToBody()
{
if(isHead)
isHead=false;
}
publicvoidDisplay(Graphicsg,Directiondirection)
{
(g);
if(isHead)
{
-blocks[-2].;
!
inty=2*blocks[-1].-blocks[-2].;
(length,newSnakeBlock(x,y,color,false));
length++;
}
publicvoidMove()
{
intx=0;
inty=0;
blocks[0].ChangeHeadToBody();
switch(direction)
{
*
case:
x=blocks[0].;
y=blocks[0].-;
break;
case:
x=blocks[0].;
y=blocks[0].+;
break;
case:
x=blocks[0].-;
y=blocks[0].;
…
break;
case:
x=blocks[0].+;
y=blocks[0].;
break;
}
(0,newSnakeBlock(x,y,color,true));
-1);
}
publicvoidDisplay(Graphicsg)
{
for(inti=0;i { blocks[i].Display(g,direction); } } publicvoidClear(Graphicsg,ColorbackGroundColor) { for(inti=0;i { blocks[i].Clear(g,backGroundColor); } ; } publicvoidRemoveAfter(Graphicsg,ColorbackGroundColor,intblockNum) { for(inti=length-1;i>blockNum-1;i--) { blocks[i].Clear(g,backGroundColor); (i); length=blockNum; } } publicboolCanEatBean(Beanbean) · { if(blocks[0].Origion== returntrue; else returnfalse; } publicintCanEatSnake() { for(inti=3;i<;i++) . { if(blocks[0].Origion==blocks[i].Origion) returni; } return0; } publicvoidEatBean(Beanbean,Graphicsg,ColorbackGroundColor,intlawnWidth,intlawnHeight) { 。 (g,backGroundColor); Grow(); (g,backGroundColor,lawnWidth,lawnHeight,this); } publicboolIsAlive(intlawnWidth,intlawnHeight) { if(blocks[0].<0) returnfalse; if(blocks[0].<0) returnfalse; if(blocks[0].+>lawnWidth) 。 returnfalse; if(blocks[0].+>lawnHeight) returnfalse; else returntrue; } } } } 5)Game(游戏)类编码 Game控制游戏的运行,负责在游戏开始时生成Bean和Snake,以及负责在游戏运行中Snake的移动、Snake的生长、Bean的重生,并随时检测Snake的生死状态。 Game类的参考代码如下: usingSystem; using; using; namespaceHungrySanke { classGame { … publicSnakesnake; publicBeanbean; publicboolisSnakeAlive; publicintlawnWidth; publicintlawnHeight; publicGame(int_lawnWidth,int_lawnHeight) { Randomrandom=newRandom(); intx=(0,_lawnWidth-1)/*; inty=(0,_lawnHeight-1)/*; Directiondirection=(Direction)(1,4); ! snake=newSnake,direction); bean=newBean; isSnakeAlive=false; lawnWidth=_lawnWidth; lawnHeight=_lawnHeight; } publicvoidBegin(Graphicsg,ColorbackGroundColor,intlawnWidth,int lawnHeight) { isSnakeAlive=true; (g,backGroundColor); 》 (g,backGroundColor,lawnWidth,lawnHeight); (g,backGroundColor,lawnWidth,lawnHeight,snake); } publicvoidOnTime(Graphicsg,ColorbackGroundColor,intlawnWidth,int lawnHeight) { if(isSnakeAlive) { (g,backGroundColor); (); (g); { (g); if(bean)) { (g,backGroundColor); (bean,g,backGroundColor,lawnWidth, lawnHeight); (g); } intblockNum=(); if(blockNum>0) { , (g,backGroundColor,blockNum); } if(! (lawnWidth,lawnHeight)) isSnakeAlive=false; } } } } Form1的设计代码 # usingSystem; using; using; using; using; using; usingHungrySanke { publicpartialclassForm1: Form { privateGamegame; ! publicForm1() { InitializeComponent(); game=newGame,; } privatevoidForm1_Load(objectsender,EventArgse) { } - privatevoidtimer1_Tick(objectsender,EventArgse) { if( { Graphicsg; g=(); (g,,,; if(! { ("GameOver"); < } } } privatevoidToolStrpMenuItemStart_Click(objectsender,EventArgse) { Graphicsg; g=(); (g,,,; 【 =true; =true; =false; } privatevoidToolStripMenuItemPause_Click(objectsender,EventArgse) { =false; =false; * =true; } privatevoidToolStripMenuItemCONTINUE_Click(objectsender,EventArgse) { =true; =true; =false; } privatevoidForm1_KeyDown(objectsender,KeyEventArgse) : { if==||== { switch { case: =; break; caseKeys.Right: game.snake.direction=Direction.Right; break; ~ } } else { switch) { caseKeys.Up: game.snake.direction=Direction.Up; break; 》 caseKeys.Down: game.snake.direction=Direction.Down; break; } } } privatevoidlawn_Paint(objectsender,PaintEventArgse) { } \ privatevoidmenuStrip1_ItemClicked(objectsender,ToolStripItemClickedEventArgse) { } privatevoidToolStripMenuItemStart_Click(objectsender,EventArgse) { Graphicsg; g=(); (g,,,; 》 =true; =true; =false; } privatevoidToolStripMenuItemPause_Click_1(objectsender,EventArgse) { =false; =false; =true; } privatevoidToolStripMenuItemContinue_Click_1(objectsender,EventArgse) { =true; =true; =false; } } } 8.测试报告 测试用例; 1)、Bean的生成、消除与显示 Bean在游戏开始时,能生成一颗豆且能在游戏运行中,正常显示,能在豆被蛇吃掉时,消除原先的豆,并重新生成一颗豆。 Snake的生成、显示、移动、生长与死亡 在游戏开始时,生成一条蛇并能在游戏运行中,正常显示一条蛇的运动。 蛇能在游戏运行中,根据用户的按键情况,改变蛇的移动方向。 能在蛇吃掉豆时,生长一节。 当蛇头碰到蛇尾或者蛇身的时候,后面的部分将被剪断不再显示,而且能在蛇头碰到场地边界时死亡,并结束游戏。 测试结果 当游戏运行时,游戏能正常运行!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 贪吃 游戏 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)