Kurzbeschreibung von Jay

Autor: Robert Keller (rk@e-publicity.de)


Datenstruktur:

Jay protokolliert alle neuen Erkenntnisse in einer internen Karte. Diese ist als 61*61 Array vom Typ Cell realisiert.

Nebenstehend sieht man Beispielkoordinaten aus der internen Karte am Beispiel des Labyrinths.
Das Startfeld ist immer das Feld 30/30.

Unten sieht man, wie sich ein Schritt auf ein Nachbarfeld auf die aktuellen Laufvariablen auswirkt. Die erste Zahl ist jeweils die y-Koordinate, die zweite die x-Koordinate. Die linke Darstellung entspricht der Karte, die rechte Darstellung zeigt das Gleiche im Labyrinth.

Protokolliert werden für jedes Feld:

- Wandinformationen (6 boolean Werte)
- Anzahl der Maiskörner
- Entfernung des Feldes zu allen vorher betretenen Feldern (insbesondere dem Startfeld)

Vorgehensweise:

Jay läuft in einer rekursiven Methode (go) alle Felder des Labyrinths ab. Dabei läuft er solange geradeaus bis eine Wand vor ihm erscheint.
Dann dreht er sich bis der Weg wieder frei ist, läuft einen Schritt und ruft wieder go auf. Die Drehreihenfolge ist links, links, 3mal rechts, rechts, rechts.
Statt dann wieder den Weg zurückzulaufen, läuft er den Weg nur auf der Karte (intern), bis zu dem nächsten interessanten Punkt zurück, bleibt real aber stehen. Interessante Punkte sind Verzweigungen in neue Labyrinthbereiche, bzw Felder auf denen Mais liegt (und die nicht weiter als 100 Felder von der Basis entfernt sind).
Wenn Jay solch einen Punkt gefunden hat, läuft er aus der Sackgasse auf dem kürzesten, bekannten Weg zu diesem Punkt. Am deutlichsten zeigt sich dieses Verhalten auf einem leeren Labyrinth.

Mais nimmt Jay nur auf dem Rückweg aus einer Sackgasse auf. Dieses trägt er solange, bis er neuen Mais findet.
Wenn es sich von dort aus lohnt den Mais nach Hause zu bringen, tut er dies auf dem kürzesten ihm bekanntem Weg und kehrt zurück zur Ausgangsstelle.

Wie findet Jay den Weg zurück?

Mit jedem Schritt nach vorn steigt Jay einen Rekursionsschritt tiefer. Also ist das Startfeld Rekursionstiefe (nowDepth) Null. Das erste Feld bekommt den Index 1, das 2. Feld 2 usw.
Wenn Jay vom Heimatfeld auf das erste Feld geht, speichert er auf dem ersten Feld für das Feld 0 den Distanzwert 1 und für das Feld 1 den Distanzwert 0.
Auf dem 2. Feld speichert er 2 für Feld 0, 1 für Feld 1 und 0 für Feld 2 usw.
Kurz: Auf jedem Feld wird für jedes vorher betretene Feld die Entfernung gespeichert. Auf diesem Mäusepfad findet Jay zu jedem Feld einen kürzeren oder höchstens gleich weiten Weg.