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

游戏

开发平台:

Java

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