Informatikunterricht

am Gymnasium Kirchenfeld

Benutzer-Werkzeuge

Webseiten-Werkzeuge


robocode:target-static

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.

robocode/target-static.txt · Zuletzt geändert: 2020/10/13 14:25 von 127.0.0.1