Tank.java
上传用户:cswwx88
上传日期:2021-03-26
资源大小:9k
文件大小:3k
源码类别:

射击游戏

开发平台:

Java

  1. import java.awt.*;
  2. import java.awt.event.KeyEvent;
  3. public class Tank {
  4.    
  5. private int x,y;
  6. private int XSpeed = 4;
  7. private int YSpeed = 4;
  8. public  static final int WIDTH = 20;
  9. public static final int HEIGHT = 20;
  10. private TankClient tc =null;
  11.    
  12. enum Direction{U,RU,R,RD,D,LD,L,LU,STOP};
  13. private Direction dir = Direction.STOP;
  14. boolean keyU = false, keyD = false, keyR = false, keyL = false;
  15.    public Tank (int x ,int y){
  16.    this.x = x;
  17.    this.y = y;
  18.    
  19.    }
  20.    
  21.    public Tank(int x,int y,TankClient tc){
  22.    this(x,y);
  23.    this.tc = tc;
  24.    }
  25.    
  26.    public void draw(Graphics g){
  27.    Color c = g.getColor();
  28. g.setColor(Color.red);
  29. g.fillOval(x,y,WIDTH,HEIGHT);
  30. g.setColor(c);
  31. move();
  32.    }
  33.    
  34.    public void keyPressed(KeyEvent e){
  35. int key = e.getKeyCode();
  36. switch(key){
  37. case KeyEvent.VK_CONTROL:
  38. tc.myMissile = fire();
  39. break;
  40. case KeyEvent.VK_UP:
  41. keyU = true;
  42. break;
  43. case KeyEvent.VK_DOWN:
  44. keyD = true;
  45. break;
  46. case KeyEvent.VK_LEFT:
  47. keyL = true;
  48. break;
  49. case KeyEvent.VK_RIGHT:
  50. keyR = true;
  51. break;
  52. }
  53. tankDirection();
  54. }
  55.    
  56.    public void keyReleased(KeyEvent e){
  57.    int key = e.getKeyCode();
  58.    switch(key){
  59. case KeyEvent.VK_UP:
  60. keyU = false;
  61. break;
  62. case KeyEvent.VK_DOWN:
  63. keyD = false;
  64. break;
  65. case KeyEvent.VK_LEFT:
  66. keyL = false;
  67. break;
  68. case KeyEvent.VK_RIGHT:
  69. keyR = false;
  70. break;
  71.    }
  72.    }
  73.    
  74.    public void tankDirection (){
  75.    if (keyU&&!keyR&&!keyD&&!keyL){
  76.    dir = Direction.U;
  77.    }
  78.    else if (keyU&&keyR&&!keyD&&!keyL){
  79.    dir = Direction.RU;
  80.    }
  81.    else if (!keyU&&keyR&&!keyD&&!keyL){
  82.    dir = Direction.R;
  83.    }
  84.    else if (!keyU&&keyR&&keyD&&!keyL){
  85.    dir = Direction.RD;
  86.    }
  87.    else if (!keyU&&!keyR&&keyD&&!keyL){
  88.    dir = Direction.D;
  89.    }
  90.    else if (!keyU&&!keyR&&keyD&&keyL){
  91.    dir = Direction.LD;
  92.    }
  93.    else  if (!keyU&&!keyR&&!keyD&&keyL){
  94.    dir = Direction.L;
  95.    }
  96.    else if (keyU&&!keyR&&!keyD&&keyL){
  97.    dir = Direction.LU;
  98.    }
  99.    else if (!keyU&&!keyR&&!keyD&&!keyL){
  100.    dir = Direction.STOP;
  101.        }
  102.   }
  103.       public void move(){
  104.        switch (dir){
  105.        case U :
  106.            y-=YSpeed;
  107.        break;
  108.        case RU :
  109.            x+=XSpeed;
  110.            y-=YSpeed;
  111.        break;
  112.        case R :
  113.            x+=XSpeed;
  114.        break;
  115.        case RD :
  116.            x+=XSpeed;
  117.            y+=YSpeed;
  118.        break;
  119.        case D :
  120.            y+=YSpeed;
  121.        break;
  122.        case LD:
  123.            x-=XSpeed;
  124.            y+=YSpeed;
  125.        break;
  126.        case L :
  127.            x-=XSpeed;
  128.        break;
  129.        case LU :
  130.            x-=XSpeed;
  131.            y-=YSpeed;
  132.        break;
  133.        }
  134.        
  135.       }
  136.       
  137.       public Missile fire(){
  138.       int x = this.x +Tank.WIDTH/2-Missile.WIDTH/2;
  139.        int y =this.x +Tank.HEIGHT/2 -Missile.HEIGHT/2;
  140.        Missile myMissile = new Missile(x,y,dir);
  141.        return myMissile;
  142.       }
  143. }