Hamster Dokumentation |
| Hamstername: Killer |
|
| Version: 1.51 | |
| Hamsterdatum: 28.04.2002 | |
| Autor: Michael Sack |
Der Hamster Killer basiert auf einer eigens für ihn geschriebenen Datenstruktur namens
Feldinhalt.
Methodenübersicht: Feldinhalt.java - wurde mit javadoc erstellt
Das Konzept des Hamster beruht darauf, dass seinen Weg in einer Liste speichert, die
eine art "Roten Faden" für ihn darstellt. Das bedeutet, er verwendet
praktisch einen Faden, den er am Startfeld fest macht und dann während er sich
vorwärtsbewegt immer weiter abrollt. Dies hat den Effekt, dass wenn er entweder
einen Weg fertig erforscht hat, oder die Hamsterbacken voll Körnern hat, er nur den Faden
auf dem Rückweg folgen muss, bzw. ihn bis zur letzten Verzweigung
( also einem Feld, welches mindestens 3 Wege zur Wahl hat ) wieder aufrollt, ihn bei der
letzten Verzweigung fest macht und dann dem Faden zum Heimatfeld folgt.
Der Hamster funktioniert dabei nach dem Prinzip der "Rechten Hand", dass heisst,
dass
4. Die Klasse Feldinhalt.java als neue Datenstruktur:
Die Klasse Feldinhalt beitzt einen Standartkonstruktor, der eine leere Liste, sowie
Integer Variablen und Boolean Variablen besitzt.
Er speichert die Infos, ob und wo sich Wände, bzw. Wege auf einem Feld befinden als
Boolean-Werte in der internen Liste.
Zusätzlich dazu besitzt er etliche Selektoren und Modifikatoren, bzw. private Methoden.
Die Funktionsweise der private Methoden kann nur in der Datei Feldinhalt.java selber eingesehen werden.
Auch enthält diese Datenstruktur einige experimentelle Selektoren, bzw.
Modifikatoren. Die nur hier erklärt, bzw nur genannt werden und im weiteren
Verlauf dieser Doku nicht mehr auftauchen werden.
5. Funktionsweise des Hamsters:
Zu Beginn kennt der Hamster das Labyrinth nicht, er muss es erst erforschen. Dazu ruft
die Klasse Hamster in der run () Methode zuerst die Methode Firstrun ()
( also die Methode mit deren Hilfe der Hamster das Labyrinth zum ersten Mal erkunden kann
) auf. Diese ist in der Hamster-Klasse Killer.java implementiert.
Die Methode Firstrun () gibt einen Boolean-Wert zurück, der aussagt, ob die Methode
erneut aufgerufen werden soll oder nicht, da die Firstrun () Methode, nur
die Erforschung jeweils eines neuen Feldes beinhaltet, sowie den Hamster nur einen Schritt
machen lässt. Das bedeutet, dass die Methode Firstrun () bei jedem
neuen Feld neu aufgerufen werden muss. Es wird zum Beispiel eine Methode aufgerufen,
die dem Hamster sagt, ob sich Körner auf dem aktuellen Feld befinden
( getCorn () ). Wenn dem so
ist, dann wird eine Methode takeCorn
() aufgerufen, die den Hamster veranlasst, die Körner aufzunehmen. Diese gibt
ebenfalls einen
Boolean-Wert zurück, der aussagt, ob die Hamster-Backen voll sind oder ob noch etwas
hinein passt.
Weiterhin wird im Anschluss eine Instanz der Kalsse Feldinhalt.java erzeugt, in der die
Informationen über die Wände, Wege und ob sich noch Körner darauf befinden gespeichert
werden. Diese Instanz wird an das Ende der Liste in der Hamster Killer eingefügt. Die
Infos über die Wände und Wege auf dem Feld werden
durch die Methode Felduntersuchen
() in der Instanz gespeichert.
Zusätzlich beinhheltet sie verschiedene weitere Methoden und Bedingungen, unter der sie
erneut aufgerufen werden darf.
Wenn der Hamster die Backen voll mit Korn hat, dann gibt sie als Boolean-Wert true
zurück, was bedeutet, dass sich der Hamster auf den Weg nach Hause machen wird. Ist der
Hamster in einer Sackgasse angekommen, dann führt er die Methode gehezuVerzweigung () aus.
Diese unterbricht die Methode Firstrun ()
kurzzeitig, sie wird aber nicht beendet, sodass sie am Ende der Methode gehezuVerzweigung
() wieder aufgerufen wird. Befindet sich der Hamster auf einem normalen Feld ( also einem
Feld mit mindestens 2 Wegen ) und kann noch Körner aufnehmen, dann wird in der Firstrun
() die Methode Hamsterbewegen ()
aufgerufen, mit der sich der Hamster dann dreht und anschliessend eine Schritt vorwärts
macht.
Ist die Methode Firstrun () beendet will der Hamster nach Hause gehen, dazu wird die Methode returningHome () in der run () aufgerufen.
5.2. Die Methode returningHome () :
Das Konzept der Methode returningHome () liegt einfach darin, dass der Hamster auf dem
Rückweg von der "Rechten Hand" auf die "Linke Hand" umgepolt
wird. Also, das er die Anzahl, die er zu Anfang an einfachen Rechtsdrehungen gemacht hat,
um sich fortzu bewegen, jetzt einfach an einfachen Linksdrehungen
macht, um wieder sicher nach Hause zu kommen. Dazu geht er die Liste, die seinen
"Roten Faden" darstellt einfach von Hinten nach Vorne durch und holt sich immer
das entsprechende Objekt der Klasse Feldinhalt.java aus der Liste heraus. Mit hilfe
dieses Objektes startet er dann die Methode HamsterHomeDrehen (),
die den Hamster in die Richtung dreht und bewegt, in der er nach Hause kommt. Wenn er zu
Hause angekommen ist, dann legt der Hamster mit Hilfe der
Methode leaveCorn () die
Körner auf dem Heimatfeld ab. Die Methode returningHome startet, dann die Methode Fadenändern (), die die Liste (
"Roter Faden" )
bearbeitet, indem sie die Liste auf Sackgassen überprüft.
Die Methode returningHome ist beendet.
5.3. Die Methode Labyrinthlauf:
Die Methode Labyrinthlauf beinhaltet folgendes Konzept:
Zunächst einmal muss der Hamster an die letzte ihm bekannte Position manövriert werden.
Dies geschieht dadurch, das sich der Hamster aus seiner Liste, die
er diesmal vom Anfang bis zum Ende durchläuft, nach und nach das jeweilige Objekt
der Klasse Feldinhalt.java holt und es der Methode Hamsterbewegen () übergibt. Die
Funktionsweise ist schon aus der Grundmethode Firstrun () bekannt. Ist der Hamster so am
letzten ihm bekannten Feld angelangt, überprüft er,
im Letzten Feldinhalt-Objekt gespeichert ist, das sich noch Körner auf dem Feld befinden.
Hier beginnen dann die Verzweigungen der Handlungsweise des Hamsters:
1. Liegen noch Körner da nimmt er diese zunächst einmal auf. Wenn er sich dann in einer
Sackgasse befindet, führt er die Methode gehezuVerzweigung () aus.
Im Anschluss führt er die Methode Firstrun () und anschliessend die
Methode returningHome () aus.
Befindet er sich auf einem normalen Feld, also das Feld hat mindestens
zwei Wege, dann führt er zuerst die Methode Firstrun (), zur wieteren Erkundung
des
Labyrinthes und zum Körner sammeln aus und letztendlich wieder die
Methode returningHome () aus,
um zum Heimatfeld zu kommen.
Ist der Hamster voll, dann tritt er sofort den Rückweg mit der Methode
an.
2. Es liegen keine Körner mehr auf dem Feld. Dann führt er die Methode Firstrun ()
aus um das Labyrinth weiter zu erkunden und um Körner zu sammeln und
im Anschluss die Methode returningHome, um wieder zum Heimatfeld
zurück zu kehren.
Am Ende der Methode Labyrinthlauf ruft der Hamster noch eine experimentelle Methode löscheÜberflüssiges () auf, die ihm weitere unnötige Wege für die Zukunft ersparen soll.
Der Hamster führt die Methode Labyrinthlauf solange aus, bis das Heimatfeld keine Weg-Wahlmöglichkeiten mehr hat, oder er mehr als eine festgelegte Anzahl an Schritten getätigt hat. Tritt eine dieser zwei Bedingungen ein, dann hält der Hamster an und begibt sich in den Winterschlaf.