Informatikunterricht

am Gymnasium Kirchenfeld

Benutzer-Werkzeuge

Webseiten-Werkzeuge


robocode:start

Dies ist eine alte Version des Dokuments!


Robocode

Spielregeln

Aufbau

Ein Roboter besteht aus folgenden Teilen:

  • Fahrwerk
  • Turm
  • Radar

Fahrwerk und Turm/Radar können unabhängig voneinander bewegt werden. Um Turm und Radar unabhängig voneinander bewegen zu können, muss ein AdvancedRobot verwendet werden.

Energie

Ein Roboter verliert Energie bei folgenden Ereignissen:

Ereignis Schaden
in eine Wand fahren max(abs(v) * 0.5 - 1, 0)
von einem gegnerischen Geschoss getroffen werden 4 * P + 2 * max(P - 1 , 0)
von einem Gegner gerammt werden 0.6
feuern 3 * P

Dabei steht v für die Geschwindigkeit des Roboters und P für die Geschosskraft (bullet power).

Bewegung

  • <javadoc robocode>robocode.Robot#ahead(double)|ahead(double)</javadoc>: Vorwärts fahren.
  • <javadoc robocode>robocode.Robot#back(double)|back(double)</javadoc>: Rückwärts fahren.
  • <javadoc robocode>robocode.Robot#turnLeft(double)|turnLeft(double)</javadoc>: Nach links drehen.
  • <javadoc robocode>robocode.Robot#turnRight(double)|turnRight(double)</javadoc>: Nach rechts drehen.
  • <javadoc robocode>robocode.Robot#getVelocity()|getVelocity()</javadoc>: Aktuelle Geschwindigkeit in Pixel pro Sekunde.
  • <javadoc robocode>robocode.Robot#getHeading()|getHeading()</javadoc>: Aktuelle Fahrtrichtung in Grad.
  • <javadoc robocode>robocode.Robot#getX()|getX()</javadoc>: Aktuelle x-Koordinate des Roboters.
  • <javadoc robocode>robocode.Robot#getY()|getY()</javadoc>: Aktuelle y-Koordinate des Roboters.

Radar

  • <javadoc robocode>robocode.Robot#turnRadarLeft(double)|turnRadarLeft(double)</javadoc>: Nach links drehen.
  • <javadoc robocode>robocode.Robot#turnRadarRight(double)|turnRadarRight(double)</javadoc>: Nach rechts drehen.
  • <javadoc robocode>robocode.Robot#getRadarHeading()|getRadarHeading()</javadoc>: Aktuelle Richtung des Radars in Grad.

Kanone

  • <javadoc robocode>robocode.Robot#turnGunLeft(double)|turnGunLeft(double)</javadoc>: Nach links drehen.
  • <javadoc robocode>robocode.Robot#turnGunRight(double)|turnGunRight(double)</javadoc>: Nach rechts drehen.
  • <javadoc robocode>robocode.Robot#getGunHeading()|getGunHeading()</javadoc>: Aktuelle Richtung des Radars in Grad.
  • <javadoc robocode>robocode.Robot#fire(double)|fire(double)</javadoc>: Mit angegebener Energie E schiessen. Die Geschwindigkeit des Schusses beträgt 20 - 3* E.
  • <javadoc robocode>robocode.Rules#MIN_BULLET_POWER|Rules.MIN_BULLET_POWER</javadoc>: Minimale Energie eines Schusses (0.1).
  • <javadoc robocode>robocode.Rules#MAX_BULLET_POWER|Rules.MAX_BULLET_POWER</javadoc>: Maximale Energie eines Schusses (3).

Gegner scannen

Wenn ein Roboter vom Radar erfasst wird, wird die Methode <javadoc robocode>robocode.Robot#onScannedRobot(robocode.ScannedRobotEvent)|onScannedRobot()</javadoc> aufgerufen. Das mitgelieferte <javadoc robocode>robocode.ScannedRobotEvent|ScannedRobotEvent</javadoc> enthält Informationen über den gegnerischen Roboter:

  • <javadoc robocode>robocode.ScannedRobotEvent#getBearing()|getBearing()</javadoc>: Richtung in Grad, in welcher der gescannte Roboter liegt relativ zur eigenen Fahrtrichtung.
  • <javadoc robocode>robocode.ScannedRobotEvent#getDistance()|getDistance()</javadoc>: Distanz zum gescannten Roboter in Pixel.
  • <javadoc robocode>robocode.ScannedRobotEvent#getEnergy()|getEnergy()</javadoc>: Energie des gescannten Roboters.
  • <javadoc robocode>robocode.ScannedRobotEvent#getVelocity()|getVelocity()</javadoc>: Geschwindigkeit des gescannten Roboters.
  • <javadoc robocode>robocode.ScannedRobotEvent#getHeading()|getHeading()</javadoc>: Fahrtrichtung des gescannten Roboters.
  • <javadoc robocode>robocode.ScannedRobotEvent#getName()|getName()</javadoc>: Name des gescannten Roboters.

Die absolute Richtung (heading) zum gescannten Roboter kann so ermittelt werden:

double headingToRobot = getHeading() + e.getBearing()

Zielen

Es gibt verschiedene Ansätze zum Zielen.

Erster Roboter

robocode/start.1427096253.txt.gz · Zuletzt geändert: 2020/10/13 14:25 (Externe Bearbeitung)