坦克大战的JAVA代码版

源代码在线查看: tank.java

软件大小: 20 K
上传用户: toctory
关键词: JAVA 代码
下载地址: 免注册下载 普通下载 VIP

相关代码

				import java.awt.*;
				import java.awt.event.*;
				import java.util.*;
				
				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;
				
					TankClient tc;
					
				    private boolean bGood;
				    
				    private boolean live=true;
				    
				    private int life=100;
				    private BloodBar bb=new BloodBar();
				    
					private int x, y;
					private int oldX,oldY;
					
					private int step=r.nextInt(15)+3;
					
					private static Random r=new Random();
					
					private boolean bL = false, bU = false, bR = false, bD = false;
				
					enum Direction {
						L, LU, U, RU, R, RD, D, LD, STOP
					};
				
					private Direction dir = Direction.STOP;
					private Direction ptDir = Direction.D;
				
					public int getLife() {
						return life;
					}
				
					public void setLife(int life) {
						this.life = life;
					}
				
					public boolean isBGood() {
						return bGood;
					}
				
					public boolean isLive() {
						return live;
					}
				
					public void setLive(boolean live) {
						this.live = live;
					}
				
					public Tank(int x, int y,boolean bGood) {
						this.x = x;
						this.y = y;
						this.oldX=x;
						this.oldY=y;
						
						this.bGood=bGood;
					}
				
					public Tank(int x, int y,boolean bGood,Direction dir, TankClient tc) {
						this(x, y, bGood);
						this.dir=dir;
						this.tc = tc;
					}
					private void stay(){
						x=oldX;
						y=oldY;
					}
				
					public void draw(Graphics g) {
						if(!live){ 
							if(!bGood){
								tc.tanks.remove(this);
								
							}
							
							return;
							 }
						
						Color c = g.getColor();
						if(bGood) g.setColor(Color.PINK);
						else g.setColor(Color.YELLOW);
						g.fillOval(x, y, WIDTH, HEIGHT);
						g.setColor(c);
						if(bGood)bb.draw(g);
				
						switch (ptDir) {
						case L:
							g.drawLine(x + Tank.WIDTH / 2, y + Tank.HEIGHT / 2, x, y
									+ Tank.HEIGHT / 2);
							break;
						case LU:
							g.drawLine(x + Tank.WIDTH / 2, y + Tank.HEIGHT / 2, x, y);
							break;
						case U:
							g.drawLine(x + Tank.WIDTH / 2, y + Tank.HEIGHT / 2, x + Tank.WIDTH
									/ 2, y);
							break;
						case RU:
							g.drawLine(x + Tank.WIDTH / 2, y + Tank.HEIGHT / 2, x + Tank.WIDTH,
									y);
							break;
						case R:
							g.drawLine(x + Tank.WIDTH / 2, y + Tank.HEIGHT / 2, x + Tank.WIDTH,
									y + Tank.HEIGHT / 2);
							break;
						case RD:
							g.drawLine(x + Tank.WIDTH / 2, y + Tank.HEIGHT / 2, x + Tank.WIDTH,
									y + Tank.HEIGHT);
							break;
						case D:
							g.drawLine(x + Tank.WIDTH / 2, y + Tank.HEIGHT / 2, x + Tank.WIDTH
									/ 2, y + Tank.HEIGHT);
							;
							break;
						case LD:
							g.drawLine(x + Tank.WIDTH / 2, y + Tank.HEIGHT / 2, x, y
									+ Tank.HEIGHT);
							break;
				
						}
						move();
					}
				
					void move() {
						
						this.oldX=x;
						this.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 (dir != Direction.STOP) {
							this.ptDir = this.dir;
				
						}
						if(x						if(y						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(!bGood){
						Direction[] dirs=Direction.values();
						if(step==0){
							step=r.nextInt(15)+3;
							int rn=r.nextInt(dirs.length);
							dir=dirs[rn];
						}	
						step--;
						
						if(r.nextInt(40)>38){
						this.fire();
						}
					}
					}
				
					public void KeyPressed(KeyEvent e) {
						int key = e.getKeyCode();
						switch (key) {
						case KeyEvent.VK_F2:
							this.live=true;
							this.life=100;
							break;
						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() {
						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;
					}
				
					public void keyReleased(KeyEvent e) {
						int key = e.getKeyCode();
						switch (key) {
						case KeyEvent.VK_CONTROL:
							fire();
							break;
						case KeyEvent.VK_LEFT:
							bL = false;
							break;
						case KeyEvent.VK_UP:
							bU = false;
							break;
						case KeyEvent.VK_RIGHT:
							bR = false;
							break;
						case KeyEvent.VK_DOWN:
							bD = false;
							break;
						case KeyEvent.VK_A:
						    superFire();
						    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, bGood, 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, bGood, dir,this.tc);
						tc.missiles.add(m);
						return m;
					}
				
					public Rectangle getRect() {
						return new Rectangle(x,y,WIDTH,HEIGHT);
					}
					public boolean collidesWithWall(Wall w){
						if(this.live&& this.getRect().intersects(w.getRect())){
							this.stay();
							return true;
						}
						return false;
					}
					public boolean collidesWithTank(java.util.Listtanks){
						for(int i=0;i							Tank t=tanks.get(i);
						if(this!=t){	
						if(this.live&& this.getRect().intersects(t.getRect())){
							this.stay();
							t.stay();
							return true;
						}
						}
						}
						return false;
					}
					private void superFire(){
						Direction[]dirs =Direction.values();
						for(int i=0;i							fire(dirs[i]);
						}
					}
					private  class BloodBar{
						public void draw(Graphics g){
							Color c=g.getColor();
							g.setColor(Color.BLUE);
							g.drawRect(x, y-10, WIDTH, 10);
							int w=WIDTH*life/100;
							g.fillRect(x, y-10, w, 10);
							g.setColor(c);
						}		
					}
					public boolean eat(Blood b){
						if(b.isLive()&&this.live&& this.getRect().intersects(b.getRect())){
							this.life=100;
							b.setLive(false);
							return true;
						}
						return false;
					}
				}
							

相关资源