====== 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 (robocode.Robot#getHeading()|getHeading()) und dem relativen Winkel zum Roboter (robocode.ScannedRobotEvent#getBearing()|e.getBearing()).
=== 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 (robocode.Robot#getGunHeading()|getGunHeading()) von dem gewünschten Winkel subtrahiert.
Anschliessend wird der Winkel mit der Methode robocode.util.Utils#normalRelativeAngleDegrees()|normalRelativeAngleDegrees() normalisiert. Das bedeutet, dass der Winkel auf den Bereich -180 bis 180 Grad eingeschränkt wird.
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 robocode.util.Utils#normalRelativeAngleDegrees()|normalRelativeAngleDegrees() zu verwenden, muss die Zeile
import robocode.util.*;
eingefügt werden.