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

游戏

开发平台:

Java

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