„SnakeBot.java“ hinzufügen
This commit is contained in:
parent
62a296ef04
commit
2d76dfd40b
91
SnakeBot.java
Normal file
91
SnakeBot.java
Normal 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…
x
Reference in New Issue
Block a user