Tank.java
上传用户:kikomiki
上传日期:2021-10-31
资源大小:373k
文件大小:3k
源码类别:

游戏

开发平台:

Java

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