坦克大战V1.0——made by JIN LI YANG
1.以picturebox为画板,实现了,画面流畅,稳定。
2.实现了敌军tank一定的智能。
3.实现了,保存,打开功能。
4.修复了部分BUG,使得游戏更加稳定。
1.以picturebox为画板,实现了,画面流畅,稳定。
2.实现了敌军tank一定的智能。
3.实现了,保存,打开功能。
4.修复了部分BUG,使得游戏更加稳定。
5.采用tank类、bullet类、obstacle类,使代码层次更加清晰。
tank.cs
namespace TankBattle
{
class Tank
{
private int width; //坦克的宽度
private int height; //坦克的高度
private int x;
private int y;
private int type;//坦克的类型(2---5敌方,6己方)
private int direct;//0--上,1--下,2--左,3--右 4 静止
private int speed = 2;
private bool canMove = false;//坦克能否移动
private int bornTime = 0;//出生时间 小于50,不能移动
//我方坦克位图数组
Bitmap[] myTankBmp = new Bitmap[4];
//敌方坦克位图数组
Bitmap[,] enemyTankBmp = new Bitmap[6, 4];
Bitmap[] exploreBmp = new Bitmap[5];//爆炸位图
Bitmap[] bornBmp = new Bitmap[4];//产生位图
private int exploreCount = 0;//
public void newBmp()
{
int i;
myTankBmp[0] = new Bitmap("Images/Player1NormalUp1.gif");
myTankBmp[1] = new Bitmap("Images/Player1NormalDown1.gif");
myTankBmp[2] = new Bitmap("Images/Player1NormalLeft1.gif");
myTankBmp[3] = new Bitmap("Images/Player1NormalRight1.gif");
for (i = 0; i < 4; i++)
myTankBmp[i].MakeTransparent(Color.Black);
enemyTankBmp[2, 0] = new Bitmap("Images//AIFastUp1.gif");
enemyTankBmp[2, 1] = new Bitmap("Images//AIFastDown1.gif");
enemyTankBmp[2, 2] = new Bitmap("Images//AIFastLeft1.gif");
enemyTankBmp[2, 3] = new Bitmap("Images//AIFastRight1.gif");
enemyTankBmp[3, 0] = new Bitmap("Images//AINormalUp1.gif");
enemyTankBmp[3, 1] = new Bitmap("Images//AINormalDown1.gif");
enemyTankBmp[3, 2] = new Bitmap("Images//AINormalLeft1.gif");
enemyTankBmp[3, 3] = new Bitmap("Images//AINormalRight1.gif");
enemyTankBmp[4, 0] = new Bitmap("Images//AIStrongUp1.gif");
enemyTankBmp[4, 1] = new Bitmap("Images//AIStrongDown1.gif");
enemyTankBmp[4, 2] = new Bitmap("Images//AIStrongLeft1.gif");
enemyTankBmp[4, 3] = new Bitmap("Images//AIStrongRight1.gif");
for (int j = 2; j < 5; j++)
for (i = 0; i < 4; i++)
enemyTankBmp[j, i].MakeTransparent(Color.Black);
exploreBmp[0] = new Bitmap("Images//Boom1.gif");
exploreBmp[1] = new Bitmap("Images//Boom2.gif");
exploreBmp[2] = new Bitmap("Images//Boom3.gif");
exploreBmp[3] = new Bitmap("Images//Boom4.gif");
exploreBmp[4] = new Bitmap("Images//Boom5.gif");
for (i = 0; i < 5; i++)
exploreBmp[i].MakeTransparent(Color.Black);
bornBmp[0] = new Bitmap("Images//born1.gif");
bornBmp[1] = new Bitmap("Images//born2.gif");
bornBmp[2] = new Bitmap("Images//born3.gif");
bornBmp[3] = new Bitmap("Images//born4.gif");
for (i = 0; i < 4; i++)
bornBmp[i].MakeTransparent(Color.Black);
}
public Tank()
{
this.width = 30;
this.height = 30;
this.direct = 0;
newBmp();
}
public Tank(int tank_type)//构造函数
{
Random r = new Random();
this.direct = r.Next(0, 4);//产生0—3的数
this.width = 30;
this.height = 30;
this.x = r.Next(0, 420);//产生0—420的数
this.y = 30;//
this.type = tank_type;
newBmp();
}
public int Y//Y属性
{
get
{
return y;
}
set
{
y = value;
}
}
public int X//X属性
{
get
{
return x;
}
set
{
x = value;
}
}
public int Type//type属性
{
get { return type; }
set
{
if (type >= 0 && type <= 6)
{
type = value;
}
}
}
public int Direct//direct属性
{
get
{
return direct;
}
set
{
direct = value;
}
}
public bool CanMove
{
get
{
return canMove;
}
set
{
canMove = value;
}
}
public int BornTime//
{
get
{
return bornTime;
}
set
{
bornTime = value;
}
}
public int ExploreCount//
{
get
{
return exploreCount;
}
set
{
exploreCount = value;
}
}
public void PlaySound(string wavFile)//播放音乐
{
SoundPlayer soundPlayer = new SoundPlayer(wavFile);
soundPlayer.Play();
}
public void Draw(Graphics g)//根据坦克类型选择不同图片
{
if (bornTime < 50)
{
bornTime++;
canMove = false;
return;
}
else
bornTime++;
Move();
Rectangle Rect = new Rectangle(x, y, 30, 30);
if (type == 6)
g.DrawImage(myTankBmp[direct], Rect);
else
g.DrawImage(enemyTankBmp[type, direct], Rect);
}
public void Explore(Graphics g)//坦克爆炸动画
{
Rectangle Rect = new Rectangle(x, y, 30, 30);
g.DrawImage(exploreBmp[exploreCount%5], Rect);
exploreCount++;
PlaySound("Sounds//Bomb.WAV");
}
public void Born(Graphics g)//tank产生动画
{
if (bornTime < 48)
{
Rectangle Rect = new Rectangle(x, y, 30, 30);
switch (bornTime % 8)
{
case 0:
case 1:
g.DrawImage(bornBmp[0], Rect);
break;
case 2:
case 3:
g.DrawImage(bornBmp[1], Rect);
break;
case 4:
case 5:
g.DrawImage(bornBmp[2], Rect);
break;
case 6:
case 7:
g.DrawImage(bornBmp[3], Rect);
break;
}
bornTime++;
}
}
//键按下的方法
public void KeyDown(KeyEventArgs e)
{
if (e.KeyCode == Keys.W || e.KeyCode == Keys.Up)
{
direct = 0;
canMove = true;
}
else if (e.KeyCode == Keys.S || e.KeyCode == Keys.Down)
{
direct = 1;
canMove = true;
}
else if (e.KeyCode == Keys.A || e.KeyCode == Keys.Left)
{
direct = 2;
canMove = true;
}
else if (e.KeyCode == Keys.D || e.KeyCode == Keys.Right)
{
direct = 3;
canMove = true;
}
}
public void KeyUp(KeyEventArgs e)
{
if (e.KeyCode == Keys.W || e.KeyCode == Keys.Up)
{
canMove = false;
}
else if (e.KeyCode == Keys.S || e.KeyCode == Keys.Down)
{
canMove = false;
}
else if (e.KeyCode == Keys.A || e.KeyCode == Keys.Left)
{
canMove = false;
}
else if (e.KeyCode == Keys.D || e.KeyCode == Keys.Right)
{
canMove = false;
}