C#编程 贪吃蛇小游戏.docx

上传人:b****8 文档编号:10404305 上传时间:2023-02-11 格式:DOCX 页数:16 大小:22.20KB
下载 相关 举报
C#编程 贪吃蛇小游戏.docx_第1页
第1页 / 共16页
C#编程 贪吃蛇小游戏.docx_第2页
第2页 / 共16页
C#编程 贪吃蛇小游戏.docx_第3页
第3页 / 共16页
C#编程 贪吃蛇小游戏.docx_第4页
第4页 / 共16页
C#编程 贪吃蛇小游戏.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

C#编程 贪吃蛇小游戏.docx

《C#编程 贪吃蛇小游戏.docx》由会员分享,可在线阅读,更多相关《C#编程 贪吃蛇小游戏.docx(16页珍藏版)》请在冰豆网上搜索。

C#编程 贪吃蛇小游戏.docx

C#编程贪吃蛇小游戏

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

{

publicpartialclassForm1:

Form

{

Foodfood=newFood();

Snakesnake=newSnake();

privateintscore;

publicForm1()

{

InitializeComponent();

timer1.Enabled=false;//timer是否可用

timer1.Interval=snake.Speed;//蛇初始速度

score=0;

}

Point[]body=newPoint[1000];//蛇最大长度

privatevoid操作ToolStripMenuItem_Click(objectsender,EventArgse)

{

}

protectedoverrideboolProcessDialogKey(KeyskeyData)

{

switch(keyData)

{

caseKeys.Up:

if(snake.Direction!

=Direction.down)

{

snake.Direction=Direction.up;

}

break;

caseKeys.Down:

if(snake.Direction!

=Direction.up)

{

snake.Direction=Direction.down;

}

break;

caseKeys.Left:

if(snake.Direction!

=Direction.right)

{

snake.Direction=Direction.left;

}

break;

caseKeys.Right:

if(snake.Direction!

=Direction.left)

{

snake.Direction=Direction.right;

}

break;

}

returnbase.ProcessDialogKey(keyData);

}

privatevoidmenuStrip1_ItemClicked(objectsender,ToolStripItemClickedEventArgse)

{

}

privatevoid开始游戏ToolStripMenuItem_Click(objectsender,EventArgse)

{

label2.Text="0";

score=0;

timer1.Enabled=true;

if(snake.Live==false)

{

snake=newSnake();

snake.resetSnake();

label2.Text="0";

score=0;

timer1.Enabled=true;

}

}

privatevoid关卡设定ToolStripMenuItem_Click(objectsender,EventArgse)

{

}

privatevoid暂停游戏ToolStripMenuItem_Click(objectsender,EventArgse)

{

if(暂停游戏ToolStripMenuItem.Text=="暂停游戏")

{

timer1.Enabled=false;

暂停游戏ToolStripMenuItem.Text="继续";

}

else

{

timer1.Enabled=true;

暂停游戏ToolStripMenuItem.Text="暂停游戏";

}

}

privatevoid退出游戏ToolStripMenuItem_Click(objectsender,EventArgse)

{

this.Close();

}

privatevoid第一关ToolStripMenuItem_Click(objectsender,EventArgse)

{

timer1.Interval=200;

}

privatevoid第二关ToolStripMenuItem_Click(objectsender,EventArgse)

{

timer1.Interval=150;

}

privatevoid第三关ToolStripMenuItem_Click(objectsender,EventArgse)

{

timer1.Interval=100;

}

privatevoid第四关ToolStripMenuItem_Click(objectsender,EventArgse)

{

timer1.Interval=50;

}

privatevoid第五关ToolStripMenuItem_Click(objectsender,EventArgse)

{

timer1.Interval=30;

}

privatevoidtimer1_Tick(objectsender,EventArgse)

{

snake.Move();

panel1.Invalidate();//蛇运动后,把picturebox1当前界面设为无效,并引发paint事件,重新绘制界面

}

privatevoidpanel1_Paint(objectsender,PaintEventArgse)

{

Graphicsg=e.Graphics;

snake.Draw(g);//画蛇

if(snake.live==false)

{

timer1.Enabled=false;//timer1不可用

}

if(snake.Body[0].X==food.Position.X&&snake.Body[0].Y==food.Position.Y)

{

snake.Eat(food);

food.Exist=false;

score+=10;

label2.Text=score.ToString();

}

if(food.Exist)

{

food.Draw(g);

}

else

{

food.Position=food.createdFood();//重新创造绘制食物

food.Exist=true;

food.Draw(g);

}

}

}

}

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Windows.Forms;

usingSystem.Media;

usingSystem.IO;

namespace项目5

{

classBlock

{

 

}

 

publicenumDirection

{

up,down,left,right,

}

classSnake

{

publicintscore;

publicconstintside=10;//蛇身每个节点长度

Point[]body=newPoint[600];//蛇身最大长度

Directiondirection;//蛇初始移动方向

publicboollive;//蛇存活状态

intnumber;//蛇身节点个数

intspeed=120;//蛇的初始速度

publicintSpeed//Speed属性

{

get

{

returnspeed;

}

set

{

speed=value;

}

}

publicDirectionDirection//Direction的属性

{

get

{

returndirection;

}

set

{

direction=value;

}

}

publicboolLive//Live的属性

{

get

{

returnlive;

}

set

{

live=value;

}

}

publicPoint[]Body//Body属性

{

get

{

returnbody;

}

}

publicSnake()//蛇类的构造器初始值

{

Pointnode1=newPoint(100,50);

Pointnode2=newPoint(90,50);

body[0]=node1;

body[1]=node2;

number=2;

direction=Direction.right;

live=true;

}

publicvoidMove()//蛇的移动

{

for(inti=this.number-1;i>0;i--)//蛇移动的方式

{

body[i]=body[i-1];

}

switch(this.direction)//蛇移动的方向

{

caseDirection.up:

body[0].Y-=side;

break;

caseDirection.down:

body[0].Y+=side;

break;

caseDirection.left:

body[0].X-=side;

break;

caseDirection.right:

body[0].X+=side;

break;

}

if(body[0].X<10||body[0].X>537||body[0].Y<10||body[0].Y>346)//蛇撞四壁挂

{

this.live=false;

}

for(inti=1;i<=number-1;i++)

{

if(body[0].X==body[i].X&&body[0].Y==body[i].Y)

{

this.live=false;

}

}

}

publicvoidEat(Foodfood)//蛇吃食物

{

Labellabel2=newLabel();

body[number]=food.Position;

this.number++;//长度加

score+=2;

label2.Text=Convert.ToString(score);

}

publicvoidDraw(Graphicsg)//绘制蛇

{

SolidBrushRedBrush=newSolidBrush(Color.Red);

g.DrawEllipse(Pens.Red,body[0].X,body[0].Y,side,side);

g.FillEllipse(RedBrush,body[0].X,body[0].Y,side,side);

for(inti=1;i<=number-1;i++)

{

g.DrawRectangle(Pens.Red,body[i].X,body[i].Y,side,side);

g.FillRectangle(RedBrush,body[i].X,body[i].Y,side,side);

}

if(this.live==false)

{

g.DrawString("GameOver!

",newFont("宋体",36,FontStyle.Bold),RedBrush,newPoint(100,150));

}

}

publicvoidresetSnake()//重新设置蛇

{

Pointnode1=newPoint(100,320);

Pointnode2=newPoint(90,320);

body[1]=node1;

body[0]=node2;

number=2;

direction=Direction.right;

live=true;

}

}

 

classFood

{

Pointposition;//食物位置

Booleanexist;//判断失误是否存在

publicFood()

{

position=this.createdFood();

exist=true;

}

publicPointPosition//Position的属性

{

get

{

returnposition;

}

set

{

position=value;

}

}

publicBooleanExist//Exist属性

{

get

{

returnexist;

}

set

{

exist=value;

}

}

publicPointcreatedFood()//随机产生食物

{

Pointposition=newPoint();

Randomran=newRandom();

position.X=ran.Next(1,30)*10;

position.Y=ran.Next(1,30)*10;

returnposition;

}

publicvoidDraw(Graphicsg)//绘制食物

{

SolidBrushgreenBrush=newSolidBrush(Color.Green);

g.FillEllipse(greenBrush,position.X,position.Y,10,10);

}

}

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1