当前位置: 首页 > 工具软件 > tankwar > 使用案例 >

tankWar

卫飞
2023-12-01
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);   }     } }

 

 

 

 

 

 

 

 

 



 

 

 

 

 

 

 

 

 类似资料:

相关阅读

相关文章

相关问答