课程方案贪吃蛇编制.docx
- 文档编号:27221422
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:16
- 大小:66.11KB
课程方案贪吃蛇编制.docx
《课程方案贪吃蛇编制.docx》由会员分享,可在线阅读,更多相关《课程方案贪吃蛇编制.docx(16页珍藏版)》请在冰豆网上搜索。
课程方案贪吃蛇编制
课程设计成果说明书
题目:
贪吃蛇游戏的编制学生姓名:
杜恩荣
学号:
100604120
学院:
数理与信息学院班级:
A10计算机指导教师:
亓常松老师
浙江海洋学院教务处
2018年7月8日
1.系统需求分析
1.1程序功能说明
1.2程序设计的分析
2.软件设计说明
2・1a主界面控件设计
2.1b颜色控件设计
2.2具体操作
3.测试报告
3.1测试游戏
3.2测试的意义
4.参考文件
5.课程设计总结
贪吃蛇游戏的设计与实现
1.系统需求分析:
1.1程序功能说明:
贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘wsad控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。
1.2程序设计的分析:
通过程序所要实现的功能可以看出,该程序中有蛇,食物两个主要的对象,所以我们可以定义两个类:
蛇类和食物类;在蛇类中封装了蛇的所有的属性和操作。
蛇的属性有:
蛇的长度,蛇的长度,蛇的初始位置,蛇的运动方向,蛇的存活状态,蛇的运动速度。
蛇的操作有:
蛇的移动,蛇吃食物,画出蛇所有的状态。
食物的属性有:
食物的出现位置,食物的存活状态。
食物类的操作:
创建一个新的食物,画出食物的位置。
在该程序中还有一个from类,用来画出和显示蛇和食物的状态和位置,该类提供给蛇和食物的运动平台,蛇和食物在该from的画板范围内运行。
程序中还有其他的功能要一一实现。
如:
在用户点击“开始”按钮后程序才能开始运行。
用户如果按空格键,则该程序暂停,但并不终止程序,在用户再次按空格键时,程序继续运行。
如果程序运行结束,即程序出现“GAMEOVER,或用户点击窗口关闭按钮
时,程序结束,并且退出。
在程序运行过程中,用户控制的蛇,没吃到一个食物,那么该玩家的得分就加10,并且还要记录玩家的总得分。
在菜单栏【游戏设置】中选择【颜色设置】命令,可以设置蛇体和食物的颜色;
在菜单栏【游戏设置】中选择【难度选择】命令,可以设置游戏难度。
游戏预览:
游戏运行的主操作界面如下图所示
蛇体颜色选择界面如下:
]颜色遴輝
I
帮助界面如下:
2.软件设计说明:
2.软件设计说明
2.1a主界面控件设计:
控件类型
控件名称
作用
MenuStrip
MenuStrip2
蛇体颜色设置
MenuStrip
MenuStrip3
食物颜色设置
MenuStrip
MenuStrip4
游戏难度设置
MenuStrip
MenuStrip5
游戏控制说明
MenuStrip
menuExit
退出
Panel
Panel1
显示游戏界面
Butten
Butten1
开始
TextBox
TextBox1
显示积分
2.1b颜色控件设计:
控件类型控件作用
Lable显示选择的颜色
ComboBox选择颜色
Button确定
2.2具体操作:
<1)游戏中,蛇类的实现是关键,在游戏蛇的设计编码中设计了蛇的默认移动方向、大小、判断是否吃到食物等,代码如下:
usingSystem。
usingSystem.Collections。
usingSystem.Drawing。
usingSystem.Windows.Forms。
namespaceSnake
{
///
IIISnakeMod的摘要说明。
///
publicclassSnakeMod
{
〃判断食物是否在蛇身里
privateboolhasFood=false。
〃蛇身介质
privateLabelbody。
〃蛇的颜色
privateColor_color=System.Drawing.Color.SkyBlue
〃颜色属性
publicSystem.Drawing.ColorBodyColor
{
set
{
this._color=value。
}
}
〃蛇的大小
privateSizesize。
〃移动方向默认向西
privateSnake.Wayway=Way.WEST。
publicWaySnakeWay
{
set
{
this.way=value。
}
get
{
returnway。
}
}
//蛇身
privateArrayListsnake。
〃构造函数
publicSnakeMod(>
{
}
//画蛇
publicvoidDrawSnake(>
{
〃设置大小
size=newSize(10,10>。
〃设置身体
snake=newArrayList(>。
for(inti=0。
i<5。
i++>
{
body=newLabel(>。
body.BackColor=_color。
body.Size=size。
body.BorderStyle=System.Windows.Forms.BorderStyle.FixedSingle。
body.Location=newPoint(200+i*10,150>。
snake.Add(body>。
}
}
〃返回蛇体
publicArrayListGetSnake(>
{
returnsnaka
}
〃蛇体移动
publicvoidMove(System.Windows.Forms.Controlcontrol>
{
if(!
this.hasFood>
{
control.Controls.Remove(control.GetChildAtPoint(((Label>snake[snake.Count-1]>.Location>>snake.RemoveAt(snake.CounD
}
Labeltemp=newLabel(>。
this.CopyBody(temp,(Label>snake[0]>。
switch(this.way>
{
casdWay.WEST:
{
temp.Left-=10。
snake.Insert(O,temp>。
breako
}
casdWay.EAST:
{
temp.Left+=10。
snake.Insert(O,temp>。
breako
}
caseWay.NORTH:
{
temp.Top-=10。
snake.Insert(O,temp>。
break。
}
caseWay.SOUTH:
{
temp.Top+=10。
snake.Insert(O,temp>。
breako
}
}
control.Controls.Add((Label>snake[0]>。
if(this.hasFood>
{
this.hasFood=false。
}
}
//copy蛇身
privatevoidCopyBody(Labelx,Labely>
{
x.Location=y.Location。
x.BackColor=y.BackColor。
x.Size=y.Size。
x.BorderStyle=y.BorderStyle。
}
//吃东西
publicboolEat(Pointfood>
{
if(((Label>snake[O]>.Left==food.X&&((Label>snake[0]>.Top==food.Y>
{
〃吃到东西
this.hasFood=true。
returntrue。
}
returnfalseo
}
}
}
<2)【开始】按钮的时间是调用画蛇的函数,开始游戏,并把各控件置于非操
作状态,主要代码如下:
privatevoidbutton1_Click(objectsender,SystemEventArgse>{
〃屏蔽游戏菜单
this.menuItem1.Enabled=false。
this.menultem5.Enabled=false。
//画蛇
this.snake.DrawSnake(>。
game=newThread(newThreadStari(StartGame>>。
game.Start(>。
this.DrawSnake(>。
this.button1.Enabled=false。
this.Focus(>。
}
privatevoidDrawSnake(>
{
lock(this>
{
foreach(Labeltempinsnake.GetSnake(>>
{
this.panel1.Controls.Add(temp>。
}
}
}
〃开始游戏
privatevoidStartGame(>
{
drawDelegate=newDrawDele(PutFood>。
this.Invoke(drawDelegate,null〉。
while(true>
{
Thread.Sleep(speed>
if(this.IsGameOver(>>
{
MessageBoxShow("GAMEOVER">。
try
{
this.game.Abort(>。
}
catch
{
}
}
if(this.snake.Eatthis.foodPoint>>
{
〃改变积分
this.textBox1.Text=System.Convert.ToString(++this.foodCount*10>。
〃消除原本食物
drawDelegate=newDrawDele(KillFood>。
this.Invoke(drawDelegate,null〉。
〃添加新食物
drawDelegate=newDrawDele(PutFood>。
this.Invoke(drawDelegate,null〉。
}
drawDelegate=newDrawDele(MoveSnake>。
this.Invoke(drawDelegate,null〉。
}
}
<3)判断游戏是否结束事件的代码如下:
//是否GameOver
privateboollsGameOver(>
{
ArrayListtemp=this.snake.GetSnake(:
〉
Labelhead=(Label>temp[0]。
foreach(Labellblintemp.GetRange(1,temp.Count-1>>
{
if(lbl.Left==head.Left&&lbl.Top==head.Top>
{
returntrue。
}
}
if(((Label>this.snake.GetSnake(>[O]>.Left==O||((Label>this.snake.GetSnake(>[0]>.Left==390||((Label>this.snake.GetSnake(>[0]>.Top==0||((Label>this.snake.GetSnake(>[0]>.Top==290>{
returntrue。
}
returnfalse。
}
<4)打开颜色设置事件的代码如下:
privatevoidmenuItem2_Click(objectsender,SystemEventArgse>
{
〃蛇体颜色设置
SnakeColortemp=newSnakeColor(>。
if(temp.ShowDialog(this>==DialogResult.OK>
{
this.snake.BodyColor=temp.Color。
temp.Dispose(>。
}
}privatevoidmenultem3_Click(objectsender,SystemEventArgse>{
〃食物颜色设置
SnakeColortemp=newSnakeColor(>。
if(temp.ShowDialog(this>==DialogResult.OK>
{
this.foodColor=temp.Color。
temp.Dispose(>。
}
}
3.测试报告
3.1游戏的测试
游戏的开始:
游戏死亡情况:
(1)撞墙:
(2)撞自身:
测试结果
综上,游戏可以按原预想运行,没发现错误。
3.2测试的意义:
游戏的测试时为了发现错误而执行的过程,成功的测试是发现了至今尚未发现的错误的测试。
测试的目的就是希望能以最少的人力和时间发现潜在的各种错误和缺陷。
游戏的测试是保证系统质量和可靠性的关键步骤,是对游戏开发过程中的系统分析设计和实施的最后复查。
4.参考文献:
《C#课程设计案例精编》
《C#.NET程序设计》
5.课程设计总结:
<1)注意:
本程序由于个人技术有限,在很多方面还没有完善,如,在用方向键控制蛇的运动方向时,不能同时两个键一起按,或是两个键之间的时间间隔很短,那样蛇会出现异常死亡的状况,所以使用时还请注意。
<2)收获:
通过做贪吃蛇游戏,对用C#图形界面编程有了更好的掌握;对面向对象的
方法有了更深刻的理解;对具体控件、组件的运用也更加熟练;用所学知识来解决具体问题的能力也因此提高了。
同时,在这次练习的过程中,一开始没有用软件设计的思维去做,甚至连流程图都没有画,导致一开始的时候漫无目的,失败了很多。
让我认识到了从软件工程的角度出发的必要性,做好充分的准备工作,然后着手编写代码。
在做贪吃蛇的过程中,也遇到过很多问题,比如,不清楚怎么判断蛇是否死亡,不清楚蛇是否吃了食物等。
最后通过询问同学,查找资料等方法成功解决。
至此,我明白了软件工程角度的重要性和自身实力的欠缺,要更加努力的学习和掌握更多知识。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程 方案 贪吃 编制
![提示](https://static.bdocx.com/images/bang_tan.gif)