Dies ist eine alte Version des Dokuments!
Tracking
Für viele Techniken ist es wichtig, Informationen über die Roboter zu haben. Dazu werden die Informationen, welche beim Scannen der Roboter mittels <javadoc robocode>robocode.Robot#onScannedRobot(robocode.ScannedRobotEvent)|onScannedRobot()</javadoc> anfallen, in geeigneter Weise zwischengespeichert.
Die Klasse EnemyRobot
speichert die Information (Position) eines Roboters:
public class EnemyRobot { private Robot ownRobot; private String name; private double x; private double y; public EnemyRobot(Robot ownRobot, String name) { this.ownRobot = ownRobot; this.name = name; } public void update(ScannedRobotEvent e) { double headingToRobot = ownRobot.getHeading() + e.getBearing(); x = ownRobot.getX() + e.getDistance() * Math.sin(Math.toRadians(headingToRobot)); y = ownRobot.getY() + e.getDistance() * Math.cos(Math.toRadians(headingToRobot)); } public String getName() { return name; } public double getX() { return x; } public double getY() { return y; } }
Die Klasse EnemyTracker
führt eine Liste aller bekannten Roboter und aktualisiert diese.
import java.util.*; import robocode.*; public class EnemyTracker { private Map<String, EnemyRobot> enemies; private Robot ownRobot; public EnemyTracker(Robot ownRobot) { enemies = new HashMap<String, EnemyRobot>(); this.ownRobot = ownRobot; } public Collection<EnemyRobot> getEnemies() { return enemies.values(); } public void update(ScannedRobotEvent e) { if (!enemies.containsKey(e.getName())) { // Gegner noch nicht bekannt enemies.put(e.getName(), new EnemyRobot(ownRobot, e.getName())); } enemies.get(e.getName()).update(e); } }
Im eigenen Roboter wird ein EnemyTracker
-Objekt erzeugt. Bei jedem Aufruf von <javadoc robocode>robocode.Robot#onScannedRobot(robocode.ScannedRobotEvent)|onScannedRobot()</javadoc> wird die update()
-Methode des EnemyTracker
aufgerufen.
public class MyRobot extends Robot { private EnemyTracker enemyTracker; public void run() { enemyTracker = new EnemyTracker(this); // Weitere Aktionen } public void onScannedRobot(ScannedRobotEvent e) { enemyTracker.update(e); // Weitere Aktionen } }