Name: Christoph Reichert
Matr.: 162598
Klassen:
Amok – Steuert den Hamster durchs Labyrinth
LinkedField – beinhaltet Dateistruktur und enthält diverse Hilfsmethoden
LFNode – speichert und verwaltet Informationen über ein einzelnes Feld
Dateistruktur:
Der Hamster Amok benutzt zur Speicherung von Informationen Knoten, in denen Informationen über den Zustand eines Feldes gespeichert werden und gleichzeitig sechs Zeiger für die Nachbarknoten gesetzt werden.
Dabei gibt es für den Zustand eines Feldes folgenden Status:
0 – Das Feld ist bekannt, aber noch nicht besucht worden
1 – Das Feld wurde besucht und ist leer
2 – vorübergehender Zustand für eine Wegberechnung; bedeutet, das Feld wurde schon mal benutzt und soll nicht noch mal benutzt werden
3 – Das Feld wurde besucht, ist aber noch nicht leer
Außerdem werden folgende Richtungen festgelegt:
0
5
|
1
\ |
/
/ |
\
4
| 2
3
In der Klasse LinkedField wird für das Labyrinth eine Instanz geschaffen, die die Kartenstruktur verwaltet. Dabei werden die Knoten netzartig verlinkt. Die Zeiger geben gleichzeitig an, ob in die Richtung gelaufen werden kann oder nicht. So wird bei einem normalen Übergang zu einem Feld ein Zeiger auf das Nachbarfeld gesetzt und gleichzeitig vom Nachbarfeld auf das zeigende Feld. Befindet sich eine Wand in einer Richtung, wird auf einen fest definierten Knoten gezeigt. Dann weiß der Hamster, dass er in diese Richtung nicht laufen kann. Befindet sich in einer Richtung eine Klippe, wird der Zeiger entsprechend der gesperrten Richtung auf den fest definierten Wand-Knoten gesetzt, die Klippe nach unten wird normal verlinkt.
Zusätzlich existiert ein zweidimensionaler Array aus den Knoten. Damit ist das Arbeiten mit Koordinaten realisiert. Die Größe des Array richtet sich nach dem Größtmöglichen Labyrinth, es wird bei Suchverfahren jedoch nur die effizient genutzte Array-„Fläche“ durchlaufen.
Die Koordinaten errechnen sich folgendermaßen:
Das Heimatfeld befindet sich in der Mitte des Array.
Richtung 0: die x-Koordinate bleibt, y verringert sich um 2
Richtung 1: x erhöht sich um 1, y verringert sich um1
Richtung 2: x und y erhöhen sich um 1
Richtung 3: x bleibt, y erhöht sich um 2
Richtung 4: x verringert sich um 1, y erhöht sich um 1
Richtung 5: x und y verringern sich um 1
Daraus folgt, dass es im Array Felder gibt, die nie erreicht werden können.
Das LinkedField und der Array werden kombiniert, sodass der Hamster immer weiß, wo er sich befindet.
Strategie:
Die Strategie des Hamsters ist die, das er immer versucht, das Labyrinth komplett zu erkunden. Sollte er feststellen, das ein Weg zu einem unerkundeten Feld zu weit ist, um Punkte zu holen bricht er ab. Außerdem kann es sein, dass er aufgrund der rekursiven Wegsuche einen so großen Aufwand hat, das er die Suche aus Zeitgründen abbricht und somit kein Feld mehr findet und beendet.
Bei der Erkundung des Labyrinths läuft der Hamster so lange geradeaus, bis er auf eine Wand oder Klippe stößt, das Maul voll Mais hat oder auf ein bereits abgeräumtes Feld stößt. Dabei nimmt er immer den Mais, der sich auf dem Feld befindet bis sein Maul voll ist. Stößt er auf eine Wand, Klippe oder ein abgeräumtes Feld, geht er den kürzesten Weg zum nächsten unerkundeten oder nicht leergeräumten Feld und setzt seine Erkundung fort. Hat der Hamster seine Sammelkapazität erreicht, geht er auf dem kürzesten Weg nach Hause und legt den Mais ab. Von dort aus sucht er erneut das nächstgelegene zu erkundende Feld. Diese Vorgänge wiederholen sich, bis der Hamster kein Weg zu einem unerkundeten Feld mehr findet. In diesem Fall beendet er seine Suche.
Sollte der Hamster mal nicht den Weg zum Heimatfeld finden, versucht er den bisher gegangenen Weg zurück zu gehen. Stößt er dabei auf eine Klippe, erkundet er weiter das Feld, obwohl sein Maul voll ist. Dies macht er so lange bis er sich einen Weg zum Heimatfeld freigeräumt hat.