C#编程 [“贪吃蛇”小游戏]

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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,

相关文档
最新文档