Aufgabenstellung


Einführung

In einem Roboterspiel befinden sich verschiedene Roboter in einer ihnen unbekannten Arena. In der Arena befinden sich Wände, das Ziel Teleporter, Brunnen sowie weitere möglicherweise unbekannte Objekte. Für jede Aktion, die der Roboter durchführt, wird ihm ein Energiepunkt abgezogen. An den Brunnen kann er sein Energiedepot wieder auffüllen. In der Arena sollen sie sich zurecht finden und diverse Karten einsammeln. Aus den aufgesammelten Karten berechnet sich der Punktestand jedes Roboters. Wenn ein Roboter den Ausgang gefunden und betreten hat, endet das Spiel und eine Rangliste der Roboter wird erstellt. Versucht ein Roboter zu betrügen, zum Beispiel indem er sich selber Karten gibt, wird dies durch die Arena automatisch erkannt und der Roboter zur Disqualifikation vorgeschlagen.

Konkrete Aufgabe

Jede Gruppe eine Arena und einen Roboter entwickeln. Die Roboter sollen nach Gegenständen in der Arena und dem Ausgang suchen. Bei den Gegenständen handelt es sich um Spielkarten eines normalen Kartenspiels mit 4 Farben (Kreuz, Pik, Herz, Karo) und 13 Werten (2 - 10, Bube, Dame, König, As). Wenn zwei Roboter sich treffen besteht die Möglichkeit Spielkarten zu tauschen. Wenn der erste Roboter den Ausgang gefunden hat, wird das Spiel beendet und eine Punktewertung vollzogen. Die Punkte werden auf Grund der Anzahl der Farben und Werte berechnet (ähnlich wie bei Poker); die Arena stellt hierzu eine Bewertungsfunktion zur Verfügung.

Die Arena selbst besteht aus einer Menge von Waben (Sechsecken). Jede Wabe enthält genau ein Objekt. Objekte sind Wände, Boden, Roboter, Spielkarten zum aufsammeln, oder spezielle Objekte, die bestimmte Aktionen auslösen (zum Beispiel Wurmlöcher (ehemalig Teleporter)). Waben müssen in alle 6 Richtungen Nachbarfelder haben, somit ist die Arena immer zyklisch (allerdings kann durch Wände die Arena eingeschränkt werden. Es darf nur einen (1!) Ausgang geben. Falls ein Roboter den Ausgang findet kann wahlweise das Spiel: direkt beendet werden oder nach der Runde beendet werden. Jeder Roboter kann bis zu 5 Spielkarten tragen (vgl. Anzahl der Farben). Jede Karte darf/muss genau einmal in der Arena vorkommen. Die Arena ist alleine für die Darstellung aller Objekte (inklusive der Roboter) zuständig. Es muß eine einwandfreie Unterscheidung aller Objekte gewährleistet sein. Zusätzlich muss bei den Robotern die Ausrichtung der Roboter erkennbar sein. Jeder Roboter muß einfach und schnell einer Gruppe zugeordnet werden können. Während des Spiels muss ein Statistikfenster eingeblendet sein, welches die folgenden Informationen für alle Roboter enthält: Name des Roboters - Karten des Roboters - Punkte des Roboters und einen Timer, der die abgelaufene Zeit eines Roboters für die Ausführung einer Aktion anzeigt. Karten dürfen sich nicht ändern und auch nicht geändert werden. Das Layout der Arena darf sich während eines Spieles nicht ändern. Die Arena legt für jeden Roboter am Anfang die Energie fest. Ein Roboter hat eine Maximalgrenze an Energie. Das bedeutet, dass seine Energie durch einen Brunnen oder anderes nicht höher als seine Maximalgrenze wachsen kann. Die Maximalgrenze ist gleichzeitig der Anfangswert der Energie pro Roboter. Das heisst, seine Energie ist zu Anfang maximal.

Die Roboter können pro Runde entweder einen Schritt nach vorne gehen, die Richtung ändern oder den Gegenstand, der vor dem Roboter liegt, aufsammeln. Jeder Roboter hat zu Beginn eine bestimmte Energie. Diese Energie wird bei jeder Aktion um eine Einheit gesenkt. Außerdem wird diese Energie bei Kollisionen mit Wänden oder anderen Robotern erniedrigt. Ebenso können spezielle Gegenstände diese Energie erniedrigen oder auch wieder erhöhen. Ist die Energie eines Roboters <= 0 dann kann der Roboter sich nicht mehr bewegen, sondern nur noch tauschen.

Wurmlöcher sind paarweise untereinander verbunden und stellen somit den Ein- und Ausgang eines Tunnels dar. Das Wurmloch ist verantwortlich, den Roboter auf ein freies Feld neben dem Wurmloch zu setzen und der Roboter muss mindestens wieder durch das Wurmloch zurückgehen können. Bedenkt, das ggf. mehrere Roboter durch das Wurmloch gehen können und genügend Platz vorhanden sein muss. Falls kein Platz hinter dem Wurmloch zur Verfügung steht, wird der Roboter auf seinen ursprünglichen Platz zurückgestellt. Alle speziellen Objekte auf den Waben führen ihre Aktion durch 'Betreten' der Wabe durch den Roboter aus. Der Roboter wird allerdings automatisch wieder von der Wabe des Objekts entfernt, da ja nur ein Objekt pro Wabe existieren darf. Alle Objekte dürfen nicht umdefiniert werden, d.h. ein Brunnen muss immer Energie zuführen und nicht entfernen.

Ein Spiel läuft in folgender Form ab:

  1. Laden der Roboter
  2. Solange kein Roboter das Ziel erreicht hat
    1. Reihenfolge der Roboter bestimmen
    2. gewünschtes Kommando der Roboter abfragen und direkt ausführen (evtl. Energie neu berechnen)
    3. Wenn zwei Roboter nebeneinander stehen Austauschkommunikation starten.
  3. Punktewertung und Siegerbestimmung

Die Austauschkommunikation läuft in folgender Form ab:

  1. Roboter a schlägt einen oder keinen seiner Gegenstände zum Austausch vor.
  2. Roboter b schlägt einen oder keinen seiner Gegenstände zum Austausch vor.
  3. Wenn beide Roboter einen Gegenstand zum Austausch vorschlagen, erhält der jeweils andere Roboter den gegnerischen Vorschlag zur Prüfung und Bewertung.
  4. Wenn beide tauschen wollen, wird der Tausch vollzogen.

Beim abschließenden Turnier werden alle Roboter in jeder Arena gegeneinander antreten. Während des Turniers halten alle Gruppen einen kurzen Vortrag über ihre Arena.

Das komplette Programm muss nicht neu entwickelt werden, sondern es wird auf eine im Softwaretechnikpraktikum SS01 entwickelte Lösung aufgesetzt. Zuerst soll in einer Reengineeringphase das Design der alten Software herausgearbeitet werden und in einer Designphase die neuen Anforderungen in das alte Design eingebaut werden. Die im Sommersemster SS00 implementierte Arena bot nur die Möglichkeit für matrizenartige Karten, das heisst in Quadrate aufgeteilt. Aus Waben (Sechsecke) bestehende Karten sind allerdings prinzipiell besser geeignet um Landkarten darzustellen. Es soll nun die Umstellung auf wabenstrukturierte Karten durchgeführt werden. Um dieses Ziel zu erreichen muss die interne Struktur der Arena erweitert werden, der Code für die Bildschirmdarstellung der Arena neu geschrieben werden, sowie die Strategie der Roboter an die neue Struktur angepasst werden. Der Roboter kann nun auf das links, mittig und rechts vor ihm liegende Feld schauen (im SS00 konnte der Roboter nur auf das vor im liegende Feld schauen), um zu erkennen, welches Objekt dort liegt.

Um die Anpassung der Roboterstrategie zu vereinfachen, wird im Gegensatz zur alten Aufgabenstellung die Bewertungsfunktion der Karten fest vorgegeben. Diese Bewertungsfunktion ist somit für alle Arenen und Roboter identisch und wird im Laufe des Projektes festgelegt.

Zusätzlich sollen einige Schwachstellen des ursprünglichen Designs verbessert werden. Dies betrifft die Einführung eines Stellvertreterobjektes für den Roboter, so dass der Roboter nicht mehr die Möglichkeit hat, Operationen auszuführen, die ihm nicht erlaubt sind. Zusätzlich ist ein Debug-modus zu implementieren, der die Möglichkeit bietet im Step-Modus jede Roboteraktion genau zu verfolgen.

Um weiterhin zu gewährleisten, dass die Roboter weiterhin mit jeder Arena interagieren können, wird ein Schnittstellenausschuss gebildet, der aus je einem Mitglied jeder Gruppe besteht. In diesem Ausschuss werden die Schnittstellen zwischen Arena und Roboter definiert, sowie weitere alle Gruppen betreffende Themen diskutiert und Ankündigungen gemacht.

Handy's und Walki-Takies sind während des Turniers verboten. Bei Punktegleichstand sind die Plätze gleich, das heisst, wenn zwei Roboter 50 Punkte haben und alle anderen weniger, dann stehen diese beide Roboter auf Platz 1 und der nächste Roboter steht auf Platz 3.

Robotern ist es nicht erlaubt sich ein globales Abbild der Arena zu machen, es sei denn im Zuge des Durchfahrens der Arena. D.h. ein Roboter darf nicht auf ein beliebiges Feld der Arena zugreifen. Die Arena darf nicht durch einen Roboter verändert werden. D.h. ein Roboter darf keine Wand hinter sich herziehen, oder ähnliches. Roboter dürfen sich NICHT klonen. Alle Zuwiderhandlungen der Roboter werden mit Disqualifikation bestraft. Es darf kein Roboter automatische disqualifiziert werden. Die Arena darf keine Roboter vernichten oder ähnliches. Diese Anfangsenergie muss für jeden Roboter gleich sein. Roboter dürfen keine Threads benutzen, um zum Beispiel nebenläufig strategische Analysen zu fahren. Ein Roboter der einen anderen Roboter rammt, also auffährt, verliert Energie, der gerammte Roboter bleibt unbeeindruckt (Fairness-Klausel).

Die Oberfläche soll in Java mit Hilfe der Swing Bibliothek implementiert werden und mindestens folgende Funktionen unterstützen: Hinzufügen eines Roboters, Disqualifikation eines Roboters, Start und Stop des Spiels, Anzeige der aktuellen Spieldauer. Die Roboter haben pro Zug eine max. Zeitspanne von 10 sec. Wenn ein Roboter diese Zeit überschreitet wird er disqualifiziert. Um dieses überprüfen zu können, muss in der GUI der aktuelle Roboter und die abgelaufene Zeit angezeigt werden.

Roboter der einzelnen Gruppen sollen in separate Unterpakete von de.uni_paderborn.robots.robot.groupN (N = Gruppennummer) abgelegt werden. Dadurch ist eine einfache Integration der Roboter in verschiedene Arenen gewährleistet.

Für die graphische Darstellung soll pro Objekt nur ein Icon/Image existieren, welches zur Laufzeit auf die passende Größe skaliert und passend gedreht wird (Keine Inflation von Icons für 10 verschiedene Arenagrößen und 6 verschiedene Richtungen).


Weitere Projektvorgaben

Das Projekt ist nach heutigen Softwaretechnik-Standards durchzuführen. Abgabedokumente beinhalten neben dem lauffähigen, kommentierten Quelltext und einer Demo-Version eine präzise informelle Anforderungsspezifikation, das Design (UML Diagramme für statische und dynamische Teile der Spezifikation), Testpläne und Testergebnisse sowie ein den Projektfortschritt dokumentierender Projektplan.