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

游戏

开发平台:

Java

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