/* * 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 int spiralNumber = 0; public static void main(String[] args) { Bot escapeBot = new EscapeBot(args); escapeBot.run(); } protected EscapeBot(String[] args) { super(args); } protected char nextMove(View view) { boolean rocketDetected = view.data.contains("o"); return rocketDetected ? goToRocket(view) : walkBySpiral(view); } private char goToRocket(View view) { int rowDifference = findRocketRow(view) - 2; return rowDifference < 0 ? '^' : '<'; } private int findRocketRow(View view) { return view.data.indexOf('o') / view.width; } 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; } }