📄 tankgame611.java
字号:
package tankgame611;
import java.awt.*;
import java.awt.Image;
import java.applet.*;
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.MediaTracker;
import java.util.Random;
public class TankGame611 extends Applet {
final int EnemyNum=4;
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;
public void init() {
MT = new MediaTracker(this);
bckImage = getImage(getDocumentBase(), "pic/Bckscrn.png");
MT.addImage(bckImage, 0);
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");
MT.addImage(explosionSrcImg, 0);
MT.addImage(myTankSrcImg, 0);
MT.addImage(enemyTankSrcImg, 0);
MT.addImage(shellSrcImg, 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 = (this.getWidth() - myTankWidth) / 2;
myTankY = (this.getHeight() - myTankHeight);
bufferImage = this.createImage(this.getWidth(), this.getHeight());
bufferGraphic = bufferImage.getGraphics();
this.setFocusable(true);
this.resize(this.getWidth(), this.getHeight());
rand = new Random();
MyShell = new ShellSprite(shellImg[0], 0, 20, this);
MyShell.setWidthHeight(shellSrcImg.getWidth(this) / 2,
shellSrcImg.getHeight(this) / 2);
explosion = new Explosion(explosionImg, this);
myTankSprite = new PlayTankSprite(myTankImg, myTankX, myTankY, MyShell, this);
myTankSprite.setWidthHeight(myTankWidth, myTankHeight);
enemyTank = new EnemyTankSprite[EnemyNum];
enemyShell = new ShellSprite[EnemyNum];
createNewEnemyTank();
}
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++) {
enemyTankX = rand.nextInt(10000) % (this.getWidth() - enemyTankWidth);
enemyTankY = rand.nextInt(10000) % (this.getHeight() - enemyTankHeight);
enemyShell[i] = new ShellSprite(shellImg[1], 0, 5, this);
enemyShell[i].setWidthHeight(shellSrcImg.getWidth(this) / 2,
shellSrcImg.getHeight(this) / 2);
enemyShell[i].setVisible(true);
enemyShell[i].setActive(true);
enemyTank[i] = new EnemyTankSprite(enemyTankImg, enemyTankX, enemyTankY,
enemyShell[i], this);
enemyTank[i].setWidthHeight(enemyTankWidth, enemyTankHeight);
enemyTank[i].setTankDirection(rand.nextInt(12) % 4);
enemyTank[i].setVisible(true);
enemyTank[i].setActive(true);
}
}
public void recreateEnemyTank() {
if (destroyEnemyNum == EnemyNum) {
destroyEnemyNum = 0;
createNewEnemyTank();
}
}
public void paint(Graphics g) {
bufferGraphic.clearRect(0, 0, this.getWidth(), this.getHeight());
recreateEnemyTank();
for (int i = 0; i < EnemyNum; i++) {
if (enemyTank[i].visible == true) {
enemyTank[i].drawSprite(bufferGraphic, enemyTank[i].getTankDirection());
enemyShell[i].drawSprite(bufferGraphic);
int k = rand.nextInt(10000);
int d = rand.nextInt(12) % 4;
if (k % 2 != 0 && k < 30) {
enemyTank[i].setTankDirection(d);
}
if (myTankSprite.isCollided(enemyTank[i])){
setExplosionPosition(enemyTank[i]);
explosion.setVisible(true);
enemyTank[i].setActive(false);
enemyTank[i].setVisible(false);
destroyEnemyNum = destroyEnemyNum + 1;
}
if (MyShell.isCollided(enemyTank[i])) {
setExplosionPosition(enemyTank[i]);
explosion.setVisible(true);
enemyTank[i].setActive(false);
enemyTank[i].setVisible(false);
MyShell.setActive(false);
MyShell.setVisible(false);
destroyEnemyNum = destroyEnemyNum + 1;
}
if (enemyShell[i].isCollided(myTankSprite)) {
setExplosionPosition(myTankSprite);
explosion.setVisible(true);
}
}
}
myTankSprite.drawSprite(bufferGraphic, myTankSprite.getTankDirection());
explosion.drawSprite(bufferGraphic);
MyShell.drawSprite(bufferGraphic);
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.setPos(sprite.getX() + sprite.getWidth() / 2,
sprite.getY() + sprite.getHeight() / 2);
break;
case 2:
case 3:
explosion.setPos(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 + -