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

📄 enemy.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;
import java.util.Random;

public class Enemy implements Ancestor{
int x,y;
int oldX,oldY;
private boolean live;

private static Random r=new Random();
private int step=r.nextInt(12)+3;
private int stepFire=r.nextInt(10)+30;
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;

public Enemy(int x, int y,Director dir,TankClient tc){
	this.x=x;
	this.y=y;
	this.dir=dir;
	this.tc=tc;
	this.ptDir=Director.DOWN;
	this.dir=Director.DOWN;
	this.good=false;
	live=true;
}
private static final int TANK_WIDTH=30;
public static int getTANK_WIDTH() {
	return TANK_WIDTH;
}
private static final int TANK_HEIGHT=30;

public static int getTANK_HEIGHT() {
	return TANK_HEIGHT;
}
public void paint(Graphics g){
	if (!isLive()){
		this.tc.enemyList.remove(this);
		return;
	}
	Color c=g.getColor();
	g.setColor(Color.black);
	g.fillOval(x,y, TANK_WIDTH,TANK_HEIGHT);
	g.setColor(Color.CYAN);
	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;
		default:
			g.drawLine(x+TANK_WIDTH/2, y+TANK_HEIGHT/2, x+TANK_WIDTH/2, y+TANK_HEIGHT);
	
	}

	g.setColor(c);
	//tankDriction();
	
	move();
	autoFire();
}
public void keyPressed(KeyEvent e) {
	if(x<0){
		x=0;
		return;
	}
	if(x+TANK_WIDTH>TankClient.getGAME_WIDTH()){
		x=TankClient.getGAME_WIDTH()-TANK_WIDTH;
		return;
	}
	if(y<30){
		y=30;
		return;
	}
	if(y+TANK_HEIGHT>TankClient.getGAME_HEIGHT()){
		y=TankClient.getGAME_HEIGHT()-TANK_HEIGHT;
		return;
	}
	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_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(){
	movePath();
	this.oldX=x;
	this.oldY=y;
	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;
	}
	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();
		}
	
	for(int i=0;i<tc.enemyList.size();i++){
		Enemy en=tc.enemyList.get(i);
		if(en!=this){
			if(this.getRect().intersects(en.getRect())){
				moveBack();
			}
			if(this.getRect().intersects(tc.getT().getRect())){
				moveBack();
			}
		}

	}
	collidesWithWall(tc.getW1());
	collidesWithWall(tc.getW2());
}
void collidesWithWall(Wall w){
	if(this.getRect().intersects(w.getRect())){
		moveBack();
	}
}
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 autoFire(){
	if (stepFire==0){
		stepFire=r.nextInt(10)+30;
		this.fire();
	}
	stepFire--;
}
public Rectangle getRect(){
	return new Rectangle(x,y,TANK_WIDTH,TANK_HEIGHT); 
}
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.setLive(false);
			mis.setLive(false);
			return true;
			}
	}

	return false;
}
public boolean isLive() {
	return live;
}
public void setLive(boolean live) {
	this.live = live;
}
public int getX() {
	return x;
}
public void setX(int x) {
	this.x = x;
}
public int getY() {
	return y;
}
public void setY(int y) {
	this.y = y;
}
public void movePath(){
	Director[] dirs= Director.values();
	
	if(step==0){
		step=r.nextInt(12)+3;
		int rn=r.nextInt(dirs.length-1);
		dir=dirs[rn];
		ptDir=dirs[rn];
	}
	step--;

}
}

⌨️ 快捷键说明

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