贪吃蛇实训报告.docx
- 文档编号:4173945
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:23
- 大小:202.27KB
贪吃蛇实训报告.docx
《贪吃蛇实训报告.docx》由会员分享,可在线阅读,更多相关《贪吃蛇实训报告.docx(23页珍藏版)》请在冰豆网上搜索。
贪吃蛇实训报告
郑州轻产业学院之马矢奏春创作
时间:
二O二一年七月二十九日
实训陈述
实训名称:
贪吃蛇
指导教师:
姓名:
学号:
班级:
提交日期:
一.实验目的
经由过程开拓一款贪吃蛇游戏程序,闇练掌握C#编程措辞、和面向对象程序设计方法,自力完成一个游戏程序的开拓.
二.实验标题
本次实训的标题为贪吃蛇.经由过程运用C#编程措辞来实现.
三.成效描述
1.游戏的底子成效描述
1)游戏场地是一片矩形区域的旷地组成,蛇可以在这片定义的区域中自由移动.
2)定义一个Block来组成石块,蛇头,蛇身以及豆.蛇由蛇头和蛇身组成.
3)当游戏开始之后,定义的区域中消掉一颗豆和一条蛇,并且蛇不断地移动,蛇移动的标的目的与蛇头的标的目的一致.
4)经由过程space或者暂停键可以使游戏停止,蛇停止移动,分数停止积分.
5)当蛇移动时,玩家可以运用“↑”、“↓”、“←”和“→”四个标的目的键修改蛇的移动标的目的.
6)当蛇头与豆的地位重应时,豆被蛇吃掉落,同时在草坪中再生成一颗新的豆,蛇身增加一节.
7)当蛇头碰着石块时,蛇去世亡,游戏停止.
8)当蛇头咬到蛇身时,则蛇去世亡,游戏停止.
9)当蛇头碰着草坪四周时,蛇连忙毙命,游戏停止.
10)游戏分为不合的级别,第一关游戏速度为200,当蛇吃五个豆子就可以过关,级别显示为2,速度增加100变成300.第二关为吃够10个豆子,速度增加50,往后以此类推.
11)游戏菜单中设有游戏帮忙,玩家可以经由过程点击帮忙理解游戏的弄法.
12)对于不是第一次玩的玩家可以修改蛇的运动速度,来增加难度.在菜单中设有加速和减速两个键,单击可以修改速度.
13)游戏菜单中还有时鲜明示.
14)当游戏暂停时,可以经由过程“中断”键使游戏中断进行.
四.需求阐发
本游戏用户可以本身演习和娱乐.本游戏需要知足以下几点要求:
(1)运用标的目的键“↑、↓、←、→”来修改蛇的运行标的目的.
(2)空格键暂停游戏,并在随机的地方产生食物.
(3)吃到食物就变成新的蛇体,碰着壁或自身则游戏停止,不然正常运行.
可行性阐发:
贪吃蛇游戏是一种简单的大众的游戏,自从计算机实现以来,深受广大电脑玩家的爱好,做一个简单的贪吃蛇小游戏.
贪吃蛇的核心算法是若何实现蛇的移动和吃掉落食物后若何变成新的蛇体.没有碰着食物的时刻,把当前运动标的目的上的下个节点入队,并以蛇节点的颜色绘制这个节点,然后把头指针所指的节点出队,并以游戏框架内部布风光重绘出队的节点,这样就可以达到移动的效果.而在吃到食物的时刻,则只需把食物入队即可.实现贪吃蛇的底子的蛇身移动、吃到食物身体增加、和碰着墙壁或自身死亡,能够暂停和开始.玩家可以按照本身的程度选择不合的级别进行游戏寻衅.
贪吃蛇游戏中定义如下:
1)空白区域(Lawn):
定义的区域是贪吃蛇游戏的场地.豆、石头和蛇只能消掉于空白区域的范围之内.按照集团快乐爱好还可以添加布景,修改区域的大小和颜色.
2)蛇(Snake):
在贪吃蛇游戏中,蛇由若干节组成,个中第一节是蛇头,在蛇头上面定义两个点,作为蛇的眼睛,其余是蛇身.在游戏过程中,有且仅有一条蛇,并且蛇在不断地移动.假如蛇吃了豆,则蛇成长一节.假如蛇头碰着蛇身,蛇去世亡,游戏停止.假如蛇头分隔所定义的区域,则蛇去世亡游戏停止.当蛇头撞到定义的石块上的时刻游戏停止.在定义蛇的时刻可以修改蛇的初始长度,也可以修改蛇的颜色和大小.
3)豆(Bean):
在贪吃蛇游戏中,豆是蛇的食物.在游戏过程中,有且仅有一颗豆.假如蛇吃了豆,则从新生成一颗豆.豆的消掉是随机性的.
4)石块(stone):
游戏中石块和豆是同时消掉的,不合的是,豆是随机产生的,而石块是固定的,它的坐标在写代码的时刻就定义好了,不克不及够修改.它的大小和颜色也可以随便的修改.
5)菜单(MenuStrip):
在贪吃蛇游戏中有游戏菜单,里面有开局、暂停、中断、加速、减速、帮忙等菜单.还有Label控件,显示速度、时间、日期和积分的.
五.设计说明
Snake的每一节都有地位和大小等属性.而Bean和stone也具有这两个属性.抽象出这三者的合营特色,抽象出一般类Block,用于描述一个块.Block派生出Bean和SnakeBlock两个类,个中SnakeBlock类用于描述蛇的一节.
为了使游戏的运行更轻易于掌握,定义Game类用于启动、暂停和中断游戏.
按照需求阐发可知,Lawn仅包含大小和颜色两个属性.为了削减类的数量,可将其大小和颜色等属性添加到Game类中.
综上所述,在贪吃蛇游戏中,有Block(块)、Bean(豆)、SankeBlock(节)、Snake(蛇)、Game(游戏)和MainForm(用户接口)六个类.
游戏逻辑构思图如下:
吃到
豆
游戏的设计如下:
六.源代码
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
namespaceWindowsFormsApplication1
{
publicpartialclassMainForm:
Form
{
inta=200;//定义初速度为200
privateGamegame;//
DateTimec;
publicMainForm()
{
InitializeComponent();
game=newGame(lawn.Width,lawn.Height);
timer1.Enabled=true;
timer1.Interval=a;
timer1.Enabled=false;
Velocity.Text=a.ToString();
}
Block是用来组成Bean(豆)和Snake(蛇)还有Stone(石块)的最底子的单位,是Bean和SnakeBlock的基类.Block类的参考代码如下.
classBlock
{
protectedPointorigion;//Block的左上顶点
publicconstintWIDTH=10;//Block的宽度
publicconstintHEIGHT=10;//Block的高度
protectedColorcolor;//Block的颜色
publicBlock()
{
origion=newPoint(0,0);
color=newColor();
}
publicBlock(intx,inty,Color_color)
{
origion=newPoint(x,y);
color=_color;
}
publicPointOrigion
{
get
{
returnorigion;
}
}
publicvoidDisplay(Graphicsg)
{
SolidBrushbrush=newSolidBrush(color);
g.FillRectangle(brush,origion.X,origion.Y,WIDTH,HEIGHT);
Penpen=newPen(Color.Black);
g.DrawRectangle(pen,newRectangle(origion.X,origion.Y,WIDTH-1,HEIGHT-1));
}
publicvoidClear(Graphicsg,ColorbackGroundColor)
{
SolidBrushbrush=newSolidBrush(backGroundColor);
g.FillRectangle(brush,origion.X,origion.Y,WIDTH,HEIGHT);
}
}
这是对豆的定义,是由Block派生而来的,在系统开始时,使豆产生,它的消掉地位为随机生成.其代码如下:
classBean:
Block
{
publicstaticintf=0;//吃到豆子的个数
publicBean(Color_color)
{
origion=newPoint(0,0);
color=_color;
}
publicvoidCreat(Graphicsg,ColorbackGroundColor,intlawnWidth,intlawnHeight,Snakesnake)
{
Clear(g,backGroundColor);
boolbGetAPosition=false;//是否找到生成豆的地位
Randomrandom=newRandom();
while(!
bGetAPosition)
{
origion.X=random.Next(0,lawnWidth-1)/WIDTH*WIDTH;
origion.Y=random.Next(0,lawnHeight-1)/HEIGHT*HEIGHT;
inti;
for(i=0;i { if(origion==snake.blocks[i].Origion) break; } if(i==snake.Length) bGetAPosition=true; } Display(g); f++; } newpublicvoidDisplay(Graphicsg) { SolidBrushbrush=newSolidBrush(color); g.FillRectangle(brush,origion.X,origion.Y,WIDTH,HEIGHT); Penpen=newPen(Color.Black); g.DrawRectangle(pen,newRectangle(origion.X,origion.Y,WIDTH-1,HEIGHT-1)); } //Display(g); } SnakeBlock暗示蛇的一节,是由Block派生而来的.它组成蛇身,其代码如下所示: 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) { base.Display(g); if(isHead) { //绘制蛇眼 SolidBrushbrush=newSolidBrush(Color.Black); switch(direction) { caseDirection.Up: caseDirection.Down: g.FillRectangle(brush,origion.X+WIDTH/4,origion.Y+HEIGHT/2,2,2); g.FillRectangle(brush,origion.X+WIDTH/4*3,origion.Y+HEIGHT/2,2,2); break; caseDirection.Left: caseDirection.Right: g.FillRectangle(brush,origion.X+WIDTH/2,origion.Y+HEIGHT/4,2,2); g.FillRectangle(brush,origion.X+WIDTH/2,origion.Y+HEIGHT/4*3,2,2); break; } } } } 掌握蛇头运动的标的目的 publicenumDirection { Up, Down, Left, Right }; 对蛇的编码也是由Block派生而来的,在这里面可以定义蛇的颜色和长度. classSnake { publicstaticbooleatebean; privateintlength; publicDirectiondirection; privateColorcolor; publicList privateconstintINIT_LENGTH=10; publicintLength { get { returnlength; } } publicSnake(Color_color,Direction_direction) { direction=_direction; color=_color; blocks=newList } publicvoidCreat(Graphicsg,ColorbackGroundColor,intlawnWidth,intlawnHeight) { Clear(g,backGroundColor); blocks.Clear(); length=INIT_LENGTH; intx; inty; Randomrandom=newRandom(); x=random.Next(lawnWidth/4,lawnWidth/4*3)/Block.WIDTH*Block.WIDTH; y=random.Next(lawnHeight/4-1,lawnHeight/4*3)/Block.HEIGHT*Block.HEIGHT; blocks.Add(newSnakeBlock(x,y,color,true)); 蛇运动的标的目的掌握 switch(direction) { caseDirection.Up: for(inti=1;i { blocks.Add(newSnakeBlock(x,y+Block.HEIGHT*i,color,false)); } break; caseDirection.Down: for(inti=1;i { blocks.Add(newSnakeBlock(x,y-Block.HEIGHT*i,color,false)); } break; caseDirection.Left: for(inti=1;i { blocks.Add(newSnakeBlock(x+Block.WIDTH*i,y,color,false)); } break; caseDirection.Right: for(inti=1;i { blocks.Add(newSnakeBlock(x-Block.WIDTH*i,y,color,false)); } break; } Display(g); } publicvoidGrow() { intx=2*blocks[blocks.Count-1].Origion.X-blocks[blocks.Count-2].Origion.X; inty=2*blocks[blocks.Count-1].Origion.Y-blocks[blocks.Count-2].Origion.Y; blocks.Insert(length,newSnakeBlock(x,y,color,false)); length++; } publicvoidMove() { intx=0; inty=0; blocks[0].ChangeHeadToBody(); switch(direction) { caseDirection.Up: x=blocks[0].Origion.X; y=blocks[0].Origion.Y-Block.HEIGHT; break; caseDirection.Down: x=blocks[0].Origion.X; y=blocks[0].Origion.Y+Block.HEIGHT; break; caseDirection.Left: x=blocks[0].Origion.X-Block.WIDTH; y=blocks[0].Origion.Y; break; caseDirection.Right: x=blocks[0].Origion.X+Block.WIDTH; y=blocks[0].Origion.Y; break; } blocks.Insert(0,newSnakeBlock(x,y,color,true)); blocks.RemoveAt(blocks.Count-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); blocks.RemoveAt(i); length=blockNum; } } 石块的定义定义如下,在空白区域中定义一个地位(坐标),使之固定不动,在蛇头撞到这个坐标的时刻,参数传到判断蛇去世活的函数,时蛇去世亡,游戏停止. publicboolMeetStone(Pointorigion) { if((blocks[0].Origion.X==(origion.X+40)&&blocks[0].Origion.Y==(origion.Y+40))||(blocks[0].Origion.X==(origion.X+300)&& blocks[0].Origion.Y==(origion.Y+80))||(blocks[0].Origion.X==(origion.X+150)&&blocks[0].Origion.Y==(origion.Y+200))|| (blocks[0].Origion.X==(origion.X+100)&&blocks[0].Origion.Y==(origion.Y+400))) returntrue; else returnfalse; } 当蛇碰着一个豆时,使豆成为蛇体的一部分,其颜色和大小跟蛇一样,蛇身增加. publicboolCanEatBean(Beanbean) { if(blocks[0].Origion==bean.Origion) returntrue; else returnfalse; } publicintCanEatSnake() { for(inti=3;i { if(blocks[0].Origion==blocks[i].Origion) returni; } return0; } publicvoidEatBean(Beanbean,Graphicsg,ColorbackGroundColor,intlawnWidth,intlawnHeight) { bean.Clear(g,backGroundColor); Grow(); bean.Creat(g,backGroundColor,lawnWidth,lawnHeight,this); eatebean=true; } publicboolIsAlive(intlawnWidth,intlawnHeight) { if(blocks[0].Origion.X<0) returnfalse; if(blocks[0].Origion.Y<0) returnfalse; if(blocks[0].Origion.X+Block.WIDTH>lawnWidth) returnfalse; if(blocks[0].Origion.Y+Block.HEIGHT>lawnHeight) returnfalse; else returntrue; } } Game掌握游戏的运行,担任在游戏开始时生成Bean、Stone和Snake,以及担任在游戏运行中Snake的移动、Snake的成长、Bean的更生和石块的分娩.并随时检测Snake的去世活状态.Game类的参考代码如下: classGame { Pointorigion; publicSnakesnake; publicBeanbean; publicboolisSnakeAlive; publicintlawnWidth; publicintlawnHeight; publicGame(int_lawnWidth,int_lawnHeight) { Rand
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 贪吃 蛇实训 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)