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

📄 tank.java

📁 坦克大战,最基本的Graphics 类进行的画图。TankClient.java这个是主文件
💻 JAVA
字号:
package tank;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.util.List;

public class Tank implements Ancestor{
int x,y;
private TankClient tc;
private Director dir;
private Director ptDir;
private static final int TANK_XSPEED=5;
private static final int TANK_YSPEED=5;
private boolean leftFlag=false;
private boolean upFlag=false;
private boolean rightFlag=false;
private boolean downFlag=false;
private boolean good;
private int oldX;
private int oldY;
private boolean live;
private int life=100;
private BloodBar blood;
private int dx=10;
private int dy=10;
private static final int BLOOD_WIDTH=50;
private static final int FULLLIFE=100;
public Tank(int x, int y,Director dir,TankClient tc){
	this.x=x;
	this.y=y;
	this.dir=dir;
	this.tc=tc;
	this.good=true;
	this.ptDir=Director.DOWN;
	this.live=true;
	blood=new BloodBar(this.x-dx,this.y-dy);
}
private static final int TANK_WIDTH=30;
private static final int TANK_HEIGHT=30;

public void paint(Graphics g){
	if(!live){
		return;
	}
	Color c=g.getColor();
	g.setColor(Color.RED);
	g.fillOval(x,y, TANK_WIDTH,TANK_HEIGHT);
	g.setColor(Color.BLACK);
	switch(ptDir){
		case LEFT:
			g.drawLine(x, y+TANK_HEIGHT/2, x+TANK_WIDTH/2, y+TANK_HEIGHT/2);
			break;
		case LU:
			g.drawLine(x, y, x+TANK_WIDTH/2, y+TANK_HEIGHT/2);
			break;
		case UP:
			g.drawLine(x+TANK_WIDTH/2, y, x+TANK_WIDTH/2, y+TANK_HEIGHT/2);
			break;
		case RIGHT:
			g.drawLine(x+TANK_WIDTH/2, y+TANK_HEIGHT/2, x+TANK_WIDTH, y+TANK_HEIGHT/2);
			break;
		case RU:
			g.drawLine(x+TANK_WIDTH/2, y+TANK_HEIGHT/2, x+TANK_WIDTH, y);
			break;
		case DOWN:
			g.drawLine(x+TANK_WIDTH/2, y+TANK_HEIGHT/2, x+TANK_WIDTH/2, y+TANK_HEIGHT);
			break;
		case RD:
			g.drawLine(x+TANK_WIDTH/2, y+TANK_HEIGHT/2, x+TANK_WIDTH, y+TANK_HEIGHT);
			break;
		case LD:
			g.drawLine(x+TANK_WIDTH/2, y+TANK_HEIGHT/2, x, y+TANK_HEIGHT);
			break;
	
	}
	blood.draw(g);
	g.setColor(c);
	tankDriction();
	move();
}
public void keyPressed(KeyEvent e) {
	int key=e.getKeyCode();
	
	switch(key){
	case KeyEvent.VK_UP:
		upFlag=true;
		break;
	case KeyEvent.VK_DOWN: 
		downFlag=true;
		break;
	case KeyEvent.VK_LEFT:
		leftFlag=true;
		break;
	case KeyEvent.VK_RIGHT:
		rightFlag=true;
		break;
	}
	}
public void keyReleased(KeyEvent e){
	int key =e.getKeyCode();
	if(KeyEvent.VK_CONTROL==key){
		fire();
	}
	else if(KeyEvent.VK_F2==key){
		this.life=FULLLIFE;
		this.live=true;
		blood.setBLOOD_WIDTH(BLOOD_WIDTH);
	}
	else if (KeyEvent.VK_A==key){
		superFire();
	}
	else if(KeyEvent.VK_UP==key){
		upFlag=false;
	}
	else if(KeyEvent.VK_DOWN==key){
		downFlag=false;
	}
	else if(KeyEvent.VK_LEFT==key){
		leftFlag=false;
	}
	else if(KeyEvent.VK_RIGHT==key){
		rightFlag=false;
	}
}
void tankDriction(){
	
	if(upFlag && !downFlag && !leftFlag && !rightFlag){
		dir=Director.UP;
		ptDir=Director.UP;
	}
	else if(!upFlag && downFlag && !leftFlag && !rightFlag){
		dir=Director.DOWN;
		ptDir=Director.DOWN;
	}
	else if(!upFlag && !downFlag && leftFlag && !rightFlag){
		dir=Director.LEFT;
		ptDir=Director.LEFT;
	}
	else if(!upFlag && !downFlag && !leftFlag && rightFlag){
		dir=Director.RIGHT;
		ptDir=Director.RIGHT;
	}
	else if(upFlag && !downFlag && leftFlag && !rightFlag){
		dir=Director.LU;
		ptDir=Director.LU;
	}
	if(upFlag && !downFlag && !leftFlag && rightFlag){
		dir=Director.RU;
		ptDir=Director.RU;
	}
	else if(!upFlag && downFlag && leftFlag && !rightFlag){
		dir=Director.LD;
		ptDir=Director.LD;
	}
	else if(!upFlag && downFlag && !leftFlag && rightFlag){
		dir=Director.RD;
		ptDir=Director.RD;
	}
	else if(!upFlag && !downFlag && !leftFlag && !rightFlag){
		dir=Director.STOP;
	}
}
void move(){
	oldX=this.x;
	oldY=this.y;
	blood.setOldX(oldX-dx);
	blood.setOldY(oldY-dy);
	switch(dir){
	case UP:
		y-=TANK_YSPEED;
		break;
	case DOWN:
		y+=TANK_YSPEED;
		break;
	case LEFT:
		x-=TANK_XSPEED;
		break;
	case RIGHT:
		x+=TANK_XSPEED;
		break;
	case LU:
		x-=TANK_XSPEED;
		y-=TANK_YSPEED;
		break;
	case RU:
		x+=TANK_XSPEED;
		y-=TANK_YSPEED;
		break;
	case RD:
		x+=TANK_XSPEED;
		y+=TANK_YSPEED;
		break;
	case LD:
		x-=TANK_XSPEED;
		y+=TANK_YSPEED;
		break;
	}
	blood.setX(x-dx);
	blood.setY(y-dy);
	collideCheck();
}
void moveBack(){
	this.x=oldX;
	this.y=oldY;
}
void collideCheck(){
	if(x<0 || x+TANK_WIDTH>TankClient.getGAME_WIDTH() ||y<30 || y+TANK_HEIGHT>TankClient.getGAME_HEIGHT()){
		moveBack();
		blood.moveBack();
	}
	for(int i=0;i<tc.enemyList.size();i++){
		Enemy en=tc.enemyList.get(i);
		if(this.getRect().intersects(en.getRect())){
			moveBack();
			blood.moveBack();
		}
	}
	if(this.getRect().intersects(tc.getFd().getRect())){
		eat();
	}
	
}

void fire (){
	if(!live){return;}
	tc.missileList.add(new Missile(this.x+(TANK_WIDTH-Missile.getMissile_WIDTH())/2,this.y+(TANK_HEIGHT-Missile.getMissile_HEIGHT())/2,ptDir,this.good,this.tc));
}
void eat(){
	this.life=100;
	tc.getFd().setLive(false);
	this.blood.setBLOOD_WIDTH(BLOOD_WIDTH);
}
void superFire(){
	if(!live){return;}
	int x=this.x+(TANK_WIDTH-Missile.getMissile_WIDTH())/2;
	int y=this.y+(TANK_HEIGHT-Missile.getMissile_HEIGHT())/2;
	Director dirs[]=Director.values();
	for(int i=0;i<dirs.length-1;i++){
		tc.missileList.add(new Missile(x,y,dirs[i],this.good,this.tc));
	}
}
public boolean isBeHit(List<Missile> missileList){
	for (int i=0;i<missileList.size();i++){
		Missile mis=missileList.get(i);
		if(this.getRect().contains(mis.getRect())&& this.good!=mis.isGood()){
			this.life-=20;
			blood.setBLOOD_WIDTH(blood.getBLOOD_WIDTH()*life/100);
			if (life==0){
				this.setLive(false);
			}
			mis.setLive(false);
			return true;
			}
	}

	return false;
}
private void setLive(boolean live) {
	this.live=live;
	
}
public Rectangle getRect() {
	
	return new Rectangle(this.x,this.y,Tank.TANK_WIDTH,Tank.TANK_HEIGHT);
}
}

⌨️ 快捷键说明

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