⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tank.java

📁 游戏坦克大战java源码,运行TankClient.java进入游戏
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
import java.util.*;

import sun.security.krb5.internal.crypto.b;
public class Tank {



	public static final int XSPEED = 5;
	public static final int YSPEED = 5;
	public static final int WIDTH = 30;
	public static final int HEIGHT = 30;
	private static Random r = new Random();
	private int step = r.nextInt(4) + 3;
	private int oldX,oldY;
	private int life = 100;
	private BooldBar bb = new BooldBar(); 
	public int getLife() {
		return life;
	}

	public void setLife(int life) {
		this.life = life;
	}

	private boolean live = true;	
	public boolean isLive() {
		return live;
	}

	public void setLive(boolean live) {
		this.live = live;
	}

	private boolean good;
	public boolean isGood() {
		return good;
	}

	private int x, y;
	TankClient tc;
	private boolean bL = false, bR = false, bU = false, bD = false;
	
	private static  Toolkit tk = Toolkit.getDefaultToolkit();
	private static Image[] tankImgs = null;
	private static Map<String,Image> imgs = new HashMap<String,Image>();
	static  { 
		tankImgs = 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", tankImgs[0]);  imgs.put("LU", tankImgs[1]);
		imgs.put("U", tankImgs[2]);  imgs.put("RU", tankImgs[3]);
		imgs.put("R", tankImgs[4]);  imgs.put("RD", tankImgs[5]);				
		imgs.put("D", tankImgs[6]);  imgs.put("LD", tankImgs[7]);
	}


	private Direction dir = Direction.STOP;
	private Direction ptdir = Direction.U;

	public Tank(int x, int y, boolean good) {
		this.x = x;
		this.y = y;
		oldX = x;
		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() {
		
		   oldX = x;
		   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(4)+3;
				int rn = r.nextInt(dirs.length);
				dir = dirs[rn];
			}
						
			step --;
			
			if(r.nextInt(100) >95) this.fire();
		}
	}

	public void keyPressed(KeyEvent e) {
		int key = e.getKeyCode();

		switch (key) {
		case KeyEvent.VK_F2:
			if(!this.live){
				live = true;
				life = 100;
			}
			break;

		case KeyEvent.VK_D:
			bR = true;
			break;
		case KeyEvent.VK_A:
			bL = true;
			break;
		case KeyEvent.VK_W:
			bU = true;
			break;
		case KeyEvent.VK_S:
			bD = true;
			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 void superFire() {
		Direction[] dirs = dir.values();
		for(int i=0;i<8; i++){
		fire(dirs[i]);
		}
	}
	
	public void locateDirection() {
		if (!bR && bL && !bU && !bD)
			dir = Direction.L;
		if (!bR && bL && bU && !bD)
			dir = Direction.LU;
		if (bR && !bL && bU && !bD)
			dir = Direction.RU;
		if (bR && !bL && !bU && !bD)
			dir = Direction.R;
		if (bR && !bL && !bU && bD)
			dir = Direction.RD;
		if (!bR && !bL && !bU && bD)
			dir = Direction.D;
		if (!bR && !bL && bU && !bD)
			dir = Direction.U;
		if (!bR && bL && !bU && bD)
			dir = Direction.LD;
		if (!bR && !bL && !bU && !bD)
			dir = Direction.STOP;
	}

	public void keyReleased(KeyEvent e) {
		int key = e.getKeyCode();

		switch (key) {
		case KeyEvent.VK_D:
			bR = false;
			break;
		case KeyEvent.VK_A:
			bL = false;
			break;
		case KeyEvent.VK_W:
			bU = false;
			break;
		case KeyEvent.VK_S:
			bD = false;
			break;
		case KeyEvent.VK_J:
			fire(); break;
		case KeyEvent.VK_K:
			superFire(); break;
			
		}
	}
	
	public void stay(){
		x = oldX;
		y = oldY;
	}

	public Rectangle getRect() {
		return new Rectangle(x,y,WIDTH,HEIGHT);
	}
	public boolean TankHitWall(Wall w) {
		if(this.live && this.getRect().intersects(w.getRect())) {
			this.stay();
			return true;
		}
		return false;
	}
	
	public boolean TankHitTank(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 class BooldBar {
		public void draw(Graphics g) {
		 Color c = g.getColor();
		 g.setColor(Color.black);
		 g.drawRect(x + 10, y -10, WIDTH, 4);
		 int ww = WIDTH * life/100;
		 g.setColor(c);
		 g.setColor(Color.red);
		 g.fillRect(x + 10, y-10, ww, 4);
		 g.setColor(c);
		}
	}
	
	public boolean eat(Bood b) {
		if(this.live && b.isLive() &&this.getRect().intersects(b.getRect())) {
			this.life +=30;
			if(life >=100)life = 100; 
			if(life < 10) life = 0;
			b.setLive(false);			
			return true;
		}
		return false;
	}
	
}








⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -