|
|
@@ -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(); |
|
|
|
} |
|
|
|
} |
|
|
|
|