tankWar

来源:互联网 发布:年轻人投资 知乎 编辑:程序博客网 时间:2024/05/18 02:34
java

 

 

 

import java.awt.*;import java.awt.event.*;

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 int x, y;  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 Tank(int x, int y) {  this.x = x;  this.y = y; }  public Tank(int x, int y, TankClient tc) {  this(x, y);  this.tc = tc; }  public void draw(Graphics g) {  Color c = g.getColor();  g.setColor(Color.RED);  g.fillOval(x, y, WIDTH, HEIGHT);  g.setColor(c);    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() {  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;  } }  public void keyPressed(KeyEvent e) {  int key = e.getKeyCode();  switch(key) {  case KeyEvent.VK_CONTROL:   tc.m = fire();   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_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;  }  locateDirection();   }  public Missile fire() {  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, ptDir);  return m; }}

 

 

import java.awt.*;

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;  public Missile(int x, int y, Tank.Direction dir) {  this.x = x;  this.y = y;  this.dir = dir; }  public void draw(Graphics g) {  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;  } }  }

 

import java.awt.*;import java.awt.event.*;

public class TankClient extends Frame { public static final int GAME_WIDTH = 800; public static final int GAME_HEIGHT = 600;  Tank myTank = new Tank(50, 50, this); Missile m = null;  Image offScreenImage = null;  public void paint(Graphics g) {  if(m!=null) m.draw(g);  myTank.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); }

 public void lauchFrame() {  //this.setLocation(400, 300);  this.setSize(GAME_WIDTH, GAME_HEIGHT);  this.setTitle("TankWar");  this.addWindowListener(new WindowAdapter() {   public void windowClosing(WindowEvent 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);  }   }}

 

 

 

 

 

 

 

 

 



 

 

 

 

 

 

 

 

原创粉丝点击