TankWar game source code

Source: Internet
Author: User
Tags getcolor

The game runs as follows:


TankClient

Package tank; import java. awt. *; import java. awt. event. *; import java. util. list; import java. util. arrayList; /*** the role of this class is the main window of the tank game */public class TankClient extends Frame {/*** width of the entire tank game */public static final int GAME_WIDTH = 800; public static final int GAME_HEIGHT = 600; Tank myTank = new Tank (50, 50, true, Tank. direction. STOP, this); Wall w1 = new Wall (100,200, 20,150, this), w2 = new Wall (300,100, 300, 20, this); List <Explode> explodes = new ArrayList <Explode> (); List <Missile> missiles = new ArrayList <Missile> (); list <Tank> tanks = new ArrayList <Tank> (); Image offScreenImage = null; Blood B = new Blood (); public void paint (Graphics g) {/** specify the number of bullet-explosion-Tanks * and the tank life value */g. drawString ("missiles count:" + missiles. size (), 10, 50); g. drawString ("explodes count:" + explodes. size (), 10, 70); g. drawString ("t Anks count: "+ tanks. size (), 10, 90); g. drawString ("tanks life:" + myTank. getLife (), 10,110); if (tanks. size () <= 0) {for (int I = 0; I <5; I ++) {tanks. add (new Tank (50 + 40 * (I + 1), 50, false, Tank. direction. d, this) ;}}for (int I = 0; I <missiles. size (); I ++) {Missile m = missiles. get (I); m. hitTanks (tanks); m. hitTank (myTank); m. hitWall (w1); m. hitWall (w2); m. draw (g); // if (! M. isLive () missiles. remove (m); // else m. draw (g) ;}for (int I = 0; I <explodes. size (); I ++) {Explode e = explodes. get (I); e. draw (g) ;}for (int I = 0; I <tanks. size (); I ++) {Tank t = tanks. get (I); t. collidesWithWall (w1); t. collidesWithWall (w2); t. collidesWithTanks (tanks); t. draw (g);} myTank. draw (g); myTank. eat (B); w1.draw (g); w2.draw (g); B. draw (g);} public void update (Graphics g) {if (offScreenImage = null) {offScreenImage = this. createImage (GAME_WIDTH, GAME_HEIGHT);} Graphics gOffScreen = offScreenImage. getGraphics (); Color c = gOffScreen. getColor (); gOffScreen. setColor (Color. GREEN); gOffScreen. fillRect (0, 0, GAME_WIDTH, GAME_HEIGHT); gOffScreen. setColor (c); paint (gOffScreen); g. drawImage (offScreenImage, 0, 0, null);}/*** this method displays the tank Main Window **/public void lauchFrame () {for (int I = 0; I <10; I ++) {tanks. add (new Tank (50 + 40 * (I + 1), 50, false, Tank. direction. d, this);} // this. setLocation (400,300); this. setSize (GAME_WIDTH, GAME_HEIGHT); this. setTitle ("TankWar"); this. addWindowListener (new WindowAdapter () {public void windowClosing (invalid wevent e) {System. exit (0) ;}}); this. setResizable (false); this. setBackground (Color. GREEN); this. addKeyListener (new KeyMonitor (); setVisible (true); new Thread (new PaintThread ()). start ();} public static void main (String [] args) {TankClient tc = new TankClient (); tc. lauchFrame ();} private class PaintThread implements Runnable {public void run () {while (true) {repaint (); try {Thread. sleep (50);} catch (InterruptedException e) {e. printStackTrace () ;}}} private class KeyMonitor extends KeyAdapter {public void keyReleased (KeyEvent e) {myTank. keyReleased (e);} public void keyPressed (KeyEvent e) {myTank. keyPressed (e );}}}

Tank

Package tank; 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; 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; priv Ate 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 g Ood, 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. HEIG HT/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; ca Se 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_F2: if (! This. live) {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, 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 ;}/*** Hit the Wall * @ param w hit the Wall * @ return hit return true, otherwise false */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 <Tank> tanks) {for (int I = 0; I <tanks. size (); 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 void superFire () {Direction [] dirs = Direction. values (); for (int I = 0; I <8; I ++) {fire (dirs [I]) ;}} public int getLife () {return life ;} public void setLife (int life) {this. life = life;} private class BloodBar {public void draw (Graphics g) {Color c = g. getColor (); g. setColor (Color. RED); 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 (this. live & B. isLive () & this. getRect (). intersects (B. getRect () {this. life = 100; B. setLive (false); return true;} return false ;}}

Wall

package tank;import java.awt.*;public 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);}}

Explode

package tank;import java.awt.*;public 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 ++;}}

Bloode

Package tank; import java. awt. *; public class Blood {int x, y, w, h; TankClient tc; int step = 0; private boolean live = true; // specifies the trajectory of the block motion, the 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 ;}}

Missile

package tank;import java.awt.*;import java.util.List;public class Missile {public static final int XSPEED = 10;public static final int YSPEED = 10;public static final int WIDTH = 10;public static final int HEIGHT = 10;int x, y;Tank.Direction dir;private boolean good;private boolean live = true;private TankClient tc;public Missile(int x, int y, Tank.Direction dir) {this.x = x;this.y = y;this.dir = dir;}public Missile(int x, int y, boolean good, Tank.Direction dir, TankClient tc) {this(x, y, dir);this.good = good;this.tc = tc;}public void draw(Graphics g) {if(!live) {tc.missiles.remove(this);return;}Color c = g.getColor();g.setColor(Color.BLACK);g.fillOval(x, y, WIDTH, HEIGHT);g.setColor(c);move();}private void move() {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(x < 0 || y < 0 || x > 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<Tank> tanks) {for(int i=0; i<tanks.size(); i++) {if(hitTank(tanks.get(i))) {return true;}}return false;}public boolean hitWall(Wall w) {if(this.live && this.getRect().intersects(w.getRect())) {this.live = false;return true;}return false;}}

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.