====== Robocode ====== [[http://downloads.sourceforge.net/project/robocode/robocode/1.9.2.4/robocode-1.9.2.4-setup.jar|Robocode 1.9.2.4 für Windows]] ==== 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 [[http://robocode.sourceforge.net/docs/robocode/robocode/AdvancedRobot.html|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 === * robocode.Robot#ahead(double)|ahead(double): Vorwärts fahren * robocode.Robot#back(double)|back(double): Rückwärts fahren * robocode.Robot#turnLeft(double)|turnLeft(double): Nach links drehen * robocode.Robot#turnRight(double)|turnRight(double): Nach rechts drehen * robocode.Robot#getVelocity()|getVelocity(): Aktuelle Geschwindigkeit in Pixel pro Sekunde * robocode.Robot#getHeading()|getHeading(): Aktuelle Fahrtrichtung in Grad * robocode.Robot#getX()|getX(): Aktuelle x-Koordinate des Roboters * robocode.Robot#getY()|getY(): Aktuelle y-Koordinate des Roboters * robocode.Robot#getBattleFieldHeight()|getBattleFieldHeight(): Höhe des Spielfelds * robocode.Robot#getBattleFieldWidth()|getBattleFieldWidth(): Breite des Spielfelds === Radar === * robocode.Robot#turnRadarLeft(double)|turnRadarLeft(double): Nach links drehen * robocode.Robot#turnRadarRight(double)|turnRadarRight(double): Nach rechts drehen * robocode.Robot#getRadarHeading()|getRadarHeading(): Aktuelle Richtung des Radars in Grad === Kanone === * robocode.Robot#turnGunLeft(double)|turnGunLeft(double): Nach links drehen * robocode.Robot#turnGunRight(double)|turnGunRight(double): Nach rechts drehen * robocode.Robot#getGunHeading()|getGunHeading(): Aktuelle Richtung des Radars in Grad * robocode.Robot#fire(E)|fire(double): Mit angegebener Energie **E** schiessen. Die Geschwindigkeit des Schusses beträgt 20 - 3 * **E** * robocode.Rules#MIN_BULLET_POWER|Rules.MIN_BULLET_POWER: Minimale Energie eines Schusses (0.1) * robocode.Rules#MAX_BULLET_POWER|Rules.MAX_BULLET_POWER: Maximale Energie eines Schusses (3) * robocode.Rules#getBulletSpeed(double)|Rules#getBulletSpeed(E): Geschwindigkeit eines Geschosses mit der angegebenen Energie **E** === Gegner scannen === Wenn ein Roboter vom Radar erfasst wird, wird die Methode robocode.Robot#onScannedRobot(robocode.ScannedRobotEvent)|onScannedRobot() aufgerufen. Das mitgelieferte robocode.ScannedRobotEvent|ScannedRobotEvent enthält Informationen über den gegnerischen Roboter: * robocode.ScannedRobotEvent#getBearing()|e.getBearing(): Richtung in Grad, in welcher der gescannte Roboter liegt relativ zur eigenen Fahrtrichtung * robocode.ScannedRobotEvent#getDistance()|e.getDistance(): Distanz zum gescannten Roboter in Pixel * robocode.ScannedRobotEvent#getEnergy()|e.getEnergy(): Energie des gescannten Roboters * robocode.ScannedRobotEvent#getVelocity()|e.getVelocity(): Geschwindigkeit des gescannten Roboters * robocode.ScannedRobotEvent#getHeading()|e.getHeading(): Fahrtrichtung des gescannten Roboters * robocode.ScannedRobotEvent#getName()|e.getName(): Name des gescannten Roboters Die absolute Richtung (//heading//) zum gescannten Roboter kann so ermittelt werden: double headingToRobot = getHeading() + e.getBearing() ===== Allgemeines ===== * [[looks]] * [[tracking]] ===== Bewegung ===== * [[anti-gravity]] ===== Zielen ===== Es gibt verschiedene Ansätze zum Zielen. * [[target-none]] * [[target-static]] * [[target-linear-1]] [[first-robot]]