/** * The Robocode Control API is used for controlling the Robocode * application from another external application. Basically, it is possible * to run battles between selected robots and retrieve the results. However, * it is also possible to get detailed information as snapshots during the * battles regarding e.g. the positions and headings of the individual robots * and bullets at a specific time during a battle. * <p> * The main entry class is the Robocode.Control.RobocodeEngine class, which * must be instantiated by the application controlling Robocode. With the * RobocodeEngine, a battle specification must be provided in order to run a * battle. The battle specification specify the size of the battlefield, and * which rules that must be used. In addition, the participant robots must be * selected, which must exist in the robot directory of Robocode in * advantage. * * <h2>Example</h2> * <p> * Here is a simple application that runs a battle in Robocode for 5 rounds * on the default battlefield of 800x600 pixels. The robots selected for the * battle are sample.RamFire and sample.Corners. * * <pre> * import robocode.control.*; * import robocode.control.events.*; * * // * // Application that demonstrates how to run two sample robots in Robocode using the * // RobocodeEngine from the robocode.control package. * // * // @author Flemming N. Larsen * // * public class BattleRunner { * * public static void main(String[] args) { * * // Create the RobocodeEngine * // RobocodeEngine engine = new RobocodeEngine(); // Run from current working directory * RobocodeEngine engine = new RobocodeEngine(new java.io.File("C:/Robocode")); // Run from C:/Robocode * * // Add our own battle listener to the RobocodeEngine * engine.addBattleListener(new BattleObserver()); * * // Show the Robocode battle view * engine.setVisible(true); * * // Setup the battle specification * * int numberOfRounds = 5; * BattlefieldSpecification battlefield = new BattlefieldSpecification(800, 600); // 800x600 * RobotSpecification[] selectedRobots = engine.getLocalRepository("sample.RamFire,sample.Corners"); * * BattleSpecification battleSpec = new BattleSpecification(numberOfRounds, battlefield, selectedRobots); * * // Run our specified battle and let it run till it is over * engine.runBattle(battleSpec, true); // waits till the battle finishes * * // Cleanup our RobocodeEngine * engine.close(); * * // Make sure that the Java VM is shut down properly * System.exit(0); * } * } * * // * // Our private battle listener for handling the battle event we are interested in. * // * class BattleObserver extends BattleAdaptor { * * // Called when the battle is completed successfully with battle results * public void onBattleCompleted(BattleCompletedEvent e) { * System.out.println("-- Battle has completed --"); * * // Print out the sorted results with the robot names * System.out.println("Battle results:"); * for (robocode.BattleResults result : e.getSortedResults()) { * System.out.println(" " + result.getTeamLeaderName() + ": " + result.getScore()); * } * } * * // Called when the game sends out an information message during the battle * public void onBattleMessage(BattleMessageEvent e) { * System.out.println("Msg> " + e.getMessage()); * } * * // Called when the game sends out an error message during the battle * public void onBattleError(BattleErrorEvent e) { * System.out.println("Err> " + e.getError()); * } * } * </pre> */ package robocode.control;