package YrstTank5;
import java.applet.*;
import java.awt.MediaTracker;
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Image;
import java.util.Random;
public class YrstTank extends Applet {
int myTankWidth, myTankHeight;
int enemyTankWidth, enemyTankHeight;
int myTankX, myTankY;
int enemyTankX, enemyTankY;
Image myTankImg[];
Image enemyTankImg[];
// int destroyEnemyNum=0;
Image myTankSrcImg;
Image enemyTankSrcImg;
MediaTracker MT;
PlayerTankSprite myTankSprite;
EnemyTankSprite[] enemyTank;
ShellSprite Myshell;
Image bufferImage;
Image shellSrcImg;
Graphics bufferGraphic; //缓冲画面图形对象
Image backing;
TankThread tankthread;
//ShellSprite myshell;
ShellSprite[] enemyShell;
public Image shellImg[];
Explosion explosion;
Image explosionImg[]; //爆炸效果图片分割后的存储数组
Image explosionSrcImg; //爆炸效果原始图片
private AudioClip explAudio, bkMusicAudio, gameOverAudio;
Random rand;
final int enemynum = 2;
private int killEnemyNum = 0;
private int leftEnemyNum = 9;
private int LifeBlood = 1000;
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 = 3;
public static final int MAP_ROWS = 15;
public static final int MAP_COLS = 20;
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");
// backing = getImage(getDocumentBase(),"pic/Bckscrn.png");
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();
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//Myshell构造时需要explosion类对象为参数,可是此时explosion还未被构造出来
//因此explosion=null
//解决办法:将explosion的构造放在Myshell构造前即可
explosion = new Explosion(explosionImg, this);
Myshell = new ShellSprite(shellImg[0], 0, 20, explosion, this);
Myshell.setSize(shellSrcImg.getWidth(this) / 2,
shellSrcImg.getHeight(this) / 2);
//explosion = new Explosion(explosionImg, this);//本句有问题,必须在Myshell构造前
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
myTankSprite = new PlayerTankSprite(myTankImg, myTankX, myTankY, Myshell, this);
myTankSprite.setSize(myTankWidth, myTankHeight);
myTankSprite.setPos(myTankX, myTankY);
enemyTank = new EnemyTankSprite[enemynum];
enemyShell = new ShellSprite[enemynum];
creatNewEnemyTank();
drawGameMap = new DrawMap(this, TileSrcImg, TILE_WIDTH, TILE_HEIGHT,
TILE_ROWS, TILE_COLS, MAP_ROWS, MAP_COLS);
}
public void creatNewEnemyTank() {
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;
}
//enemyTankX=rand.nextInt(10000)%(this.getWidth()-enemyTankWidth);
// enemyTankY=rand.nextInt(10000)%(this.getHeight()-enemyTankHeight);
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].setTankDirection(rand.nextInt(12) % 4);
enemyTank[i].setSize(enemyTankWidth, enemyTankHeight);
enemyTank[i].setVisible(true);
enemyTank[i].setMove(true);
}
}
public void recreatNewEnemyTank() {
if (killEnemyNum == enemynum) {
killEnemyNum = 0;
creatNewEnemyTank();
}
}
//tankthread=new TankThread(this,myTankSprite,enemyTank);
public void start()
{
tankthread = new TankThread(this, myTankSprite, enemyTank, Myshell,
enemyShell, explosion);
tankthread.start();
}
public void stop() {
tankthread = null;
}
public void paint(Graphics g) {
if (isGameOver == false) {
//bufferGraphic.clearRect(0, 0, this.getWidth(), this.getHeight());
// bufferGraphic.drawImage(backing,0,0,this);
drawGameMap.PaintMaps(bufferGraphic);
recreatNewEnemyTank();
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);
//explosion.setActive(false);
enemyTank[i].setMove(false);
enemyTank[i].setVisible(false);
killEnemyNum = killEnemyNum + 1;
}
if (Myshell.isCollided(enemyTank[i])) {
setExplosionPosition(enemyTank[i]);
explosion.setVisible(true);
//explosion.setActive(false);
enemyTank[i].setMove(false);
enemyTank[i].setVisible(false);
killEnemyNum = killEnemyNum + 1;
Myshell.setVisible(false);
Myshell.setMove(false);
leftEnemyNum = leftEnemyNum - 1;
GameScores = GameScores + 100;
}
if (enemyShell[i].isCollided(myTankSprite)) {
setExplosionPosition(myTankSprite);
explosion.setVisible(true);
//myTankSprite.setVisible(false);
LifeBlood = LifeBlood - 5;
}
}
}
myTankSpri
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
yrsttank5.rar (26个子文件)
yrsttank5
src
pic
Walls.PNG 4KB
ETank.png 14KB
Shell.png 3KB
Walls.CSV 2KB
Grass.CSV 2KB
Tank.png 15KB
explosion.gif 2KB
Thumbs.db 53KB
Grass.PNG 4KB
YrstTank5
YrstTank.java 10KB
TankThread.java 1KB
Explosion.java 888B
DrawMap.java 2KB
DrawGameState.java 2KB
GameMap.java 2KB
EnemyTankSprite.java 5KB
SpriteDrawing.java 2KB
ShellSprite.java 5KB
PlayerTankSprite.java 5KB
AbstractSprite.java 5KB
GetClipImage.java 2KB
audio
GameOver.wav 3KB
Explosion.wav 5KB
Music.mid 7KB
classes
YrstTank.html 430B
YrstTank.jpx 3KB
共 26 条
- 1
资源评论
tangrao31415926
- 粉丝: 1
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功