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/gewinnt 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
Treffen eines Gegners + 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(E)|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).
  • <javadoc robocode>robocode.Rules#getBulletSpeed(double)|Rules#getBulletSpeed(E)</javadoc>: Geschwindigkeit eines Geschosses mit der angegebenen Energie E

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()|e.getBearing()</javadoc>: Richtung in Grad, in welcher der gescannte Roboter liegt relativ zur eigenen Fahrtrichtung.
  • <javadoc robocode>robocode.ScannedRobotEvent#getDistance()|e.getDistance()</javadoc>: Distanz zum gescannten Roboter in Pixel.
  • <javadoc robocode>robocode.ScannedRobotEvent#getEnergy()|e.getEnergy()</javadoc>: Energie des gescannten Roboters.
  • <javadoc robocode>robocode.ScannedRobotEvent#getVelocity()|e.getVelocity()</javadoc>: Geschwindigkeit des gescannten Roboters.
  • <javadoc robocode>robocode.ScannedRobotEvent#getHeading()|e.getHeading()</javadoc>: Fahrtrichtung des gescannten Roboters.
  • <javadoc robocode>robocode.ScannedRobotEvent#getName()|e.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.1427123044.txt.gz · Zuletzt geändert: 2020/10/13 14:25 (Externe Bearbeitung)