cdde60d79f
- Add gotoTick/aimToTick controller functions (#25) - Update network dims: actor 5→6, state 42→44 (#26) - Rewrite mapActions for 6-dim command space (#27) - Delete stale weight files (shape mismatch) - Fix existing tests for new signatures Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
77 lines
3.0 KiB
Java
77 lines
3.0 KiB
Java
import dev.robocode.tankroyale.runner.*;
|
|
import dev.robocode.tankroyale.client.model.*;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
import java.util.logging.Level;
|
|
import java.util.logging.Logger;
|
|
|
|
/**
|
|
* GotoTest battle: GotoTest vs Target (1 round, 500 turns max via observation).
|
|
* Watches bot positions to verify diamond completion including wall-smash north waypoint.
|
|
*/
|
|
public class RunGotoTest {
|
|
|
|
static final Map<Integer, String> idToName = new ConcurrentHashMap<>();
|
|
|
|
public static void main(String[] args) {
|
|
Logger.getLogger("dev.robocode.tankroyale").setLevel(Level.WARNING);
|
|
|
|
String gotoDir = requireEnv("GOTO_BOT_DIR");
|
|
String sampleBots = requireEnv("SAMPLE_BOTS_DIR");
|
|
|
|
try (var runner = BattleRunner.create(b -> b.embeddedServer().suppressServerOutput())) {
|
|
var setup = BattleSetup.classic(s -> s.setNumberOfRounds(1));
|
|
var bots = List.of(
|
|
BotEntry.of(gotoDir),
|
|
BotEntry.of(sampleBots + "/Target")
|
|
);
|
|
|
|
var owner = new Object();
|
|
try (var handle = runner.startBattleAsync(setup, bots)) {
|
|
|
|
handle.getOnGameStarted().on(owner, event -> {
|
|
System.out.println("=== GAME STARTED ===");
|
|
for (var p : event.getParticipants()) {
|
|
idToName.put(p.getId(), p.getName());
|
|
System.out.printf(" #%d %s%n", p.getId(), p.getName());
|
|
}
|
|
});
|
|
|
|
handle.getOnTickEvent().on(owner, event -> {
|
|
int turn = event.getTurnNumber();
|
|
for (var state : event.getBotStates()) {
|
|
if (state.getName() != null) idToName.putIfAbsent(state.getId(), state.getName());
|
|
String name = idToName.getOrDefault(state.getId(), "#" + state.getId());
|
|
if (name.equals("GotoTest")) {
|
|
System.out.printf("T%-5d pos=(%-6.1f,%-6.1f) dir=%-7.2f spd=%-5.2f%n",
|
|
turn, state.getX(), state.getY(),
|
|
state.getDirection(), state.getSpeed());
|
|
}
|
|
}
|
|
});
|
|
|
|
handle.getOnRoundEnded().on(owner, event ->
|
|
System.out.printf("%n=== ROUND %d ENDED (turn %d) ===%n",
|
|
event.getRoundNumber(), event.getTurnNumber()));
|
|
|
|
var results = handle.awaitResults();
|
|
System.out.printf("%n=== RESULTS ===%n");
|
|
for (var r : results.getResults()) {
|
|
System.out.printf(" #%d %-25s %d pts%n",
|
|
r.getRank(), r.getName(), r.getTotalScore());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
static String requireEnv(String name) {
|
|
var v = System.getenv(name);
|
|
if (v == null || v.isBlank()) {
|
|
System.err.println("Error: " + name + " env var not set");
|
|
System.exit(1);
|
|
}
|
|
return v;
|
|
}
|
|
}
|