Browse Source

„SnakeBot.java“ ändern

master
Jasmin Zieroth 3 months ago
parent
commit
83834cefcb
1 changed files with 33 additions and 35 deletions
  1. 33
    35
      SnakeBot.java

+ 33
- 35
SnakeBot.java View File



public class SnakeBot extends 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 private int currentDirection = 1; // Variable, um die aktuelle Bewegungsrichtung des Rovers zu halten
// 0 - oben, 1 - rechts, 2 - unten, 3 - links // 0 - oben, 1 - rechts, 2 - unten, 3 - links


int roverPosition = data.indexOf('R'); int roverPosition = data.indexOf('R');


// Überprüfen, ob eine Gesteinsprobe vorhanden ist // Ü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 int moveDirection = currentDirection % 4; // Modulo 4, um innerhalb des Bereichs von 0 bis 3 zu bleiben


// Bewegungsbefehl entsprechend der aktuellen Richtung generieren // Bewegungsbefehl entsprechend der aktuellen Richtung generieren
char moveCommand;
switch (moveDirection) { switch (moveDirection) {
case 0: // Hoch case 0: // Hoch
moveCommand = 'U'; moveCommand = 'U';
break; 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
} }
} }


new SnakeBot(args).run(); new SnakeBot(args).run();
} }
} }


Loading…
Cancel
Save