„SnakeBot.java“ ändern
This commit is contained in:
parent
2d76dfd40b
commit
83834cefcb
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user