Massaker in Endlosschleifen

Kampfroboter im Eigenbau

Dieser Beitrag inspiriert Ihr Entwicklertalent. Arbeiten Sie an einer ersten, einfachen virtuellen Kampfmaschine so lange, bis diese unschlagbar wird.

Kampfroboter im Eigenbau

© Archiv

Kampfroboter im Eigenbau

Robocode ist ein von IBM alphaWorks entwickeltes Computerspiel, bei dem mehrere Panzer in einer virtuellen Arena gegeneinander kämpfen. Allerdings fordert Robocode weniger die Geschicklichkeit des Anwenders als dessen entwicklerische Fähigkeiten. Tatsächlich handelt es sich um einen Wettstreit unter Programmierern. Schließlich geht es darum, auf der Basis von Java einen oder mehrere virtuelle Panzer zu entwickeln, um im Wettkampf mit den anderen zu bestehen - nach dem erklärten martialischen Motto build the best, destroy the rest.

Die Einrichtung von Robocode sollte Ihnen kaum Schwierigkeiten bereiten. So gehen Sie vor: Voraussetzung ist ein installiertes JRE (Java Runtime Environment) in der Version 5. Sie können das aktuelle Update auf der Homepage von Robocode (http://robocode. sourceforge.net) über den Link Java auf Ihren Computer installieren. Ein Neustart ist danach nicht erforderlich.

Über den Link Download (oder auch über Project) auf derselben Seite laden Sie sich Robocode herunter. Der Dateiname der derzeit aktuellen Version vom 19. Oktober 2006 ist robocode-setup- 1.1.4B.jar. Um das Spiel zu installieren, klicken Sie doppelt im Windows-Explorer auf den Dateinamen. Alternativ können Sie auf der Kommandozeile den Befehl java -jar robocode- setup-1.1.4B.jar eingeben und den wenigen Anweisungen folgen. Dabei empfiehlt es sich, die Frage Would you like to install a shortcut to Robocode in the Start menu mit Ja zu beantworten. Denn nur in diesem Fall legt Robocode neben dem Eintrag im Startmenü auch ein Icon auf den Desktop. Andernfalls müssten Sie zum Start des Spiels jedes Mal auf die Batch-Datei robocode.bat zurückgreifen.

Das Spiel erklärt sich selbst. Beginnen Sie nach dem Start eine neue oder laden Sie eine gespeicherte Schlacht (Battle/New oder Battle/Open). Im New Battle-Dialog bestimmen Sie u.a. die beteiligten Panzer und legen die Rundenzahl fest.

Kampfroboter im Eigenbau

© Archiv

Vor der Schlacht: Zunächst erküren Sie eine Maschine oder mehrere als Gegner und bestimmen die Rundenzahl. Im Bild schicken Sie gleich sieben Digitalkanonen in drei schwere Runden.

Wenn Sie das Spiel konfiguriert haben, setzt Ihr Mausklick auf Start Battle die Schlacht in Gang. Die Schaltflächen Next bzw. Back dienen lediglich dazu, alternative Register zu wählen. Das Spiel können Sie jederzeit unterbrechen, neu starten oder - ebenfalls mit einer Ergebnisanzeige - beenden. Die Schaltflächen dazu lauten Pause/Debug, Stop und Restart.

Über das Help-Menü greifen Sie vor allem auf die Online-Hilfe (Help/Online Help) zurück, während Entwickler eher die Klassendokumentation von Robocode (Help/Robocode API) bevorzugen. Zudem beschreibt die Online- Hilfe, wie Sie weitere Panzer (robots) herunterladen und integrieren, selbst entwickelte hochladen und an Robocode- Wettbewerben teilnehmen können.

Nun gehen Sie daran, Ihren eigenen Panzer zu entwickeln. Starten Sie Robocode, und wählen Sie in der Menüleiste Robot/Editor oder die Tastenkombination [Strg-E]). Wenn Sie z.B. das JDK in der Version 5 installiert haben, werden Sie beim ersten Start des Editors gefragt, ob Sie den javac-Compiler verwenden wollen. Falls nicht, integriert Robocode einen eigenen. Es spricht nichts dagegen, Jikes - so heißt der Robocode-Compiler - zu verwenden. So vermeiden Sie vielleicht sogar Fehlerquellen, die später im Zusammenhang mit dem Referenzieren von Robocode-Klassen auftreten könnten. Nachdem Robocode den Compiler eingerichtet hat, wählen Sie im Editormenü File/New und dann Robot (Tastenkombination [Strg-N]). Geben Sie im folgenden Dialog Ihrem Panzer einen Namen und anschließend Ihre Initialen, damit er sich von gleichnamigen Robots unterscheidet.

Kampfroboter im Eigenbau

© Archiv

Schlachtengetümmel: Am Ende gewinnt der Panzer mit den meisten Punkten, der dazu andere auch vom Spielfeld schießt.

Mit der Robocode-IDE entwickeln Sie Robots schon daher viel einfacher, weil Ihnen der Editor beim Anlegen einer neuen Robot-Quelldatei ein vollständiges Klassengerüst mit Methoden und brauchbaren Kommentaren zur Verfügung stellt. Gebrauchen Sie den Menübefehl Compiler/Compile, oder drücken Sie [F6], um den Java-Code zu kompilieren. Vorher werden Sie noch zum Speichern aufgefordert. Legen Sie Ihren neuen Panzer auf jeden Fall ins Verzeichnis robots - am besten nehmen Sie den Create Directory-Vorschlag an und verwenden für Ihre Roboter ein eigenes Unterverzeichnis. Nach dem Kompilieren besitzen Sie bereits einen funktionsfähigen Panzer, den Sie nun nach Belieben weiterentwickeln können. Im Übrigen kann er es z.B. mit dem - zugegebenermaßen nicht allzu starken - Sample-Robot Corners ohne Weiteres aufnehmen.

Jeder Panzer besteht aus drei Teilen, dem Fahrgestell (Body), der Kanone (Gun) und dem Radar, die unabhängig voneinander bewegt werden können. Die Kanone befindet sich auf dem Body und das Radar wiederum auf der Kanone. Das A und O eines Robots bildet dessen run()-Methode. Um ihn vom Schlachtfeld und den anderen Panzern deutlich abzuheben, könnten Sie hier als Erstes für die Bestandteile Ihres Panzers, einschließlich der Kanonenkugeln, andere Farben festlegen (Defaultwerte sind von der Klasse Robot geerbte Blautöne).

Kampfroboter im Eigenbau

© Archiv

QuickPCM: Das Kampfungetüm PCM startet natürlich für uns!

Dazu verfügen Sie u.a. über die Methoden setBodyColor(), setGunColor() sowie setRadarColor(). Mit der Methode setColors() - bzw. setAllColors() mit nur einem Parameter für eine einheitliche Farbgebung - können Sie auch alle Werte in einem Arbeitsgang setzen. Zusätzlich müssen Sie noch die Klasse Color aus dem Paket java.awt importieren. Entkommentieren Sie im Code einfach die Zeile import java.awt.Color;.

Das Verhalten Ihres Panzers entscheidet bestimmend der Inhalt der while-Schleife. Hier muss es sich zweckmäßigerweise um eine Endlosschleife handeln (Bedingung true). Ansonsten würde Ihr Java-Panzer zu einem bestimmten Zeitpunkt - nämlich dann, wenn die Schleife abgearbeitet ist - seine Kampfhandlungen einstellen und nur noch auf Ereignisse reagieren. Legen Sie also im Rumpf der Schleife im Wesentlichen die Bewegungen Ihres Robots, seines Radars und seiner Kanone fest. Dabei stehen Ihnen verschiedene Methoden zur Verfügung.

Kampfroboter im Eigenbau

© Archiv

Hilfreicher Robocode: Nehmen Sie den Vorschlag an, und legen Sie Ihre Panzer in einen separaten Ordner.

Mit turnLeft() und turnRight() ändern Sie die Position Ihres Panzers um die anzugebende Gradzahl - entsprechend verhalten sich turnGunLeft(), turn- GunRight() sowie turnRadarLeft() und turn- RadarRight(). Mit den Methoden ahead() and back() bewegen Sie Ihren Robot um den anzugebenden Pixelwert vor bzw. zurück. Die Ausführung beider Methoden bricht ab, sobald der Roboter einen anderen oder die Wand berührt. Experimentieren Sie für den Anfang einfach ein wenig. Hilfreich ist es auch, das Verhalten anderer Roboter zu untersuchen.

Kampfroboter im Eigenbau

© Archiv

Ein Mausklick mehr: Die Stunde der Wahrheit naht. Sie lassen Ihren neuen Panzer QuickPCM gegen die anderen antreten.
public void run() { 
setColors(new Color(255, 0, 255), new 
Color(255, 0, 128), new Color(255, 0, 
255), 
new Color(255, 0, 128), new 
Color(255, 0, 128)); 
while(true) { 
ahead(150); 
turnGunRight(360); 
back(100); 
turnGunRight(360); 
} 
}

Des Weiteren können Sie die Leistungsfähigkeit Ihrer Roboter steigern, indem Sie im Code auf vordefinierte Ereignisse reagieren, d.h. die entsprechenden Eventhandler überschreiben. Beispielsweise schießt QuickPCM sofort, sobald er einen gegnerischen Roboter ausgemacht hat:

public void 
onScannedRobot(ScannedRobotEvent e) { 
fire(1); 
}

Wie Sie vielleicht schon festgestellt haben, feuert QuickPCM jedoch jedesMal mehr oder weniger wild um sich. Die Methode könnten Sie z.B. verbessern. Bei den Überlegungen ist zu berücksichtigen, dass sich die Kanone grundsätzlich langsamer dreht als das Radar. Daher ist es sinnvoll, sie zurückzustellen, sobald Ihr Panzer einen Gegner ortet.

turnGunRight(getHeading() + 
e.getBearing() - getGunHeading());

Die Methode getBearing() der Klasse ScannedRobotEvent liefert den Winkel in Relation zum gegenerischen Panzer, sodass Sie mit dem Ausdruck getHeading() + e.getBearing() die Richtung Ihres Robots zum georteten Gegner erhalten. Die Methode getGunHeading() beschreibt die Richtung Ihrer Kanone. Mit der Methode turnGunRight() korrigieren Sie die Differenz. Den Sourcecode und die class-Datei von QuickPCM finden Sie auf der Heft-DVD (QuickPCM.java und QuickPCM. class, gepackt als QuickPCM.zip). Fügen Sie die beiden Dateien in ein Unterverzeichnis von obotsws ein, welches Sie selbst anlegen müssen. Der Tabelle Robocode-Ereignishandler entnehmen Sie die Beschreibung der vier wichtigsten Ereignishandler.

Kampfroboter im Eigenbau

© Archiv

QuickPCM in Action: Die Maschine hält sich erfolgreich an die Vorgabe "destroy the rest'', Der Gegner verpufft in digitalem Feuerzauber.

Sobald ein Ereignis eintritt, springt die Programmausführung von der run()-Methode in den entsprechenden Ereignishandler, führt dort den Code aus und springt anschließend wieder zurück. Die Methoden sind per Default leer. Indem Sie sie überschreiben, können Sie die Stärke Ihrer Robots immens verbessern.

Mehr zum Thema

HTML 5
Webgestaltung

Google Web Designer ist spezialisiert auf HTML5. Ein Vorteil dieses Standards ist das einfache Einbinden von Videos mit dem Element video. Wir zeigen…
Wir verraten, wie Sie Fritzboxen und andere Router vor Hackern schützen.
Fritzbox, Asus, Belkin und Co.

Fritzbox, Asus, Belkin oder DLink - die Liste der geknackten Router ist lang. Hacker stahlen Passwörter oder NAS-Daten. So machen Sie Ihren Router…
Wir führen Sie zur eigenen Windows-App - unserem PC-Magazin-RSS-Feed.
C# und XAML

Wir zeigen, wie Sie Windows 8.1 Apps selbst programmieren können. Lernen Sie das App erstellen an Hand unseres Beispiels: dem RSS-Feed von PC…
Windows Tipps & Tricks: Benutzerrechte unter Windows 8.1
Programme richtig installieren

Wir zeigen Ihnen, wie Sie sich unter Windows 8.1 alle Benutzerrechte verschaffen und Programme richtig installieren.
Windows 8: Starbildschirm
Microsoft Project Siena

Erstellen Sie sich selbst eine App für Windows 8, die auf alle Funktionen Ihres Tablets zugreifen kann, inklusive Kamera, Mikrofon und Lautsprecher.…