?? tank.java
字號(hào):
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);
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -