diff --git a/SnakeBot.java b/SnakeBot.java index abab4d7..305699b 100644 --- a/SnakeBot.java +++ b/SnakeBot.java @@ -2,8 +2,6 @@ package bot; public class SnakeBot extends Bot { - private boolean hasWagon = false; // Variable, um festzuhalten, ob der Rover einen Wagen hat - private int currentDirection = 1; // Variable, um die aktuelle Bewegungsrichtung des Rovers zu halten // 0 - oben, 1 - rechts, 2 - unten, 3 - links @@ -20,26 +18,27 @@ public class SnakeBot extends Bot { int roverPosition = data.indexOf('R'); // Überprüfen, ob eine Gesteinsprobe vorhanden ist - boolean hasRock = data.contains("@"); + boolean hasRock = data.charAt(roverPosition) == '@'; - // Wenn der Rover eine Gesteinsprobe gefunden hat und keinen Wagen hat, füge einen Wagen hinzu - if (hasRock && !hasWagon) { - hasWagon = true; // Den Wagen hinzufügen + // Wenn eine Gesteinsprobe vorhanden ist, sammeln + if (hasRock) { + return 'C'; // Beispielhaftes Zeichen für "Sammeln" } - // Überprüfen, ob der Rover in einen Wagen gefahren ist - boolean hasCrashed = data.charAt(roverPosition) == '*'; + // Bewegungsbefehl für die nächste Runde generieren + char moveCommand = getNextMove(data, width, roverPosition); - // Wenn der Rover in einen Wagen gefahren ist, breche ab und sende einen beliebigen Bewegungsbefehl - if (hasCrashed) { - return 'X'; // Beispielhaftes Zeichen für "Abbruch" - } + return moveCommand; + } - // Bewegungsrichtung des Rovers festlegen basierend auf der aktuellen Richtung + // Methode zur Berechnung des nächsten Bewegungsbefehls + private char getNextMove(String data, int width, int roverPosition) { + char moveCommand; + + // Aktuelle Bewegungsrichtung des Roboters festlegen int moveDirection = currentDirection % 4; // Modulo 4, um innerhalb des Bereichs von 0 bis 3 zu bleiben // Bewegungsbefehl entsprechend der aktuellen Richtung generieren - char moveCommand; switch (moveDirection) { case 0: // Hoch moveCommand = 'U'; @@ -58,29 +57,29 @@ public class SnakeBot extends Bot { break; } - // Nächste Position des Rovers berechnen basierend auf der aktuellen Position und der Bewegungsrichtung - int nextPosition; - if (moveDirection == 0) { - nextPosition = roverPosition - width; // Hoch - } else if (moveDirection == 1) { - nextPosition = roverPosition + 1; // Rechts - } else if (moveDirection == 2) { - nextPosition = roverPosition + width; // Runter - } else { - nextPosition = roverPosition - 1; // Links + // Überprüfen, ob der Rover am Rand des Spielfelds ist und die Richtung ändern muss, um im Spielfeld zu bleiben + int nextPosition = getNextPosition(roverPosition, width, moveCommand); + if (nextPosition < 0 || nextPosition >= data.length() || data.charAt(nextPosition) == '*') { + currentDirection++; + moveCommand = getNextMove(data, width, roverPosition); // Neue Richtung erneut berechnen } - // Überprüfen, ob die nächste Position ein gültiger Index im Spielfeld ist - boolean isValidMove = nextPosition >= 0 && nextPosition < data.length(); + return moveCommand; + } - // Wenn die Bewegung gültig ist, aktualisiere die aktuelle Position des Rovers - if (isValidMove) { - currentDirection++; // Aktualisiere die Bewegungsrichtung für die nächste Bewegung - return moveCommand; - } else { - // Wenn die Bewegung ungültig ist, ändere die Bewegungsrichtung um 90 Grad im Uhrzeigersinn - currentDirection++; - return ' '; // Platzhalter für einen beliebigen ungültigen Bewegungsbefehl + // Methode zur Berechnung der nächsten Position basierend auf der aktuellen Position und dem Bewegungsbefehl + private int getNextPosition(int roverPosition, int width, char moveCommand) { + switch (moveCommand) { + case 'U': // Hoch + return roverPosition - width; + case 'R': // Rechts + return roverPosition + 1; + case 'D': // Runter + return roverPosition + width; + case 'L': // Links + return roverPosition - 1; + default: + return -1; // Ungültige Position } } @@ -88,4 +87,3 @@ public class SnakeBot extends Bot { new SnakeBot(args).run(); } } -