Browse Source

Added task descriptions and removed walkByColumns and walkByCircles

testing_N
Illia Soloviov 11 months ago
parent
commit
0f5db8bb66
3 changed files with 38 additions and 60 deletions
  1. 17
    29
      src/EscapeBot.java
  2. 8
    0
      src/RumbleBot.java
  3. 13
    31
      src/SnakeBot.java

+ 17
- 29
src/EscapeBot.java View File

/*
* 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{ public class EscapeBot extends Bot{
String moves = ""; String moves = "";
private boolean goesForward = true;
private int circleNumber = 0;
private int spiralNumber = 0; private int spiralNumber = 0;


public static void main(String[] args) { public static void main(String[] args) {
private int findRocketRow(View view) { private int findRocketRow(View view) {
return view.data.indexOf('o') / 5; 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(){ private char walkBySpiral(){
if (moves.isEmpty()) { if (moves.isEmpty()) {

+ 8
- 0
src/RumbleBot.java View File

/*
* 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{ public class RumbleBot extends Bot{
private String moves = ""; private String moves = "";
public static void main(String[] args) { public static void main(String[] args) {

+ 13
- 31
src/SnakeBot.java View File

/*
* 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{ public class SnakeBot extends Bot{
String moves = ""; String moves = "";
private boolean goesForward = true;
private int circleNumber = 0;
private int spiralNumber = 0; private int spiralNumber = 0;
private boolean ignoreStone = false; private boolean ignoreStone = false;
public static void main(String[] args) { public static void main(String[] args) {
protected SnakeBot(String[] args) { protected SnakeBot(String[] args) {
super(args); super(args);
} }
//@TODO
//@TODO Find a better way to avoid collectedStones
protected char nextMove(View view){ protected char nextMove(View view){
boolean stoneDetected = view.data.contains("@"); boolean stoneDetected = view.data.contains("@");
char nextMove; char nextMove;
return view.data.indexOf('@') / 5; 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(){ private char walkBySpiral(){
if (moves.isEmpty()) { if (moves.isEmpty()) {
spiralNumber++; spiralNumber++;

Loading…
Cancel
Save