Informatikunterricht

am Gymnasium Kirchenfeld

Benutzer-Werkzeuge

Webseiten-Werkzeuge


robocode:anti-gravity

Anti-Gravity

(von Anthony Jakob)

Beschreibung

Bei der „Anti-Gravity“-Methode geht es darum, möglichst weit weg von den anderen Robotern zu bleiben. Dabei wird das Gravitationsgesetz verwendet, aber gerade umgekehrt: je näher unser Roboter von andern Robotern oder Wänden ist, desto stärker wird dieser von diesen abgestossen.

Implementation

Die Methode ist drei relativ einfachen Schritten implementierbar:

1. Enemy-Tracking

Bevor die Kräfte ausgerechnet werden können, müssen zuerst die Positionen der Roboter bekannt sein. Dies kann mittels Tracking erreicht werden.

2. Kräfte Berechnen

Die Gravitationskraft ist proportional zur Umkehrung der zweiten Potenz der Distanz. Mit Hilfe der Position der Gegner (Punkt 1 – Enemy Tracking) können nun die verschiedenen Distanzen berechnet und summiert werden, um den Betrag und die Richtung resultierende Kraft herauszufinden. Codebeispiel:

        double fx = 0;
        double fy = 0;
        for (EnemyRobot enemy : enemyTracker.getEnemies()) {
            double heading = enemy.getHeading();
            double distance = enemy.getDistance();
            fx = fx - Math.sin(heading) / (distance * distance);
            fy = fy - Math.cos(heading) / (distance * distance);
        }
 
        double angle = Math.atan2(fx, fy);

3. Roboter bewegen

Um den Zeitgebrauch zu minimieren, muss bei der Bewegung darauf geachtet werden, dass unser Roboter nie mehr als 90° dreht. Im Code sieht das dann so aus:

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