Informatikunterricht

am Gymnasium Kirchenfeld

Benutzer-Werkzeuge

Webseiten-Werkzeuge


robocode:target-static

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
robocode:target-static [2015/03/23 07:58] – angelegt rosrobocode:target-static [2020/10/13 14:25] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 ====== Zielen: Genau ====== ====== 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.
  
 +<code java>
 +public void onScannedRobot(ScannedRobotEvent e) {
 +    double aimAt = getHeading() + e.getBearing();
 +    turnGunRight(Utils.normalRelativeAngleDegrees(aimAt - getGunHeading()));
 +    fire(1);
 +}
 +</code>
 +
 +=== 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
 +
 +<code java>
 +import robocode.util.*;
 +</code>
 +
 +eingefügt werden.
robocode/target-static.1427093912.txt.gz · Zuletzt geändert: 2020/10/13 14:25 (Externe Bearbeitung)