BotsAI/src/EscapeBot.java

54 lines
2.5 KiB
Java
Raw Normal View History

/*
* EscapeBot.
* Eine wichtige Funktion des Rovers ist es, wieder zurück zur Rakete zu finden, damit er dort seine gesammelten Daten speichern kann.
* Die Rakete wird in den Scans als o angezeigt.
* Implementieren Sie eine neue Unterklasse von Bot mit dem Namen EscapeBot, die die Oberfläche nach der Rakete absucht und den Rover dorthin fahren lässt.
* Sie können davon ausgehen, dass bei dieser Aufgabenstellung keine Hindernisse (Wälder, Wasser, Felsen) auftreten.
* Allerdings kennen Sie die Abmessung von Torus III nicht und müssen versuchen, nicht ewig im Kreis zu fahren.
* Natürlich ist Energie auf Torus III knapp. Daher sollten Sie die Rakete mit möglichst wenigen Schritten finden.
* Um Ihre Implementierung zu testen, müssen Sie den Docker-Container mit einem leicht abgewandelten Befehl starten:
* docker run --rm -p 63187:63187 mediaeng/bots escape
* Sie sind mit Ihrem Programm zufrieden? Wie wäre es, einmal im Vergleich zu anderen Teams anzutreten?
* Sie müssen dazu aber entweder auf einem Hochschulrechner arbeiten oder ins VPN gehen.
* Melden Sie sich beim Praktikumsbetreuer, nennen Sie ihm Ihren Teamnamen und die IP-Nummer Ihres teilnehmenden Rechners.
* Lassen Sie sich vom Betreuer Ihres Praktikums die IP-Nummer der gemeinsamen Testumgebung geben und sorgen Sie dafür,
* dass sich Ihr Bot mit dieser Adresse verbinden kann. Warten Sie bitte mit dem Start, bis Sie dazu aufgefordert werden.
* Sobald alle Teams fertig sind, kann der Wettkampf beginnen.
*/
2023-12-14 17:15:23 +01:00
public class EscapeBot extends Bot{
String moves = "";
private int spiralNumber = 0;
2023-12-14 17:15:23 +01:00
public static void main(String[] args) {
2023-12-14 17:15:23 +01:00
Bot escapeBot = new EscapeBot(args);
escapeBot.run();
}
2024-01-07 15:16:41 +01:00
2023-12-14 17:15:23 +01:00
protected EscapeBot(String[] args) {
super(args);
}
protected char nextMove(View view) {
boolean rocketDetected = view.data.contains("o");
return rocketDetected ? goToRocket(view) : walkBySpiral(view);
}
2024-01-07 15:16:41 +01:00
private char goToRocket(View view) {
int rowDifference = findRocketRow(view) - 2;
return rowDifference < 0 ? '^' : '<';
}
2024-01-07 15:16:41 +01:00
private int findRocketRow(View view) {
return view.data.indexOf('o') / view.width;
2023-12-14 17:15:23 +01:00
}
2024-01-07 15:16:41 +01:00
private char walkBySpiral(View view) {
if (moves.isEmpty()) {
spiralNumber++;
moves += "^".repeat(view.width * spiralNumber) + ">" + "^".repeat(view.width * spiralNumber) + ">";
}
char nextMove = moves.charAt(0);
moves = moves.substring(1);
return nextMove;
}
2024-01-07 15:16:41 +01:00
}