From 2d76dfd40b46531b91f340443c35cba24aefcd17 Mon Sep 17 00:00:00 2001 From: Jasmin Zieroth Date: Sun, 4 Feb 2024 22:09:30 +0000 Subject: [PATCH] =?UTF-8?q?=E2=80=9ESnakeBot.java=E2=80=9C=20hinzuf=C3=BCg?= =?UTF-8?q?en?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SnakeBot.java | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 SnakeBot.java diff --git a/SnakeBot.java b/SnakeBot.java new file mode 100644 index 0000000..abab4d7 --- /dev/null +++ b/SnakeBot.java @@ -0,0 +1,91 @@ +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 + + public SnakeBot(String[] args) { + super(args); + } + + @Override + protected char nextMove(View view) throws Exception { + String data = view.data; + int width = view.width; + + // Position des Rovers finden + int roverPosition = data.indexOf('R'); + + // Überprüfen, ob eine Gesteinsprobe vorhanden ist + boolean hasRock = data.contains("@"); + + // 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 + } + + // Überprüfen, ob der Rover in einen Wagen gefahren ist + boolean hasCrashed = data.charAt(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" + } + + // Bewegungsrichtung des Rovers festlegen basierend auf der aktuellen Richtung + 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'; + break; + case 1: // Rechts + moveCommand = 'R'; + break; + case 2: // Runter + moveCommand = 'D'; + break; + case 3: // Links + moveCommand = 'L'; + break; + default: + moveCommand = ' '; // Standardbewegungsbefehl, falls etwas schief geht + 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 die nächste Position ein gültiger Index im Spielfeld ist + boolean isValidMove = nextPosition >= 0 && nextPosition < data.length(); + + // 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 + } + } + + public static void main(String[] args) { + new SnakeBot(args).run(); + } +} +