Inhaltsverzeichnis
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.