游戏坦克大战java源码,运行TankClient.java进入游戏

源代码在线查看: tank.java

软件大小: 284 K
上传用户: enterjqk
关键词: java TankClient 源码 运行
下载地址: 免注册下载 普通下载 VIP

相关代码

				import java.awt.*;
				import java.awt.event.*;
				import java.util.*;
				
				import sun.security.krb5.internal.crypto.b;
				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 static Random r = new Random();
					private int step = r.nextInt(4) + 3;
					private int oldX,oldY;
					private int life = 100;
					private BooldBar bb = new BooldBar(); 
					public int getLife() {
						return life;
					}
				
					public void setLife(int life) {
						this.life = life;
					}
				
					private boolean live = true;	
					public boolean isLive() {
						return live;
					}
				
					public void setLive(boolean live) {
						this.live = live;
					}
				
					private boolean good;
					public boolean isGood() {
						return good;
					}
				
					private int x, y;
					TankClient tc;
					private boolean bL = false, bR = false, bU = false, bD = false;
					
					private static  Toolkit tk = Toolkit.getDefaultToolkit();
					private static Image[] tankImgs = null;
					private static Map imgs = new HashMap();
					static  { 
						tankImgs = new Image[] {
								
									tk.getImage(Tank.class.getClassLoader().getResource("images/tankL.gif")),
									tk.getImage(Tank.class.getClassLoader().getResource("images/tankLU.gif")),
									tk.getImage(Tank.class.getClassLoader().getResource("images/tankU.gif")),
									tk.getImage(Tank.class.getClassLoader().getResource("images/tankRU.gif")),
									tk.getImage(Tank.class.getClassLoader().getResource("images/tankR.gif")),
									tk.getImage(Tank.class.getClassLoader().getResource("images/tankRD.gif")),
									tk.getImage(Tank.class.getClassLoader().getResource("images/tankD.gif")),
									tk.getImage(Tank.class.getClassLoader().getResource("images/tankLD.gif")),
									
						};
						
						imgs.put("L", tankImgs[0]);  imgs.put("LU", tankImgs[1]);
						imgs.put("U", tankImgs[2]);  imgs.put("RU", tankImgs[3]);
						imgs.put("R", tankImgs[4]);  imgs.put("RD", tankImgs[5]);				
						imgs.put("D", tankImgs[6]);  imgs.put("LD", tankImgs[7]);
					}
				
				
					private Direction dir = Direction.STOP;
					private Direction ptdir = Direction.U;
				
					public Tank(int x, int y, boolean good) {
						this.x = x;
						this.y = y;
						oldX = x;
						oldY = y;
						this.good = good;
					}
				
					public Tank(int x, int y, boolean good, Direction dir, TankClient tc) {
						this(x, y, good);
						this.dir = dir;
						this.tc = tc;
					}
				
					public void draw(Graphics g) {
						if(!live){
							if(!good){
								tc.tanks.remove(this);
							}
							return;
						}
				
						
						if(good) bb.draw(g);
						
						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;
						}
				
						move();
					}
				
					void move() {
						
						   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 (x < 0)
							x = 0;
						if (y < 30)
							y = 30;
						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(!good) {
							Direction[] dirs = Direction.values();
							if(step ==0) {
								step = r.nextInt(4)+3;
								int rn = r.nextInt(dirs.length);
								dir = dirs[rn];
							}
										
							step --;
							
							if(r.nextInt(100) >95) this.fire();
						}
					}
				
					public void keyPressed(KeyEvent e) {
						int key = e.getKeyCode();
				
						switch (key) {
						case KeyEvent.VK_F2:
							if(!this.live){
								live = true;
								life = 100;
							}
							break;
				
						case KeyEvent.VK_D:
							bR = true;
							break;
						case KeyEvent.VK_A:
							bL = true;
							break;
						case KeyEvent.VK_W:
							bU = true;
							break;
						case KeyEvent.VK_S:
							bD = true;
							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, good, 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, good, dir, this.tc);		
						tc.missiles.add(m);
				
						return m;
					}
					
					public void superFire() {
						Direction[] dirs = dir.values();
						for(int i=0;i						fire(dirs[i]);
						}
					}
					
					public void locateDirection() {
						if (!bR && bL && !bU && !bD)
							dir = Direction.L;
						if (!bR && bL && bU && !bD)
							dir = Direction.LU;
						if (bR && !bL && bU && !bD)
							dir = Direction.RU;
						if (bR && !bL && !bU && !bD)
							dir = Direction.R;
						if (bR && !bL && !bU && bD)
							dir = Direction.RD;
						if (!bR && !bL && !bU && bD)
							dir = Direction.D;
						if (!bR && !bL && bU && !bD)
							dir = Direction.U;
						if (!bR && bL && !bU && bD)
							dir = Direction.LD;
						if (!bR && !bL && !bU && !bD)
							dir = Direction.STOP;
					}
				
					public void keyReleased(KeyEvent e) {
						int key = e.getKeyCode();
				
						switch (key) {
						case KeyEvent.VK_D:
							bR = false;
							break;
						case KeyEvent.VK_A:
							bL = false;
							break;
						case KeyEvent.VK_W:
							bU = false;
							break;
						case KeyEvent.VK_S:
							bD = false;
							break;
						case KeyEvent.VK_J:
							fire(); break;
						case KeyEvent.VK_K:
							superFire(); break;
							
						}
					}
					
					public void stay(){
						x = oldX;
						y = oldY;
					}
				
					public Rectangle getRect() {
						return new Rectangle(x,y,WIDTH,HEIGHT);
					}
					public boolean TankHitWall(Wall w) {
						if(this.live && this.getRect().intersects(w.getRect())) {
							this.stay();
							return true;
						}
						return false;
					}
					
					public boolean TankHitTank(java.util.List tanks) {
						for(int i=0; i							Tank t = tanks.get(i);
							if(this != t) {
								if(this.live && t.isLive()&& this.getRect().intersects(t.getRect())) {
									this.stay();
									t.stay();
									return true;
								}
							}			
				
						}
						return false;
					}
					
					private class BooldBar {
						public void draw(Graphics g) {
						 Color c = g.getColor();
						 g.setColor(Color.black);
						 g.drawRect(x + 10, y -10, WIDTH, 4);
						 int ww = WIDTH * life/100;
						 g.setColor(c);
						 g.setColor(Color.red);
						 g.fillRect(x + 10, y-10, ww, 4);
						 g.setColor(c);
						}
					}
					
					public boolean eat(Bood b) {
						if(this.live && b.isLive() &&this.getRect().intersects(b.getRect())) {
							this.life +=30;
							if(life >=100)life = 100; 
							if(life < 10) life = 0;
							b.setLive(false);			
							return true;
						}
						return false;
					}
					
				}
				
				
				
				
				
				
				
				
							

相关资源