|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- package bot;
-
- import java.util.Scanner;
-
- public class EscapeBot extends Bot {
- private int currentX = 0;
- private int currentY = 0;
- private int spiralSize = 1;
- private int stepsInCurrentDirection = 0;
- private char currentDirection = 'd'; // Start with moving to the right
-
- public EscapeBot(String[] args) {
- super(args);
- }
-
- public static void main(String[] args) {
- EscapeBot escapeBot = new EscapeBot(args);
- escapeBot.run();
- }
-
- @Override
- protected char nextMove(View view) throws Exception {
- char[][] map = parseMap(view.data, view.width);
-
- char nextMove = 'w'; // Default move is to go forward
-
- if (map[currentY][currentX] == 'o') {
- System.out.println("Rakete gefunden!");
- nextMove = 'q'; // Beende die Verbindung, wenn die Rakete gefunden wurde
- } else {
- // Bewegungslogik im Spiralmuster
- switch (currentDirection) {
- case 'd': // Bewege nach rechts
- currentX++;
- break;
- case 's': // Bewege nach unten
- currentY++;
- break;
- case 'a': // Bewege nach links
- currentX--;
- break;
- case 'w': // Bewege nach oben
- currentY--;
- break;
- }
- stepsInCurrentDirection++;
-
- // Wenn der Rover die maximale Anzahl von Schritten in dieser Richtung erreicht hat
- if (stepsInCurrentDirection == spiralSize) {
- // Ändere die Richtung nach rechts
- switch (currentDirection) {
- case 'd':
- currentDirection = 's';
- break;
- case 's':
- currentDirection = 'a';
- break;
- case 'a':
- currentDirection = 'w';
- break;
- case 'w':
- currentDirection = 'd';
- break;
- }
-
- // Setze die Anzahl der Schritte in dieser Richtung zurück und erhöhe die Spiralgöße
- stepsInCurrentDirection = 0;
- if (currentDirection == 'd' || currentDirection == 'a') {
- spiralSize++;
- }
- }
-
- // Überprüfe, ob der nächste Zug innerhalb der Karte liegt
- if (currentX < 0 || currentX >= view.width || currentY < 0 || currentY >= view.width) {
- // Der nächste Zug liegt außerhalb der Karte, also drehe den Rover um
- nextMove = 'a';
- } else {
- // Der nächste Zug liegt innerhalb der Karte, bewege den Rover dorthin
- nextMove = currentDirection;
- }
- }
-
- return nextMove;
- }
-
- // Hilfsmethode zum Parsen des Kartenscans in ein char-Array
- private char[][] parseMap(String data, int width) {
- char[][] map = new char[width][width];
- String[] lines = data.split("\n");
- for (int i = 0; i < width; i++) {
- String line = lines[i];
- for (int j = 0; j < width; j++) {
- map[i][j] = line.charAt(j);
- }
- }
- return map;
- }
- }
-
-
|