📄 tankgame2008.cs
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Media;
namespace TankGame2008
{
public partial class TankGame2008 : Form
{
public TankGame2008()
{
InitializeComponent();
}
const int EnemyNum = 4;
int myTankWidth, myTankHeight;
int enemyTankWidth, enemyTankHeight;
int myTankX, myTankY;
int enemyTankX, enemyTankY;
int destroyEnemyNum = 0;
public int destroyEnemyNumber
{
get
{
return destroyEnemyNum;
}
set
{
destroyEnemyNum = value;
}
}
Image myTankSrcImg;
Image enemyTankSrcImg;
Image shellSrcImg;
Image[] myTankImg;
Image[] enemyTankImg;
PlayerTankSprite myTankSprite;
EnemyTankSprite[] enemyTank;
TankThread threadTank;
ShellSprite MyShell;
public ShellSprite myShell
{
get { return MyShell; }
}
ShellSprite[] enemyShell;
public ShellSprite[] EnemyShell
{
get { return enemyShell; }
}
Image[] ShellImg;
Explosion explosion;
Image[] explosionImg;
Image explosionSrcImg;
Image bufferImage;
Graphics bufferGraphics;
Random rand;
Image back;
private void TankGame2008_Load(object sender, EventArgs e)
{
myTankImg = new Image[4];
enemyTankImg = new Image[4];
ShellImg = new Image[2];
explosionSrcImg = Image.FromFile(@"..\..\pic\explosion.gif");
myTankSrcImg = Image.FromFile(@"..\..\pic\PlayerTank\myTankSrcImg.png");
enemyTankSrcImg = Image.FromFile(@"..\..\pic\enemyTank\enemyTankSrcImg.png");
shellSrcImg = Image.FromFile(@"..\..\pic\shellSrcImg.png");
explosionImg = getClipImage.getImages(explosionSrcImg, 1, 8);
myTankImg = getClipImage.getImages(myTankSrcImg, 1, 4);
enemyTankImg = getClipImage.getImages(enemyTankSrcImg, 1, 4);
ShellImg = getClipImage.getImages(shellSrcImg, 1, 1);
myTankWidth = myTankSrcImg.Width / 4;
myTankHeight = myTankSrcImg.Height;
enemyTankWidth = enemyTankSrcImg.Width / 4;
enemyTankHeight = enemyTankSrcImg.Height;
myTankX = (this.Width - myTankWidth) / 2;
myTankY = this.Height - myTankHeight;
//缓冲
SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
bufferImage = new Bitmap(this.Width, this.Height);
bufferGraphics = Graphics.FromImage(bufferImage);
bool focus = this.Focus();
rand = new Random();
MyShell = new ShellSprite(ShellImg[0], 0, 10, this);
MyShell.setWidthHeight(ShellImg[0].Width, ShellImg[0].Height);
explosion = new Explosion(explosionImg, this);
myTankSprite = new PlayerTankSprite(myTankImg, myTankX, myTankY, this);
myTankSprite.setWidthHeight(myTankWidth, myTankHeight);
enemyTank = new EnemyTankSprite[EnemyNum];
enemyShell = new ShellSprite[EnemyNum];
createNewEnemyTank();
this.start();
back = Image.FromFile(@"..\..\pic\Bckscrn.png");
}
public void start()
{
threadTank = new TankThread(this, myTankSprite, enemyTank, MyShell, enemyShell, explosion);
threadTank.startRuning();
}
public void stop()
{
threadTank = null;
}
public void createNewEnemyTank()
{
for (int i = 0; i < EnemyNum; i++)
{
enemyTankX = i * 100;
enemyTankY = 0;
enemyShell[i] = new ShellSprite(ShellImg[0], 0, 4, this);
enemyShell[i].setWidthHeight(shellSrcImg.Width, shellSrcImg.Height);
enemyTank[i] = new EnemyTankSprite(enemyTankImg, enemyTankX, enemyTankY, this);
enemyTank[i].setTankDirection(rand.Next(4));
enemyTank[i].setVisible(true);
enemyTank[i].setActive(true);
}
}
public void recreateEnemyTank()
{
if (destroyEnemyNum == EnemyNum)
{
destroyEnemyNum = 0;
createNewEnemyTank();
}
}
private void TankGame2008_Paint(object sender, PaintEventArgs e)
{
bufferGraphics.DrawImage(back, new Point(0, 0));
recreateEnemyTank();
for (int i = 0; i < EnemyNum; i++)
{
if (enemyTank[i].getVisible() == true)
{
enemyTank[i].setWidthHeight(enemyTankWidth, enemyTankHeight);
enemyTank[i].drawSprite(bufferGraphics, enemyTank[i].getTankDirection());
enemyShell[i].drawSprite(bufferGraphics);
int k = rand.Next(10000);
if (k % 2 != 0 && k < 30)
{
enemyTank[i].setTankDirection(rand.Next(12) % 4);
}
}
}
myTankSprite.drawSprite(bufferGraphics, myTankSprite.getTankDirection());
MyShell.drawSprite(bufferGraphics);
explosion.drawSprite(bufferGraphics);
e.Graphics.DrawImage(bufferImage, 0F, 0F);
}
private void TankGame2008_KeyDown(object sender, KeyEventArgs e)
{
myTankSprite.keyDown(e.KeyValue);
}
private void TankGame2008_KeyUp(object sender, KeyEventArgs e)
{
myTankSprite.keyReleased();
}
public void update(Graphics g)
{
TankGame2008_Paint(null, null);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -