C#编程 [“贪吃蛇”小游戏]
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C#编程 [“贪吃蛇”小游戏]
一、项目内容及要求
编程实现一个“贪吃蛇”小游戏,具体要求如下:
1)程序启动后,蛇身默认向右移动,直到用户按下方向键改变运动方向。
2)玩家通过键盘上的上、下、左、右四个方向键控制蛇在地图上寻找豆,蛇吃下豆后,蛇身加长一节。
3)界面上任意时刻同时会有三个豆,豆的位置随机生成,定时刷新。
4)在游戏过程中,若蛇头碰到场地边界或自己的身体,则游戏失败。
二、算法分析
一、控件设计
1)主菜单控件 MenuStrip
2)面板控件 Panel:背景色为黄色
3)标签控件 Label1、Label2
二、类设计
1)Game类,入口主窗体、游戏界面类。Game类的主要功能包括控制游戏的开始与暂停、选择游戏关卡、声明并创建蛇的行为及豆的行为线程,启动线程。
2)Block类:代表蛇和豆一个节点的块类,游戏中需要绘制的块分为以下三种情况:(1)蛇头:红色椭圆(2)蛇身:红色矩形(3)豆:绿色椭圆添加类的属性:块的颜色、是否蛇头、是否豆,横坐标X、纵坐标Y
添加类的行为:绘制块draw()方法,构造函数(判断是否豆),重载构造函数
3)Snake类:定义游戏中的蛇。其属性包括蛇移动的方向以及蛇身的集合(泛型集合List<>);其行为成员包括蛇吃豆、吃过豆之后蛇身增长、蛇身移动以及判断蛇是否死亡等。
4)Beans类:定义游戏中的豆。其属性包括3个豆组成的列表(List<>);其行为成员包括定时刷新豆的集合以及移除某个豆。
三、界面及运行过程
四、关键代码
(代码要求注释完整,例如:变量的作用,语句的作用,方法的功能等都要加注释说明)
namespace项目5
{
public partial class Form1 : Form
{
Food food = new Food();
Snake snake = new Snake();
private int score;
public Form1()
{
InitializeComponent();
timer1.Enabled = false;//timer是否可用
timer1.Interval = snake.Speed; //蛇初始速度
score = 0;
}
Point[] body = new Point[1000]; //蛇最大长度
private void操作ToolStripMenuItem_Click(object sender,
{
}
protected override bool ProcessDialogKey(Keys keyData)
{
switch (keyData)
{
case Keys.Up:
if (snake.Direction != Direction.down)
{
snake.Direction = Direction.up;
}
break;
case Keys.Down:
if (snake.Direction != Direction.up)
{
snake.Direction = Direction.down;
}
break;
case Keys.Left:
if (snake.Direction != Direction.right)
{
snake.Direction = Direction.left;
}
break;
case Keys.Right:
if (snake.Direction != Direction.left)
{
snake.Direction = Direction.right;
}
break;
}
return base.ProcessDialogKey(keyData);
}
private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
}
private void开始游戏ToolStripMenuItem_Click(object sender,
{
label2.Text = "0";
score = 0;
timer1.Enabled = true;
if (snake.Live == false)
{
snake = new Snake();
snake.resetSnake();
label2.Text = "0";
score = 0;
timer1.Enabled = true;
}
}
private void关卡设定ToolStripMenuItem_Click(object sender, EventArgs e)
{
}
private void暂停游戏ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (暂停游戏ToolStripMenuItem.Text == "暂停游戏")
{
timer1.Enabled = false;
暂停游戏ToolStripMenuItem.Text = "继续";
}
else
{
timer1.Enabled = true;
暂停游戏ToolStripMenuItem.Text = "暂停游戏";
}
}
private void退出游戏ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
}
private void第一关ToolStripMenuItem_Click(object sender,