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

游戏

开发平台:

Java

  1. import java.awt.*;
  2. import java.util.List;
  3. public class Missile {
  4. public static final int XSPEED = 10;
  5. public static final int YSPEED = 10;
  6. public static final int WIDTH = 10;
  7. public static final int HEIGHT = 10;
  8. int x, y;
  9. Tank.Direction dir;
  10. private boolean live = true;
  11. private TankClient tc;
  12. public Missile(int x, int y, Tank.Direction dir) {
  13. this.x = x;
  14. this.y = y;
  15. this.dir = dir;
  16. }
  17. public Missile(int x, int y, Tank.Direction dir, TankClient tc) {
  18. this(x, y, dir);
  19. this.tc = tc;
  20. }
  21. public void draw(Graphics g) {
  22. if(!live) {
  23. tc.missiles.remove(this);
  24. return;
  25. }
  26. Color c = g.getColor();
  27. g.setColor(Color.BLACK);
  28. g.fillOval(x, y, WIDTH, HEIGHT);
  29. g.setColor(c);
  30. move();
  31. }
  32. private void move() {
  33. switch(dir) {
  34. case L:
  35. x -= XSPEED;
  36. break;
  37. case LU:
  38. x -= XSPEED;
  39. y -= YSPEED;
  40. break;
  41. case U:
  42. y -= YSPEED;
  43. break;
  44. case RU:
  45. x += XSPEED;
  46. y -= YSPEED;
  47. break;
  48. case R:
  49. x += XSPEED;
  50. break;
  51. case RD:
  52. x += XSPEED;
  53. y += YSPEED;
  54. break;
  55. case D:
  56. y += YSPEED;
  57. break;
  58. case LD:
  59. x -= XSPEED;
  60. y += YSPEED;
  61. break;
  62. case STOP:
  63. break;
  64. }
  65. if(x < 0 || y < 0 || x > TankClient.GAME_WIDTH || y > TankClient.GAME_HEIGHT) {
  66. live = false;
  67. }
  68. }
  69. public boolean isLive() {
  70. return live;
  71. }
  72. public Rectangle getRect() {
  73. return new Rectangle(x, y, WIDTH, HEIGHT);
  74. }
  75. public boolean hitTank(Tank t) {
  76. if(this.getRect().intersects(t.getRect()) && t.isLive()) {
  77. t.setLive(false);
  78. this.live = false;
  79. Explode e = new Explode(x, y, tc);
  80. tc.explodes.add(e);
  81. return true;
  82. }
  83. return false;
  84. }
  85. public boolean hitTanks(List<Tank> tanks) {
  86. for(int i=0; i<tanks.size(); i++) {
  87. if(hitTank(tanks.get(i))) {
  88. return true;
  89. }
  90. }
  91. return false;
  92. }
  93. }