diff --git a/src/EscapeBot.java b/src/EscapeBot.java index a16198b..8d0fbb2 100644 --- a/src/EscapeBot.java +++ b/src/EscapeBot.java @@ -1,7 +1,22 @@ +/* +* 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. +*/ public class EscapeBot extends Bot{ String moves = ""; - private boolean goesForward = true; - private int circleNumber = 0; private int spiralNumber = 0; public static void main(String[] args) { @@ -25,33 +40,6 @@ public class EscapeBot extends Bot{ private int findRocketRow(View view) { return view.data.indexOf('o') / 5; } - private char walkByColumns() { - if(moves.isEmpty()){ - moves = "^".repeat(28); - moves += (goesForward ? ">^^^^^>" : "<^^^^^<"); - goesForward = !goesForward; - } - char nextMove = moves.charAt(0); - moves = moves.substring(1); - return nextMove; - } - - private char walkByCircles(){ - if (moves.isEmpty()) { - circleNumber++; - moves += "^".repeat(5) + ">"; - int[] steps = {5, 10, 10, 10}; - - for (int step : steps) { - moves += "^".repeat(step * circleNumber) + ">"; - } - - moves += "^".repeat(5 * circleNumber) + "<"; - } - char nextMove = moves.charAt(0); - moves = moves.substring(1); - return nextMove; - } private char walkBySpiral(){ if (moves.isEmpty()) { diff --git a/src/RumbleBot.java b/src/RumbleBot.java index 05678e8..e1622b8 100644 --- a/src/RumbleBot.java +++ b/src/RumbleBot.java @@ -1,3 +1,11 @@ +/* +* RumbleBot. +* Der Rover ist auch mit einem Geschütz ausgestattet, dass nur in Fahrrichtung feuern kann. +* Der Feuerbefehl ist „f“. Die Reichweite des Geschützes entspricht der Scanreichweite. +* Wälder, Felsen und Wasser blockieren Schüsse. +* Der Rover ist beim ersten Treffer zerstört. Wer überlebt am längsten? +* docker run --rm -p 63187:63187 mediaeng/bots rumble +*/ public class RumbleBot extends Bot{ private String moves = ""; public static void main(String[] args) { diff --git a/src/SnakeBot.java b/src/SnakeBot.java index 9d1c4ea..553c003 100644 --- a/src/SnakeBot.java +++ b/src/SnakeBot.java @@ -1,7 +1,17 @@ +/* +* SnakeBot. +* Eine weitere wichtige Funktion des Rovers ist es, Gesteinsproben zu sammeln. +* Interessante Steine sind im Scan mit einem @ gekennzeichnet. +* Mit jeder aufgesammelten Gesteinsprobe wird an den Rover ein Wagen angehängt, der zukünftig hinter dem Rover mitgezogen wird. +* Die Wagen sind im Scan mit * zu identifizieren. +* Vorsicht: fährt der Rover in einen Wagen, ist er schwer beschädigt und kann keine weiteren Steine mehr sammeln. +* Sie können Ihre Implementierung wieder testen mit: +* docker run --rm -p 63187:63187 mediaeng/bots snakes +* Für diese Funktion wird am 7.2.24 in einer gemeinsamen Arena mit allen Teams des Jahrgangs ein Wettbewerb durchgeführt. +* Die besten acht Teams qualifizieren sich für die Königsdisziplin „Rumble“. +*/ public class SnakeBot extends Bot{ String moves = ""; - private boolean goesForward = true; - private int circleNumber = 0; private int spiralNumber = 0; private boolean ignoreStone = false; public static void main(String[] args) { @@ -12,7 +22,7 @@ public class SnakeBot extends Bot{ protected SnakeBot(String[] args) { super(args); } - //@TODO + //@TODO Find a better way to avoid collectedStones protected char nextMove(View view){ boolean stoneDetected = view.data.contains("@"); char nextMove; @@ -68,34 +78,6 @@ public class SnakeBot extends Bot{ return view.data.indexOf('@') / 5; } - private char walkByColumns() { - if(moves.isEmpty()){ - moves = "^".repeat(28); - moves += (goesForward ? ">^^^^^>" : "<^^^^^<"); - goesForward = !goesForward; - } - char nextMove = moves.charAt(0); - moves = moves.substring(1); - return nextMove; - } - - private char walkByCircles(){ - if (moves.isEmpty()) { - circleNumber++; - moves += "^".repeat(5) + ">"; - int[] steps = {5, 10, 10, 10}; - - for (int step : steps) { - moves += "^".repeat(step * circleNumber) + ">"; - } - - moves += "^".repeat(5 * circleNumber) + "<"; - } - char nextMove = moves.charAt(0); - moves = moves.substring(1); - return nextMove; - } - private char walkBySpiral(){ if (moves.isEmpty()) { spiralNumber++;