为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

java人机坦克大战源代码

2017-10-06 24页 doc 51KB 27阅读

用户头像

is_281650

暂无简介

举报
java人机坦克大战源代码java人机坦克大战源代码 import java.awt.*; import java.awt.event.*; import java.util.List; import java.util.ArrayList; import java.util.Random; class Blood { int x, y, w, h; TankClient tc; int step = 0; private boolean live = true; private int[][] pos = { {350, 300}, ...
java人机坦克大战源代码
java人机坦克大战源代码 import java.awt.*; import java.awt.event.*; import java.util.List; import java.util.ArrayList; import java.util.Random; class Blood { int x, y, w, h; TankClient tc; int step = 0; private boolean live = true; private int[][] pos = { {350, 300}, {360, 300}, {375, 275}, {400, 200}, {360, 270}, {365, 290}, {340, 280} }; public Blood() { x = pos[0][0]; y = pos[0][1]; w = h = 15; } public void draw(Graphics g) { if(!live) return; Color c = g.getColor(); g.setColor(Color.MAGENTA); g.fillRect(x, y, w, h); g.setColor(c); move(); } private void move() { step ++; if(step == pos.length){ step = 0; } x = pos[step][0]; y = pos[step][1]; } public Rectangle getRect() { return new Rectangle(x, y, w , h); } public boolean isLive() { return live; } public void setLive(boolean live) { this.live = live; } } class Explode { int x, y; private boolean live = true; private TankClient tc ; int[] diameter = {4, 7, 12, 18, 26, 32, 49, 30, 14, 6}; int step = 0; public Explode(int x, int y, TankClient tc) { this.x = x; this.y = y; this.tc = tc; } public void draw(Graphics g) { if(!live) { tc.explodes.remove(this); return; } if(step == diameter.length) { live = false; step = 0; return; } Color c = g.getColor(); g.setColor(Color.ORANGE); g.fillOval(x, y, diameter[step], diameter[step]); g.setColor(c); step ++; } } class Wall { int x, y, w, h; TankClient tc ; public Wall(int x, int y, int w, int h, TankClient tc) { this.x = x; this.y = y; this.w = w; this.h = h; this.tc = tc; } public void draw(Graphics g) { g.fillRect(x, y, w, h); } public Rectangle getRect() { return new Rectangle(x, y, w, h); } } 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 boolean live = true; private BloodBar bb = new BloodBar(); private int life = 100; TankClient tc; private boolean good; private int x, y; private int oldX, oldY; 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; private int step = r.nextInt(12) + 3; public Tank(int x, int y, boolean good) { this.x = x; this.y = y; this.oldX = x; this.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; } Color c = g.getColor(); if(good) g.setColor(Color.RED); else g.setColor(Color.BLUE); g.fillOval(x, y, WIDTH, HEIGHT); g.setColor(c); if(good) 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(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(12) + 3; int rn = r.nextInt(dirs.length); dir = dirs[rn]; } step --; if(r.nextInt(40) > 38) this.fire(); } } private void stay() { x = oldX; y = oldY; } public void keyPressed(KeyEvent e) { int key = e.getKeyCode(); switch(key) { 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, 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 Rectangle getRect() { return new Rectangle(x, y, WIDTH, HEIGHT); } public boolean isLive() { return live; } public void setLive(boolean live) { this.live = live; } public boolean isGood() { return good; } public boolean collidesWithWall(Wall w) { if(this.live && this.getRect().intersects(w.getRect())) { this.stay(); return true; } return false; } public boolean collidesWithTanks(java.util.List tanks) { for(int i=0; i TankClient.GAME_WIDTH || y > TankClient.GAME_HEIGHT) { live = false; } } public boolean isLive() { return live; } public Rectangle getRect() { return new Rectangle(x, y, WIDTH, HEIGHT); } public boolean hitTank(Tank t) { if(this.live && this.getRect().intersects(t.getRect()) && t.isLive() && this.good != t.isGood()) { if(t.isGood()) { t.setLife(t.getLife()-20); if(t.getLife() <= 0) t.setLive(false); } else { t.setLive(false); } this.live = false; Explode e = new Explode(x, y, tc); tc.explodes.add(e); return true; } return false; } public boolean hitTanks(List tanks) { for(int i=0; i explodes = new ArrayList(); List missiles = new ArrayList(); List tanks = new ArrayList(); Image offScreenImage = null; Blood b = new Blood(); public void paint(Graphics g) { g.drawString("missiles count:" + missiles.size(), 10, 50); g.drawString("explodes count:" + explodes.size(), 10, 70); g.drawString("tanks count:" + tanks.size(), 10, 90); g.drawString("tanks life:" + myTank.getLife(), 10, 110); for(int i=0; i
/
本文档为【java人机坦克大战源代码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索