Browse Source

„SnakeBot.java“ hinzufügen

master
Jasmin Zieroth 3 months ago
parent
commit
2d76dfd40b
1 changed files with 91 additions and 0 deletions
  1. 91
    0
      SnakeBot.java

+ 91
- 0
SnakeBot.java View File

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


Loading…
Cancel
Save