Aylin, Isabella, Edasu, Jasmin
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

EscapeBot.java 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package bot;
  2. import java.util.Scanner;
  3. public class EscapeBot extends Bot {
  4. private int currentX = 0;
  5. private int currentY = 0;
  6. private int spiralSize = 1;
  7. private int stepsInCurrentDirection = 0;
  8. private char currentDirection = 'd'; // Start with moving to the right
  9. public EscapeBot(String[] args) {
  10. super(args);
  11. }
  12. public static void main(String[] args) {
  13. EscapeBot escapeBot = new EscapeBot(args);
  14. escapeBot.run();
  15. }
  16. @Override
  17. protected char nextMove(View view) throws Exception {
  18. char[][] map = parseMap(view.data, view.width);
  19. char nextMove = 'w'; // Default move is to go forward
  20. if (map[currentY][currentX] == 'o') {
  21. System.out.println("Rakete gefunden!");
  22. nextMove = 'q'; // Beende die Verbindung, wenn die Rakete gefunden wurde
  23. } else {
  24. // Bewegungslogik im Spiralmuster
  25. switch (currentDirection) {
  26. case 'd': // Bewege nach rechts
  27. currentX++;
  28. break;
  29. case 's': // Bewege nach unten
  30. currentY++;
  31. break;
  32. case 'a': // Bewege nach links
  33. currentX--;
  34. break;
  35. case 'w': // Bewege nach oben
  36. currentY--;
  37. break;
  38. }
  39. stepsInCurrentDirection++;
  40. // Wenn der Rover die maximale Anzahl von Schritten in dieser Richtung erreicht hat
  41. if (stepsInCurrentDirection == spiralSize) {
  42. // Ändere die Richtung nach rechts
  43. switch (currentDirection) {
  44. case 'd':
  45. currentDirection = 's';
  46. break;
  47. case 's':
  48. currentDirection = 'a';
  49. break;
  50. case 'a':
  51. currentDirection = 'w';
  52. break;
  53. case 'w':
  54. currentDirection = 'd';
  55. break;
  56. }
  57. // Setze die Anzahl der Schritte in dieser Richtung zurück und erhöhe die Spiralgöße
  58. stepsInCurrentDirection = 0;
  59. if (currentDirection == 'd' || currentDirection == 'a') {
  60. spiralSize++;
  61. }
  62. }
  63. // Überprüfe, ob der nächste Zug innerhalb der Karte liegt
  64. if (currentX < 0 || currentX >= view.width || currentY < 0 || currentY >= view.width) {
  65. // Der nächste Zug liegt außerhalb der Karte, also drehe den Rover um
  66. nextMove = 'a';
  67. } else {
  68. // Der nächste Zug liegt innerhalb der Karte, bewege den Rover dorthin
  69. nextMove = currentDirection;
  70. }
  71. }
  72. return nextMove;
  73. }
  74. // Hilfsmethode zum Parsen des Kartenscans in ein char-Array
  75. private char[][] parseMap(String data, int width) {
  76. char[][] map = new char[width][width];
  77. String[] lines = data.split("\n");
  78. for (int i = 0; i < width; i++) {
  79. String line = lines[i];
  80. for (int j = 0; j < width; j++) {
  81. map[i][j] = line.charAt(j);
  82. }
  83. }
  84. return map;
  85. }
  86. }