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

📄 tank.java

📁 基于尚学堂坦克大战的基础上开发,支持多人对战,在线聊天,坦克大战网络版.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

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 int tankId;

	public int totalBlood = 100;

	public int blood = 100;

	private boolean ready=false;
	
	TankClient tc;

	private String user;

	private int controlMissileSpeed = 5;

	private boolean auto = false;

	public int x, y;

	private int oldX, oldY;

	public boolean bL = false, bU = false, bR = false, bD = false;

	Direction dir = Direction.STOP;

	private Direction ptDir = Direction.D;

	public boolean good;

	public boolean isAirplane;

	private boolean live = true;
	
	private String level="--坦克新兵--";

	private static Random r = new Random();

	private int step = r.nextInt(12) + 3;

	private int missileId = 1; // 记录missile的ID

	private String color;

	String tankColor = "blue";

	String badTankColor = "white";

	String playerTankColor = "red";

	String airplane = "airplane";

	private static Map<String, Image> tankImgs = new HashMap<String, Image>();

	private static Map<String, Image> badTankImgs = new HashMap<String, Image>();

	private static Map<String, Image> playerTankImgs = new HashMap<String, Image>();

	private static Map<String, Image> badAirplaneImgs = new HashMap<String, Image>();

	private static Toolkit tk = Toolkit.getDefaultToolkit();

	{
		tankImgs = setTankColor(tankColor);
		badTankImgs = setTankColor(badTankColor);
		badAirplaneImgs = setTankColor(airplane);
		playerTankImgs = setTankColor(playerTankColor);
	}

	public Map<String, Image> setTankColor(String tankColor) {
		Map<String, Image> temp = new HashMap<String, Image>();
		Image[] tankimgs = new Image[] {
				tk.getImage(Tank.class.getClassLoader().getResource(
						"images/" + tankColor + "TankL.png")),
				tk.getImage(Tank.class.getClassLoader().getResource(
						"images/" + tankColor + "TankLU.png")),
				tk.getImage(Tank.class.getClassLoader().getResource(
						"images/" + tankColor + "TankR.png")),
				tk.getImage(Tank.class.getClassLoader().getResource(
						"images/" + tankColor + "TankRU.png")),
				tk.getImage(Tank.class.getClassLoader().getResource(
						"images/" + tankColor + "TankU.png")),
				tk.getImage(Tank.class.getClassLoader().getResource(
						"images/" + tankColor + "TankLD.png")),
				tk.getImage(Tank.class.getClassLoader().getResource(
						"images/" + tankColor + "TankD.png")),
				tk.getImage(Tank.class.getClassLoader().getResource(
						"images/" + tankColor + "TankRD.png")) };
		temp.put("L", tankimgs[0]);
		temp.put("LU", tankimgs[1]);
		temp.put("R", tankimgs[2]);
		temp.put("RU", tankimgs[3]);
		temp.put("U", tankimgs[4]);
		temp.put("LD", tankimgs[5]);
		temp.put("D", tankimgs[6]);
		temp.put("RD", tankimgs[7]);
		return temp;
	}

	public Tank(int x, int y, boolean good) {
		this.x = x;
		this.y = y;
		this.good = good;
	}

	public Tank(int x, int y, int tankId, boolean good, boolean auto,
			Direction dir, TankClient tc) {
		this(x, y, good);
		this.auto = auto;
		this.dir = dir;
		this.tc = tc;
		this.tankId = tankId;
	}

	public void drawTank(Graphics g) {

		if (controlMissileSpeed > 0) {
			controlMissileSpeed--;
		}

		if (good && auto == false) {
			color = tankColor;
		} else if (!good && auto == false) {
			color = playerTankColor;
		} else if (!good && auto == true) {
			if (isAirplane) {
				color = airplane;
			} else {
				color = badTankColor;
			}
		}

	/*	if (!live) {
			tc.badTanks.remove(this);
			tc.playerTanks.remove(this);
			return;
		}*/
		
		
		//显示玩家昵称
		if (!this.auto) {
			for(int i=0; i<tc.playerTanks.size(); i++){
				Tank pt = tc.playerTanks.get(i);
				if(pt.tankId==this.tankId){
					g.drawString(pt.getUser(), x, y - 20);
				}
			}
		if(this.tankId==tc.tank.getTankId()) 
		g.drawString(tc.tank.getUser(), x, y - 20);
		}

		g.setColor(Color.YELLOW);
		g.drawRect(x, y - 10, totalBlood, 4);
		g.fillRect(x + 1, y - 8, blood, 2);

		if (good && !auto) {
			dirDraw(g, tankImgs);
		} else if (!good && !auto) {
			dirDraw(g, playerTankImgs);
		} else if (!good && auto) {
			if (!isAirplane) {
				dirDraw(g, badTankImgs);
			} else {
				dirDraw(g, badAirplaneImgs);
			}
		}

		move();
	}

	// 跟据坦克的类型画出坦克
	public void dirDraw(Graphics g, Map<String, Image> imgs) {
		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;
		}
	}

	void move() {
		try {
			if (tc.playerTanks.size() > 0) {
				for (int i = 0; i < tc.badTanks.size(); i++) {
					Tank tank = tc.badTanks.get(i);
					tank.setLive(false);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		/*
		 * if(tc.badTanks.size()>0){ Msg autoTankMsg = new
		 * AutoTankNewMsg(this,tc,tc.badTanks.size());
		 * tc.client.send(autoTankMsg); }
		 */

		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 (!good && auto) {

			if (step == 0) {
				dir = getRandomDirection();
				step = r.nextInt(12) + 3;
			}
			step--;

			if (r.nextInt(20) > 18) {
				this.fire();
			}

		}

		if (x < 0)
			x = 0;
		if (y < 30)
			y = 30;
		if (x + Tank.WIDTH > TankClient.DEFAULT_WIDTH)
			x = TankClient.DEFAULT_WIDTH - Tank.WIDTH;
		if (y + Tank.HEIGHT > TankClient.DEFAULT_HEIGHT)
			y = TankClient.DEFAULT_HEIGHT - Tank.HEIGHT;
	}

	public Direction getRandomDirection() {
		Direction[] dirs = Direction.values();
		int rn = r.nextInt(dirs.length);
		dir = dirs[rn];
		return dir;
	}

	public void pressEvent(KeyEvent e) {
		int key = e.getKeyCode();
		switch (key) {
		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() {
		Direction olddir = dir;

		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;

⌨️ 快捷键说明

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