Informatikunterricht

am Gymnasium Kirchenfeld

Benutzer-Werkzeuge

Webseiten-Werkzeuge


robocode:start

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

Beim Start eines Kampfes hat ein Robotes eine Energie von 100.

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
  • <javadoc robocode>robocode.Robot#getBattleFieldHeight()|getBattleFieldHeight()</javadoc>: Höhe des Spielfelds
  • <javadoc robocode>robocode.Robot#getBattleFieldWidth()|getBattleFieldWidth()</javadoc>: Breite des Spielfelds

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()

Allgemeines

Bewegung

Zielen

Es gibt verschiedene Ansätze zum Zielen.

Erster Roboter

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