package com.bjsxt.tank;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class Tank {
public static final int XSPEED = 5;
public static final int YSPEED = 5;
private boolean live = true;
private BloodBar bb = new BloodBar();
private int life = 100;
TankClient tc;
private boolean good;
private int x, y;
private int oldX, oldY;
private static Random r = new Random();
private boolean bL=false, bU=false, bR=false, bD = false;
private Direction dir = Direction.STOP;
private Direction ptDir = Direction.D;
private int step = r.nextInt(12) + 3;
private static Toolkit tk = Toolkit.getDefaultToolkit();
private static Image[] tankImages = null;
private static Map<String, Image> imgs = new HashMap<String, Image>();
static {
tankImages = new Image[] {
tk.getImage(Tank.class.getClassLoader().getResource("images/tankL.gif")),
tk.getImage(Tank.class.getClassLoader().getResource("images/tankLU.gif")),
tk.getImage(Tank.class.getClassLoader().getResource("images/tankU.gif")),
tk.getImage(Tank.class.getClassLoader().getResource("images/tankRU.gif")),
tk.getImage(Tank.class.getClassLoader().getResource("images/tankR.gif")),
tk.getImage(Tank.class.getClassLoader().getResource("images/tankRD.gif")),
tk.getImage(Tank.class.getClassLoader().getResource("images/tankD.gif")),
tk.getImage(Tank.class.getClassLoader().getResource("images/tankLD.gif"))
};
imgs.put("L", tankImages[0]);
imgs.put("LU", tankImages[1]);
imgs.put("U", tankImages[2]);
imgs.put("RU", tankImages[3]);
imgs.put("R", tankImages[4]);
imgs.put("RD", tankImages[5]);
imgs.put("D", tankImages[6]);
imgs.put("LD", tankImages[7]);
}
public static final int WIDTH = 30;
public static final int HEIGHT = 30;
public Tank(int x, int y, boolean good) {
this.x = x;
this.y = y;
this.oldX = x;
this.oldY = y;
this.good = good;
}
public Tank(int x, int y, boolean good, Direction dir, TankClient tc) {
this(x, y, good);
this.dir = dir;
this.tc = tc;
}
public void draw(Graphics g) {
if(!live) {
if(!good) {
tc.tanks.remove(this);
}
return;
}
if(good) bb.draw(g);
switch(ptDir) {
case L:
g.drawImage(imgs.get("L"), x, y, null);
break;
case LU:
g.drawImage(imgs.get("LU"), x, y, null);
break;
case U:
g.drawImage(imgs.get("U"), x, y, null);
break;
case RU:
g.drawImage(imgs.get("RU"), x, y, null);
break;
case R:
g.drawImage(imgs.get("R"), x, y, null);
break;
case RD:
g.drawImage(imgs.get("RD"), x, y, null);
break;
case D:
g.drawImage(imgs.get("D"), x, y, null);
break;
case LD:
g.drawImage(imgs.get("LD"), x, y, null);
break;
}
move();
}
void move() {
this.oldX = x;
this.oldY = y;
switch(dir) {
case L:
x -= XSPEED;
break;
case LU:
x -= XSPEED;
y -= YSPEED;
break;
case U:
y -= YSPEED;
break;
case RU:
x += XSPEED;
y -= YSPEED;
break;
case R:
x += XSPEED;
break;
case RD:
x += XSPEED;
y += YSPEED;
break;
case D:
y += YSPEED;
break;
case LD:
x -= XSPEED;
y += YSPEED;
break;
case STOP:
break;
}
if(this.dir != Direction.STOP) {
this.ptDir = this.dir;
}
if(x < 0) x = 0;
if(y < 30) y = 30;
if(x + Tank.WIDTH > TankClient.GAME_WIDTH) x = TankClient.GAME_WIDTH - Tank.WIDTH;
if(y + Tank.HEIGHT > TankClient.GAME_HEIGHT) y = TankClient.GAME_HEIGHT - Tank.HEIGHT;
if(!good) {
Direction[] dirs = Direction.values();
if(step == 0) {
step = r.nextInt(12) + 3;
int rn = r.nextInt(dirs.length);
dir = dirs[rn];
}
step --;
//if(r.nextInt(40) > 38) this.fire();
}
}
private void stay() {
x = oldX;
y = oldY;
}
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
switch(key) {
case KeyEvent.VK_F2 :
if(!this.live) {
this.live = true;
this.life = 100;
}
break;
case KeyEvent.VK_LEFT :
bL = true;
break;
case KeyEvent.VK_UP :
bU = true;
break;
case KeyEvent.VK_RIGHT :
bR = true;
break;
case KeyEvent.VK_DOWN :
bD = true;
break;
}
locateDirection();
}
void locateDirection() {
if(bL && !bU && !bR && !bD) dir = Direction.L;
else if(bL && bU && !bR && !bD) dir = Direction.LU;
else if(!bL && bU && !bR && !bD) dir = Direction.U;
else if(!bL && bU && bR && !bD) dir = Direction.RU;
else if(!bL && !bU && bR && !bD) dir = Direction.R;
else if(!bL && !bU && bR && bD) dir = Direction.RD;
else if(!bL && !bU && !bR && bD) dir = Direction.D;
else if(bL && !bU && !bR && bD) dir = Direction.LD;
else if(!bL && !bU && !bR && !bD) dir = Direction.STOP;
}
public void keyReleased(KeyEvent e) {
int key = e.getKeyCode();
switch(key) {
case KeyEvent.VK_CONTROL:
fire();
break;
case KeyEvent.VK_LEFT :
bL = false;
break;
case KeyEvent.VK_UP :
bU = false;
break;
case KeyEvent.VK_RIGHT :
bR = false;
break;
case KeyEvent.VK_DOWN :
bD = false;
break;
case KeyEvent.VK_A :
superFire();
break;
}
locateDirection();
}
public Missile fire() {
if(!live) return null;
int x = this.x + Tank.WIDTH/2 - Missile.WIDTH/2;
int y = this.y + Tank.HEIGHT/2 - Missile.HEIGHT/2;
Missile m = new Missile(x, y, good, ptDir, this.tc);
tc.missiles.add(m);
return m;
}
public Missile fire(Direction dir) {
if(!live) return null;
int x = this.x + Tank.WIDTH/2 - Missile.WIDTH/2;
int y = this.y + Tank.HEIGHT/2 - Missile.HEIGHT/2;
Missile m = new Missile(x, y, good, dir, this.tc);
tc.missiles.add(m);
return m;
}
public Rectangle getRect() {
return new Rectangle(x, y, WIDTH, HEIGHT);
}
public boolean isLive() {
return live;
}
public void setLive(boolean live) {
this.live = live;
}
public boolean isGood() {
return good;
}
/**
* 撞墙
* @param w 被撞的墙
* @return 撞上了返回true,否则false
*/
public boolean collidesWithWall(Wall w) {
if(this.live && this.getRect().intersects(w.getRect())) {
this.stay();
return true;
}
return false;
}
public boolean collidesWithTanks(java.util.List<Tank> tanks) {
for(int i=0; i<tanks.size(); i++) {
Tank t = tanks.get(i);
if(this != t) {
if(this.live && t.isLive() && this.getRect().intersects(t.getRect())) {
this.stay();
t.stay();
return true;
}
}
}
return false;
}
private void superFire() {
Direction[] dirs = Direction.values();
for(int i=0; i<8; i++) {
fire(dirs[i]);
}
}
public int getLife() {
return life;
}
public void setLife(int life) {
this.life = life;
}
private class BloodBar {
public void draw(Graphics g) {
Color c = g.getColor();
g.setColor(Color.RED);
g.drawRect(x, y-10, WIDTH, 10);
int w = WIDTH * life/100 ;
g.fillRect(x, y-10, w, 10);
g.setColor(c);
}
}
public boolean eat(Blood b) {
if(this.live && b.isLive() && this.getRect().intersects(b.getRect())) {
this.life = 100;
b.setLive(false);
return true;
}
return false;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
java坦克大战图片版.rar (78个子文件)
TankWar2.9
.project 386B
bin
com
bjsxt
tank
TankClient$KeyMonitor.class 961B
Missile.class 5KB
TankClient.class 5KB
TankClient$PaintThread.class 939B
TankClient$1.class 714B
Tank$BloodBar.class 1KB
Wall.class 1KB
Blood.class 2KB
PropertyMgr.class 985B
Direction.class 1KB
Explode.class 2KB
Tank.class 8KB
config
tank.properties 38B
images
1.gif 868B
missileRU.gif 863B
8.gif 1KB
missileD.gif 852B
missileLU.gif 863B
10.gif 1KB
missileLD.gif 864B
tankRU.gif 2KB
tankLD.gif 1KB
tankLU.gif 1KB
tankL.gif 1KB
tankRD.gif 1KB
7.gif 1KB
missileL.gif 839B
missileRD.gif 861B
0.gif 824B
tankR.gif 1KB
tankD.gif 1KB
4.gif 1KB
3.gif 1KB
5.gif 1KB
2.gif 936B
MissileU.gif 855B
6.gif 1KB
tankU.gif 1KB
missileR.gif 839B
9.gif 1KB
src
com
bjsxt
tank
Missile.java 4KB
Blood.java 920B
Explode.java 2KB
TankClient.java 4KB
Tank.java 7KB
Wall.java 471B
PropertyMgr.java 472B
Direction.java 90B
config
tank.properties 38B
images
1.gif 868B
missileRU.gif 863B
8.gif 1KB
missileD.gif 852B
missileLU.gif 863B
10.gif 1KB
missileLD.gif 864B
tankRU.gif 2KB
tankLD.gif 1KB
tankLU.gif 1KB
tankL.gif 1KB
tankRD.gif 1KB
7.gif 1KB
missileL.gif 839B
missileRD.gif 861B
0.gif 824B
tankR.gif 1KB
tankD.gif 1KB
4.gif 1KB
3.gif 1KB
5.gif 1KB
2.gif 936B
MissileU.gif 855B
6.gif 1KB
tankU.gif 1KB
missileR.gif 839B
9.gif 1KB
.classpath 232B
共 78 条
- 1
资源评论
houyivv
- 粉丝: 0
- 资源: 17
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功