Einführung
Unser Projekt wird eine Simulation des
"capture the flag" Spieles, das von Robotern in einem Labyrinth gespielt wird.
- Wir haben ein rechteckiges Labyrinth, das in Felder aufgeteilt ist, wobei jedes Feld entweder
eine Wand oder ein Freiraum ist. Das Labyrinth ist geschlossen, was bedeutet, daß es nicht möglich ist,
die Außengrenze zu durchqueren.
- Das "capture the flag"-Spiel wird mit einem oder mehreren Robotern gespielt. Jeder Roboter
beginnt auf einem anderen Feld; dieses Startfeld ist die Heimatbasis des Roboters.
- Ein Roboter kann sich auf die Felder neben ihm bewegen (north, south, east, west), wenn sich
dort kein blockierendes Objekt, wie ein anderer Roboter oder eine Wand, befindet.
- Irgendwo im Labyrinth, auf einem der Felder, befindet sich eine Flagge, die die Roboter versuchen zu "erobern".
Um die Flagge zu nehmen, muß ein Roboter auf dem gleichen Feld wie die Flagge stehen.
Sobald ein Roboter die Flagge hat, werden alle anderen Roboter informiert.
Der Roboter, der die Flagge zu seiner Heimatbasis zurückbringt, ist der Gewinner des Spiels.
- Die einzige Möglichkeit, einem Roboter die Flagge wegzunehmen, ist der "earthquake"-Knopf.
Wie die Flagge befindet sich dieser Knopf auf einem zufälligen Feld irgendwo im Labyrinth und
kann von einem Roboter gedrückt werden, der auf diesem Feld steht. Wenn der "earthquake"-Knopf
gedrückt wird, dann wechseln die Flagge und der "earthquake"-Knopf auf neue, zufällige Positionen
und alle Roboter werden auf ihre Heimatbasis zurückgesetzt. Der "earthquake"-Knopf funktioniert allerdings
nur, wenn einer der Roboter die Flagge hat.
- Die Roboter haben eine besondere Fähigkeit, die es ihnen erlaubt, eine innere Wand
im Labyrinth zu überqueren: Sie können eine Brücke bauen. Das Bauen einer Brücke erlaubt den Robotern ein
Wand-Feld in in ein Feld zu verwandeln, das überquert werden kann - jedoch nur von dem Roboter, der die Brücke gebaut hat.
Da es harte Arbeit ist, eine Brücke zu bauen, beginnt jeder Roboter mit einer festgelegten Anzahl von vorgefertigten Brücken.
Sind die vorgefertigten Brücken aufgebraucht, dann wird ein Roboter beim Errichten einer weiteren Brücke um einige Zeit verzögert.
- Um zu navigieren kann ein Roboter von den zu ihm nächsten Feldern in alle
vier Richtungen (north, south, east, west) und von dem Feld, auf dem er steht,
(center) die folgenden Informationen erkunden:
- Den Typ des Feldes (ob es eine Wand, ein Roboter, die Brücke eines
anderen Roboters, seine eigene Brücke, der "earthquake"-Knopf, die Flagge oder ein leeres Feld ist).
- Die direkte Distanz zur Flagge (nicht notwendigerweise die Länge eines wirklichen Pfades zur
Flagge).
- Die direkte Distanz zum "earthquake"-Knopf (nicht notwendigerweise die Länge eines wirklichen Pfades zum
Knopf).
Implementierung
Die Startkomponente und das GUI (graphical user interface) des
Spiels wird Euch gegeben. Eure Arbeit ist es, zwei Java-Klassen (teilweise) zu modellieren
und zu implementieren:
- WorldService: Dieses Interface definiert die Administrationsmethoden des
Spiels; es ist von der
WorldServiceActivator Klasse implementiert. Die
WorldServiceActivator Klasse bietet nicht nur
WorldService Methoden, sondern ist gleichzeitig der Kern der Implementierung des
World Interface.
WorldServiceActivator enthält die gesamte Zustandsinformation des Spiels
und die Methoden für die Aktionen, die die Roboter machen können. Es gibt nur eine
Instanz der WorldServiceActivator Klasse im Spiel,
aber jeder Roboter hat seine eigene Instanz der World
Implementierung. Die Roboter benutzen das gemeinsame
WorldServiceActivator Objekt nicht direkt, sondern benutzen stattdessen
die Methoden ihres eigenen World Objektes. Die
World Implementierung ist nur ein "wrapper", so daß alle
World Methoden ihre Aufrufe zur
WorldServiceActivator Instanz weiterdelegieren. Dieser Ansatz hält die
Interfaces sauber, da die Roboter keinen Identifikator oder ähnliches an den
WorldServiceActivator weitergeben müssen und auf die administrativen
Methoden im WorldService Interface keinen Zugriff haben.
- Robot: Dieses Interface definiert die Methoden, um einen
Roboter zu verändern. Die Roboter-Implementierung enthält auch den Algorithmus, der
den Roboter seine Aktionen auf seiner Welt World ausführen lässt. Das
Hauptziel des Algorithmus ist es, die Flagge zu finden und sie zur
Heimatbasis des Roboters zurückzubringen, aber er mag auch Strategien zum Umgang mit dem "earthquake"-Knopf und dem
Brückenbau enthalten. Eine Roboter-Implementierung wird benachrichtigt, wenn ein anderer
Roboter die Flagge genommen hat. Dies passiert, wenn die Robot.flagCapturedHandler()
callback-Methode ausgelöst wird, so daß Euer Roboter die Möglichkeit erhält, auf
ein solches Ereignis zu reagieren. Ihr werdet wahrscheinlich einige interne Daten über das Labyrinth verwalten müssen,
um Eurem Roboter beim Navigieren und dem Treffen von Entscheidungen zu helfen.