/* | |||||
* 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 RumbleBotTest1 extends Bot { | |||||
private char currentDirection = '^'; // Start-Richtung des Bots | |||||
protected RumbleBotTest1(String[] args) { | |||||
super(args); | |||||
} | |||||
public static void main(String[] args) { | |||||
Bot rumbleBot = new RumbleBot(args); | |||||
rumbleBot.run(); | |||||
System.out.println("hello"); | |||||
} | |||||
@Override | |||||
protected char nextMove(View view) { | |||||
// Scanne das Spielfeld nach Gegnern in Fahrtrichtung | |||||
if (isEnemyInSight(view)) { | |||||
return 'f'; // Feuere, wenn ein Gegner in Reichweite ist | |||||
} | |||||
// Wenn kein Gegner in Sicht, wähle eine Bewegung | |||||
return chooseMove(view); | |||||
} | |||||
private boolean isEnemyInSight(View view) { | |||||
// Prüfe, ob ein Gegner in der aktuellen Fahrtrichtung ist | |||||
// Annahme: Gegner sind als ^, <, >, v gekennzeichnet | |||||
String enemySymbols = "^<>v"; | |||||
return view.data.contains(String.valueOf(currentDirection)) && enemySymbols.contains(String.valueOf(currentDirection)); | |||||
} | |||||
private char chooseMove(View view) { | |||||
// Wähle eine sichere Bewegung, vermeide Hindernisse und versuche, Gegner zu finden | |||||
// Einfache Implementierung: Wechsle die Richtung bei jedem Zug | |||||
currentDirection = getNextDirection(currentDirection); | |||||
return currentDirection; | |||||
} | |||||
private char getNextDirection(char currentDirection) { | |||||
switch (currentDirection) { | |||||
case '^': | |||||
return '>'; | |||||
case '>': | |||||
return 'v'; | |||||
case 'v': | |||||
return '<'; | |||||
case '<': | |||||
return '^'; | |||||
default: | |||||
return '^'; // Standardrichtung, falls etwas schiefgeht | |||||
} | |||||
} | |||||
} |
/* | |||||
* 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 RumbleBotTest2 extends Bot { | |||||
private char currentDirection = '^'; // Start-Richtung des Bots | |||||
protected RumbleBotTest2(String[] args) { | |||||
super(args); | |||||
} | |||||
public static void main(String[] args) { | |||||
Bot rumbleBot = new RumbleBot(args); | |||||
rumbleBot.run(); | |||||
} | |||||
@Override | |||||
protected char nextMove(View view) { | |||||
// Scanne das Spielfeld nach Gegnern in Fahrtrichtung | |||||
if (isEnemyInSight(view)) { | |||||
return 'f'; // Feuere, wenn ein Gegner in Reichweite ist | |||||
} | |||||
// Wenn kein Gegner in Sicht, wähle eine Bewegung | |||||
return chooseMove(view); | |||||
} | |||||
private boolean isEnemyInSight(View view) { | |||||
// Prüfe, ob ein Gegner in der aktuellen Fahrtrichtung ist | |||||
// Annahme: Gegner sind als ^, <, >, v gekennzeichnet | |||||
String enemySymbols = "^<>v"; | |||||
return view.data.contains(String.valueOf(currentDirection)) && enemySymbols.contains(String.valueOf(currentDirection)); | |||||
} | |||||
private char chooseMove(View view) { | |||||
// Wähle eine sichere Bewegung, vermeide Hindernisse und versuche, Gegner zu finden | |||||
// Einfache Implementierung: Wechsle die Richtung bei jedem Zug | |||||
currentDirection = getNextDirection(currentDirection); | |||||
return currentDirection; | |||||
} | |||||
private char getNextDirection(char currentDirection) { | |||||
switch (currentDirection) { | |||||
case '^': | |||||
return '>'; | |||||
case '>': | |||||
return 'v'; | |||||
case 'v': | |||||
return '<'; | |||||
case '<': | |||||
return '^'; | |||||
default: | |||||
return '^'; // Standardrichtung, falls etwas schiefgeht | |||||
} | |||||
} | |||||
} |