Crapy rumble bot
This commit is contained in:
parent
753bf1f5e9
commit
d0ae96def8
93
src/RumbleBot.java
Normal file
93
src/RumbleBot.java
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
package src;
|
||||||
|
|
||||||
|
public class RumbleBot extends Bot {
|
||||||
|
int stepCounter = 0;
|
||||||
|
int turnCount = 0;
|
||||||
|
int viewRange = 30;
|
||||||
|
int straightLength = 1;
|
||||||
|
|
||||||
|
protected RumbleBot(String[] args) {
|
||||||
|
super(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
RumbleBot bot = new RumbleBot(args);
|
||||||
|
bot.run();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected char nextMove(View view) throws Exception {
|
||||||
|
// Definition der gegnerischen Symbole
|
||||||
|
String enemySymbols = "<>v^";
|
||||||
|
|
||||||
|
// Annahme: Sichtfeld ist 9x9, der Bot steht immer in der Mitte (Zeile 4, Spalte 4)
|
||||||
|
final int gridSize = 9;
|
||||||
|
final int centerRow = gridSize / 2; // 4
|
||||||
|
final int centerCol = gridSize / 2; // 4
|
||||||
|
|
||||||
|
// 1. Prüfe, ob sich ein Gegner in der direkten Schusslinie befindet.
|
||||||
|
// Dabei werden die Zellen in der zentralen Spalte oberhalb des Bots untersucht (Reihen 0 bis 3).
|
||||||
|
for (int row = 0; row < centerRow; row++) {
|
||||||
|
int index = row * gridSize + centerCol;
|
||||||
|
char cell = view.data.charAt(index);
|
||||||
|
if (enemySymbols.indexOf(cell) != -1) {
|
||||||
|
// Ein Gegner befindet sich direkt vor dem Bot – feuere!
|
||||||
|
return 'f';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. Falls kein Gegner in der Schusslinie ist, prüfe, ob überhaupt ein Gegner sichtbar ist.
|
||||||
|
// Wenn keiner der gegnerischen Symbole im Sichtfeld vorkommt, folgt das Standard-Bewegungsmuster.
|
||||||
|
if (view.data.indexOf('<') == -1 &&
|
||||||
|
view.data.indexOf('>') == -1 &&
|
||||||
|
view.data.indexOf('^') == -1 &&
|
||||||
|
view.data.indexOf('v') == -1) {
|
||||||
|
// Kein Gegner im Sichtfeld – bewege dich gemäß dem Bewegungsmuster:
|
||||||
|
if (turnCount == 2) {
|
||||||
|
turnCount = 0;
|
||||||
|
straightLength++;
|
||||||
|
}
|
||||||
|
if (stepCounter < straightLength * viewRange) {
|
||||||
|
stepCounter++;
|
||||||
|
return '^';
|
||||||
|
} else {
|
||||||
|
stepCounter = 0;
|
||||||
|
turnCount++;
|
||||||
|
return '>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. Es ist ein Gegner sichtbar, allerdings nicht direkt in der Schusslinie.
|
||||||
|
// Bestimme, ob der Gegner eher links oder rechts liegt, und drehe in die entsprechende Richtung,
|
||||||
|
// um den Gegner in Zukunft in die Schusslinie zu bekommen.
|
||||||
|
boolean enemyOnLeft = false;
|
||||||
|
boolean enemyOnRight = false;
|
||||||
|
|
||||||
|
// Untersuche dazu alle Zellen des Sichtfelds:
|
||||||
|
for (int row = 0; row < gridSize; row++) {
|
||||||
|
for (int col = 0; col < gridSize; col++) {
|
||||||
|
int index = row * gridSize + col;
|
||||||
|
char cell = view.data.charAt(index);
|
||||||
|
if (enemySymbols.indexOf(cell) != -1) {
|
||||||
|
// Vergleiche die Spalte der Zelle mit der Mitte (centerCol)
|
||||||
|
if (col < centerCol) {
|
||||||
|
enemyOnLeft = true;
|
||||||
|
} else if (col > centerCol) {
|
||||||
|
enemyOnRight = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (enemyOnLeft) {
|
||||||
|
return '<';
|
||||||
|
} else if (enemyOnRight) {
|
||||||
|
return '>';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sollte zwar ein Gegner sichtbar sein, aber weder links noch rechts – als Fallback fahre vorwärts.
|
||||||
|
return '^';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user