Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2019
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.42 KB | None | 0 0
  1. public class TARRamRobot extends TeamRobot {
  2.  
  3. private ArrayList<Robot> enemyRobots = new ArrayList<Robot>();
  4. private int turnDirection = 1;
  5. private boolean left = false;
  6. private Robot closestRobot;
  7.  
  8. public void run() {
  9. while (true) {
  10. // Fast scanning
  11. if (getRadarTurnRemaining() == 0.0) {
  12. setTurnRadarRight(Double.POSITIVE_INFINITY);
  13. }
  14. // setTurnRight(5 * turnDirection);
  15. execute();
  16.  
  17. if (enemyRobots.size() > 0) {
  18. if (closestRobot == null) {
  19. closestRobot = getClosestRobot();
  20. } else if (!closestRobot.isAlive()) {
  21. enemyRobots.remove(closestRobot);
  22. } else {
  23. runAlgorithm(closestRobot);
  24. }
  25. }
  26. // while (getDistanceRemaining() > 0 && getTurnRemaining() > 0) {
  27. // execute();
  28. // }
  29. }
  30. }
  31.  
  32. private void zigzagRun(double distance) {
  33. setAhead(distance);
  34. if (left) {
  35. left = false;
  36. turnLeft(60);
  37. } else {
  38. left = true;
  39. turnRight(60);
  40. }
  41. }
  42.  
  43. private Robot getClosestRobot() {
  44. if (enemyRobots.isEmpty()) {
  45. return null;
  46. }
  47.  
  48. Robot returnRobot = enemyRobots.get(0);
  49.  
  50. for (Robot robot : enemyRobots) {
  51. if (robot.getDistance() < returnRobot.getDistance()) ;
  52. {
  53. returnRobot = robot;
  54. }
  55. }
  56. return returnRobot;
  57. }
  58.  
  59. /**
  60. * This robot will scan every robot and decides on the distance between him and the enemy
  61. * how hard he will shoot.
  62. *
  63. * @param event
  64. */
  65. public void onScannedRobot(ScannedRobotEvent event) {
  66. if (!isTeammate(event.getName())) {
  67. System.out.println(event.getName());
  68. Robot enemyRobot = new Robot(event.getName(), event.getEnergy(), event.getDistance(), event.getBearing());
  69. addEnemyRobot(enemyRobot);
  70. }
  71. }
  72.  
  73. public void dodgeWall() {
  74. if (getX() < 20 || getX() > getBattleFieldWidth() - 20 || getY() < 20 || getY() > getBattleFieldHeight() - 20) {
  75. turnRight(normalRelativeAngleDegrees(0 - getHeading()));
  76. }
  77.  
  78. }
  79.  
  80. @Override
  81. public void onHitRobot(HitRobotEvent event) {
  82. setBack(10);
  83. }
  84.  
  85. private void runAlgorithm(Robot toTargetRobot) {
  86. dodgeWall();
  87. if (toTargetRobot.getDistance() > 300) {
  88. fire(0.5);
  89. System.out.println("Shooting 0.5 bullets");
  90. } else if (toTargetRobot.getDistance() < 300 || toTargetRobot.getDistance() > 100) {
  91. fire(1);
  92. System.out.println("Shooting 1 bullets");
  93. } else {
  94. fire(Rules.MAX_BULLET_POWER);
  95. System.out.println("Shooting 3 bullets");
  96. }
  97. turnRight(toTargetRobot.getBearing());
  98. double distanceToRobot = toTargetRobot.getDistance();
  99.  
  100. if (distanceToRobot > 200) {
  101. for (int i = 0; i < 3; i++) {
  102. if (checkWallNearby(distanceToRobot / 3 + 20)) {
  103. setBack(100);
  104. turnLeft(90);
  105. } else {
  106.  
  107. zigzagRun(distanceToRobot / 3);
  108. }
  109. }
  110. } else {
  111. if (checkWallNearby(distanceToRobot + 20)) {
  112. setBack(100);
  113. turnLeft(90);
  114. } else {
  115. setAhead(distanceToRobot);
  116. }
  117. }
  118. execute();
  119.  
  120. while (getDistanceRemaining() > 0 && getTurnRemaining() > 0) {
  121. execute();
  122. }
  123. }
  124.  
  125. private boolean checkWallNearby(double distanceToRobot) {
  126. boolean wallnearby = false;
  127. if (getX() <= distanceToRobot) {
  128. wallnearby = true;
  129. } else if (getX() >= getBattleFieldWidth() - 75) {
  130. wallnearby = true;
  131. }
  132.  
  133. if (getY() < distanceToRobot) {
  134. wallnearby = true;
  135. } else if (getY() >= getBattleFieldHeight() - distanceToRobot) {
  136. wallnearby = true;
  137. }
  138.  
  139. return wallnearby;
  140. }
  141.  
  142. private void addEnemyRobot(Robot newEnemyRobot) {
  143. if (enemyRobots.isEmpty()) {
  144. enemyRobots.add(newEnemyRobot);
  145. } else {
  146. for (Robot iterationRobot : enemyRobots) {
  147. // If the robot does not exist
  148. if (!iterationRobot.getName().equals(newEnemyRobot.getName())) {
  149. System.out.println("enemy added " + newEnemyRobot.getName());
  150. enemyRobots.add(newEnemyRobot);
  151. for (int i = 0; i < enemyRobots.size(); i++) {
  152. System.out.println(enemyRobots.get(i));
  153. }
  154. } else {
  155. Robot robot = getRobotByName(newEnemyRobot.getName());
  156. robot.setBearing(newEnemyRobot.getBearing());
  157. robot.setEnergy(newEnemyRobot.getEnergy());
  158. robot.setDistance(newEnemyRobot.getDistance());
  159. }
  160. }
  161. }
  162. }
  163.  
  164. private Robot getRobotByName(String name) {
  165. for (Robot robot : enemyRobots) {
  166. if (robot.getName().equals(name)) {
  167. return robot;
  168. }
  169. }
  170. return null;
  171. }
  172. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement