📄 tankgame611.java
字号:
package tankgame611;
import java.awt.MediaTracker;
import java.awt.Image;
import java.applet.*;
import java.applet.Applet;
import java.awt.Graphics;
import java.util.Random;
public class TankGame611 extends Applet {
public final int StateBarWidth=100;
final int EnemyNum=3;
int myTankWidth, myTankHeight;
int enemyTankWidth,enemyTankHeight;
int enemyTankX,enemyTankY;
int myTankX, myTankY;
int destroyEnemyNum=0;
Image myTankSrcImg;
Image enemyTankSrcImg;
Image shellSrcImg;
Image bufferImage;
Image bckImage;
Image myTankImg[];
Image enemyTankImg[];
Graphics bufferGraphic;
MediaTracker MT;
PlayTankSprite myTankSprite;
EnemyTankSprite[] enemyTank;
TankThread threadTank;
ShellSprite MyShell;
ShellSprite[] enemyShell;
public Image shellImg[];
Explosion explosion;
Image explosionImg[];
Image explosionSrcImg;
private AudioClip explAudio,bkMusicAudio,gameOverAudio;
Random rand;
private int killEnemyNum=0;
private int leftEnemyNum=9;
private int LifeBlood=100;
private int GameScores=0;
private boolean isGameOver=false;
private DrawMap drawGameMap;
private Image TileSrcImg;
public static final int TILE_WIDTH=32;
public static final int TILE_HEIGHT=32;
public static final int TILE_ROWS=1;
public static final int TILE_COLS=5;
public static final int MAP_ROWS=18;
public static final int MAP_COLS=22;
public void init() {
MT = new MediaTracker(this);
myTankImg = new Image[4];
enemyTankImg = new Image[4];
shellImg = new Image[2];
bkMusicAudio = getAudioClip(getDocumentBase(), "audio/Music.mid");
explAudio = getAudioClip(getDocumentBase(), "audio/Explosion.wav");
gameOverAudio = getAudioClip(getDocumentBase(), "audio/GameOver.wav");
explosionSrcImg = getImage(getDocumentBase(), "pic/explosion.gif");
myTankSrcImg = getImage(getDocumentBase(), "pic/Tank.png");
enemyTankSrcImg = getImage(getDocumentBase(), "pic/ETank.png");
shellSrcImg = getImage(getDocumentBase(), "pic/Shell.png");
TileSrcImg=getImage(getDocumentBase(),"pic/walls.png");
MT.addImage(explosionSrcImg, 0);
MT.addImage(myTankSrcImg, 0);
MT.addImage(enemyTankSrcImg, 0);
MT.addImage(shellSrcImg, 0);
MT.addImage(TileSrcImg,0);
try {
MT.waitForAll();
}
catch (InterruptedException E) {}
explosionImg = GetClipImage.getImages(explosionSrcImg, 8, 34, 33);
myTankImg = GetClipImage.getImages(myTankSrcImg, 4, 45, 45);
enemyTankImg = GetClipImage.getImages(enemyTankSrcImg, 4, 45, 45);
shellImg = GetClipImage.getImages(shellSrcImg, 2, 10, 10);
myTankWidth = myTankSrcImg.getWidth(this) / 4;
myTankHeight = myTankSrcImg.getHeight(this);
enemyTankWidth = enemyTankSrcImg.getWidth(this) / 4;
enemyTankHeight = enemyTankSrcImg.getHeight(this);
myTankX = TILE_WIDTH*7;
myTankY = this.getHeight() - myTankHeight-1;
bufferImage = this.createImage(this.getWidth(), this.getHeight());
bufferGraphic = bufferImage.getGraphics();
this.setFocusable(true);
this.resize(this.getWidth(), this.getHeight());
rand = new Random();
explosion = new Explosion(explosionImg, this);
MyShell=new ShellSprite(shellImg[0], 0, 20, explosion,this);
MyShell.setSize(shellSrcImg.getWidth(this) / 2,
shellSrcImg.getHeight(this) / 2);
myTankSprite = new PlayTankSprite(myTankImg, myTankX, myTankY, MyShell, this);
myTankSprite.setSize(myTankWidth,myTankHeight);
myTankSprite.setLocation(myTankX, myTankY);
enemyTank = new EnemyTankSprite[EnemyNum];
enemyShell = new ShellSprite[EnemyNum];
createNewEnemyTank();
drawGameMap=new DrawMap(this,TileSrcImg,TILE_WIDTH,TILE_HEIGHT,TILE_ROWS,TILE_COLS,MAP_ROWS,MAP_COLS);
}
public void start() {
threadTank = new TankThread(this, myTankSprite, enemyTank, MyShell,
enemyShell, explosion);
threadTank.start();
}
public void stop() {
threadTank = null;
}
public void createNewEnemyTank() {
for (int i = 0; i < EnemyNum; i++) {
int a=i;
if(a>=3)a=0;
switch(a){
case 0:
enemyTankX=1;
enemyTankY=1;
break;
case 1:
enemyTankX=this.getWidth()-DrawGameState.StatusBarWidth-enemyTankWidth-1;
enemyTankY=1;
break;
case 2:
enemyTankX=(this.getWidth()-enemyTankWidth)/2;
enemyTankY=1;
}
enemyShell[i] = new ShellSprite(shellImg[1], 0, 4,explosion,this);
enemyShell[i].setSize(shellSrcImg.getWidth(this) / 2,
shellSrcImg.getHeight(this) / 2);
enemyShell[i].setVisible(true);
enemyShell[i].setMove(true);
enemyTank[i] = new EnemyTankSprite(enemyTankImg, enemyTankX, enemyTankY,
enemyShell[i], this);
enemyTank[i].setSize(enemyTankWidth, enemyTankHeight);
enemyTank[i].setTankDirection(rand.nextInt(12) % 4);
enemyTank[i].setVisible(true);
enemyTank[i].setMove(true);
}
}
public void recreateEnemyTank() {
if (killEnemyNum == EnemyNum) {
killEnemyNum = 0;
createNewEnemyTank();
}
}
public void paint(Graphics g) {
if (isGameOver == false) {
bufferGraphic.clearRect(0, 0, this.getWidth(), this.getHeight());
drawGameMap.PaintMaps(bufferGraphic);
recreateEnemyTank();
for (int i = 0; i < EnemyNum; i++) {
if (enemyTank[i].visible == true) {
enemyTank[i].paintSprite(bufferGraphic, enemyTank[i].getTankDirection());
enemyShell[i].paintSprite(bufferGraphic);
int k = rand.nextInt(10000);
int d = rand.nextInt(12) % 4;
if (k % 2 != 0 && k < 100) {
enemyTank[i].setTankDirection(d);
}
if (myTankSprite.isCollided(enemyTank[i])) {
setExplosionPosition(enemyTank[i]);
explosion.setVisible(true);
enemyTank[i].setMove(false);
enemyTank[i].setVisible(false);
killEnemyNum = killEnemyNum + 1;
}
if (MyShell.isCollided(enemyTank[i])) {
setExplosionPosition(enemyTank[i]);
explosion.setVisible(true);
enemyTank[i].setMove(false);
enemyTank[i].setVisible(false);
MyShell.setMove(false);
MyShell.setVisible(false);
killEnemyNum = killEnemyNum + 1;
leftEnemyNum = leftEnemyNum - 1;
GameScores = GameScores + 100;
}
if (enemyShell[i].isCollided(myTankSprite)) {
setExplosionPosition(myTankSprite);
explosion.setVisible(true);
LifeBlood = LifeBlood - 5;
}
}
}
myTankSprite.paintSprite(bufferGraphic, myTankSprite.getTankDirection());
explosion.drawSprite(bufferGraphic);
MyShell.paintSprite(bufferGraphic);
DrawGameState.drawStatus(bufferGraphic, LifeBlood, leftEnemyNum,
enemyTankImg[0], GameScores, this);
g.drawImage(bufferImage, 0, 0, this);
}
if (LifeBlood <= 0) {
drawGameMap.PaintMaps(bufferGraphic);
DrawGameState.drawGameMessage(bufferGraphic, "Game Over", this.getWidth(),
this.getHeight());
isGameOver = true;
gameOverAudio.play();
g.drawImage(bufferImage, 0, 0, this);
}
if (leftEnemyNum == 0) {
drawGameMap.PaintMaps(bufferGraphic);
DrawGameState.drawGameMessage(bufferGraphic, "You Win!", this.getWidth(),
this.getHeight());
isGameOver = true;
g.drawImage(bufferImage, 0, 0, this);
}
}
public void setExplosionPosition(AbstractSprite sprite) {
int dir = 0;
if (sprite instanceof EnemyTankSprite) {
dir = ( (EnemyTankSprite) sprite).getTankDirection();
}
if (sprite instanceof PlayTankSprite) {
dir = ( (PlayTankSprite) sprite).getTankDirection();
}
switch (dir) {
case 0:
case 1:
explosion.setLocation(sprite.getX() + sprite.getWidth() / 2,
sprite.getY() + sprite.getHeight() / 2);
break;
case 2:
case 3:
explosion.setLocation(sprite.getX() + sprite.getHeight() / 2,
sprite.getY() + sprite.getWidth() / 2);
}
}
public void update(Graphics g) {
paint(g);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -