Seminar WS 2006/07
AI Tools

Michael Kipp     Alassane Ndiaye    Dominik Heckmann    Michael Feld


Zurück


 

Übungsaufgabe: dTank Challenge

Diese Aufgabe bezieht sich auf die Teilnehmer(innen) des Themenbereichs Jess/JADE/JSHOP. Es sollten sich zwei Zweierteams bilden, wobei in jedem Team genau ein Jess-Vortragender dabei sein sollte. So hat jedes Team einen Teilnehmer, der sein Vorwissen aus dem Vortrag einbringen kann.


Einführung in dTank

"dTank" wurde entwickelt, um verschiedene Programmierparadigmen in einer Arena zu testen. Dabei wurde ein einfaches Panzerspiel gewählt, wo beliebig viele Panzer auf einer 10x10 Matrix umherfahren können, um sich gegenseitig abzuschießen (siehe Bild). Wir verwenden "dTank2006", eine von mir leicht angepasste Version von "dTank".

Konkret startet man ein Spiel folgendermaßen:

  • dTank2006 ist ein Java-Programm und wird standalone gestartet, fungiert dann als Server
  • User A startet Jess und seinen Jess-Code für "Tank-A"
  • User B startet Jess und seinen Jess-Code für "Tank-B"
  • Die Panzer melden sich jeweils als Client bei dTank an, ihre Aktionen werden über Socket an dTank weitergegeben, sie erhalten über Socket Informationen über die Spielsituation. Man kann alles über die Oberfläche von dTank verfolgen.

Es liegt auf der Hand, dass die Panzer in beliebigen Programmiersprachen implementiert sein können, solange die Socketkommunikation mit "dTank" behandelt wird. Für JESS steht ein Interface in Form eines jar-Files zur Verfügung, es heißt dTankJess. Bevor wir zur eigentlichen Aufgabenstellung kommen, ein paar technische Details.

Technisches

Ihr sollt einen Tank in Jess entwickeln. Dazu braucht Ihr folgende Zutaten:

  1. JESS = die Programmiersprache
  2. dTank2006 = die Spielumgebung
  3. dTankJess = das Interface für JESS zu dTank
  4. Tank-0 = ein "Basis-Panzer" in JESS

JESS sollten die beiden Vortragenden besitzen bzw. wissen, wie man weitere Exemplare runterlädt - wird hier nicht verraten.

Für dTank2006 gebe ich Euch eine direkt ausführbare Version, aber auch den Source-Code, falls Ihr etwas ändern möchtet (bitte Modifikationen mit mir klären).

  • In dem folgenden Verzeichnis alles runterladen und run.bat starten (Unix-User sehen im run.bat File den entsprechenden Java-Aufruf): dtank
  • Wichtig: Ihr müsst das File "world.txt" nach dem Runterladen in "world.map" umbenennen. Aus irgendeinem Grund kann man .map Dateien nicht über HTTP runterladen, ohne dass sie seltsam transformiert werden... :(
  • Die Sourcen sind in dem Src.zip File

Als Interface von JESS zu dTank dient dTankJess. Hier bekommt Ihr ein jar-File, welches Ihr beim Start von JESS in den CLASSPATH einbinden müsst:

Zum Schluss noch einen Basis-Panzer, der auch nützliche Infos zur dTank-Welt enthält:


Konkrete Aufgaben und Ziele

Aufgabe ist es, einen Tank in JESS zu implementieren. Ihr solltet dabei KEINE selbstgeschriebenen JAVA-Funktionen verwenden!

Das übergeordnete Ziel des Tanks lautet: Alle gegnerischen Panzer vernichten.

Teilziele sind

  • den Gegner finden
  • auf den Gegner zufahren
  • den Gegner beschießen
  • selbst nicht getroffen werden

Folgende Funktionen sollten Eure Panzer beherrschen:

  • Erkennung
    • ein gegenerischer Panzer nähert sich
    • ein Gegner zielt auf mich
  • Speichern
    • wo ist der Gegner zuletzt gewesen
    • wo liegen Steine ("interne Karte")
  • Verschiedene Strategien (z.B. "Hunt" wenn Energie hoch und "Retreat" wenn Energie niedrig)

Geht davon aus, dass mehrere Panzer auf dem Spielfeld sind. Wir werden in der Challenge auch jeweils 2 Panzer von jedem Team GLEICHZEITIG antreten lassen. Baut deshalb ein, dass Ihr einen befreundeten Panzer als solchen erkennt (am ID).

Infos zur dTank-Welt

Ihr findet viele Eigenschaften der dTank-Welt in Kommentaren im Beispielpanzer Tank-0.clp

Wie man im Screenshot sieht, hat jeder Panzer Health, Shields und Weapon Energy. Wenn Health = 0, ist man tot. Ein Panzer kann ein Shield aktivieren und ist dann für eine gewisse Zeit nicht durch Schüsse gefährdet. Die Weapon Energy sinkt bei jedem Schuss. Shields und Weapon Energy laden sich mit der Zeit wieder auf.

Wichtig ist, dass jeder Panzer nur ein begrenztes Sichtfeld hat, das so aussieht:

X X X X X X X X X
        X X X X X
                T

Wobei T der Tank ist, nach oben schaut, und X sind die Felder, die er sehen kann (allerdings kann T unendlich "weit" sehen, die Xe setzen sich also nach oben hin fort).

Die Informationen der dTank-Welt updaten sich ein Mal pro Sekunde. Im JESS-Beispielpanzer ist das die Länge eines Zyklus'.

Abgabe

Abzugeben sind der JESS-Code für Euren ultimativen Panzer. Bitte KOMMENTIERT Euren Code, damit Eure genialen Einfälle sich auch in der Note niederschlagen...

Abgabe ist der 8.2.2007.

Die Ergebniss aller Übungen werden am 15.2.2007 präsentiert.

Für uns ist das natürlich ein LIVE-EVENT, nämlich die DTANK CHALLENGE !!!

Fragen?

Einfach Mail an mich: kipp (at) dfki (dot) de

Oder anrufen unter 302-5387