Zielen: Genau
Wenn ein Roboter gescannt wird, heisst das noch nicht, dass er genau in Richtung der Kanone steht. Der hier vorgestellte Code richtet die Kanone genau auf den Roboter aus, bevor ein Schuss ausgelöst wird.
public void onScannedRobot(ScannedRobotEvent e) { double aimAt = getHeading() + e.getBearing(); turnGunRight(Utils.normalRelativeAngleDegrees(aimAt - getGunHeading())); fire(1); }
Absoluter Winkel zum Roboter berechnen
In aimAt
wird der absolute Winkel zum Roboter gespeichert. Er ergibt sich aus dem der Fahrtrichtung (<javadoc robocode>robocode.Robot#getHeading()|getHeading()</javadoc>) und dem relativen Winkel zum Roboter (<javadoc robocode>robocode.ScannedRobotEvent#getBearing()|e.getBearing()</javadoc>).
Kanone drehen
In der nächsten Zeile wird die Kanone in die Richtung aimAt
ausgerichtet. Um herauszufinden, um wieviel Grad die Kanone gedreht werden muss, wird die aktuelle Ausrichtung der Kanone (<javadoc robocode>robocode.Robot#getGunHeading()|getGunHeading()</javadoc>) von dem gewünschten Winkel subtrahiert.
Anschliessend wird der Winkel mit der Methode <javadoc robocode>robocode.util.Utils#normalRelativeAngleDegrees()|normalRelativeAngleDegrees()</javadoc> normalisiert. Das bedeutet, dass der Winkel auf den Bereich -180 bis 180 Grad eingeschränkt wird.</javadoc>
So wird sichergestellt, dass die Kanone auf dem kürzest möglichen Weg gedreht wird. Beispielsweise ergibt Utils.normalRelativeAngleDegrees(340)
den Wert 20.
Um die Methode <javadoc robocode>robocode.util.Utils#normalRelativeAngleDegrees()|normalRelativeAngleDegrees()</javadoc> zu verwenden, muss die Zeile
import robocode.util.*;
eingefügt werden.