![]() |
|
Der nicht ganz so glückliche kleine Hamster besteht aus einer einzigen
Klasse und drei Methoden. Der Hauptmethode "run" und den zwei Methoden
"sammeln" und "ausspucken". Die Methode "sammeln" besteht aus zwei Methoden
einer früheren Entwicklungsstufe des Hamsters - der frühen Methode
"sammeln" und der Methode "weg-zurueck-routine", die aber aufgrund des
Einbaus eines Stacks mit der Sammel-Methode zusammengelegt wurde.
1. Die Methode "run"
Das ist die Hauptmethode, in der die zwei anderen Methoden so oft in
einer while-Schleife wiederholt werden, bis der boolsche Wert "ende" wahr
wird.
(beachte auch Punkt 4. - Die Änderung zur Version 1.1)
2. Die Methode "sammeln"
2.a. Der Teil der alten Methode "sammeln"
In einer while-Schleife werden der Rundumblick, die Zufallsauswahl des
Weges, der atHome-Test und die Kornaufnahme durchgeführt, bis der
boolsche Wert "voll" wahr wird (bis der Hamster das Maximum an Körnern
im Maul trägt).
Der Rundumblick besteht daraus, daß der Hamster sich auf
jeden Feld einmal im Kreis dreht und boolsche Werte für Wände
und Korn an jeder Seite des seckseckigen Feldes festlegt. Zusätzlich
dazu testet er noch, ob das Feld auf dem Korn liegt, nicht das Heimatfeld
ist.
Diese boolschen Werte werden je für Korn und Wände in einem
Array gespeichert. Die Größe eines Arrays wird festgelegt durch
die Anzahl der Werte, die wahr (für Korn) oder bzw (für Wände)
falsch sind.
Durch eine einfache Zufallsberechnung wird nun eine Stelle diese Arrays
ermittelt und somit eine Möglichkeit den Weg fortzusetzen vorgegeben.
Beispiel: Der Hamster steht auf einem Feld mit drei Wänden und keinem angrenzenden Feld mit Korn. Durch den Rundumblick erkennt er drei Wände und setzt die boolschen Variablen für die drei anderen wandfreien Seiten des Feldes auf "wand=false". Die Variable für die möglichen Wege, mit der auch die Größe des Arrays festgelegt wird, wird auf drei gesetzt. Auf den drei Stellen dieses Arrays wird jetzt je eine der drei möglichen wandfreien Wege gesetzt. Durch die Zufallsauswahl wird eine Stelle diese Arrays ausgewählt. Diese Stelle steht dann für eine ausgewählte wandfreie Seite des aktuellen Feldes, wohin der Hamster seinen Weg fortsetzt.
Besonderheiten: Der Hamster läuft niemals ein Schritt vor, dreht
sich um 180 Grad und läuft zurück, außer im Falle einer
Sackgasse.
Die Auswahl eines Feldes mit Korn hat Vorrang vor der Ausahl eines
Feldes ohne Korn.
![]() |
intensives Training auf den Wettbewerb vorbeitet |
2.b. Der Teil der alten Methode "weg-zurueck-routine"
Hierbei bedient sich der Hamster eines alten Tricks und zieht sozusagen einen roten Faden hinter sich durch das Labyrinth.
Hat der Hamster erstmal ein Feld per Zufall ausgewählt, bewegt er sich dorthin. Dabei wird in einem eigens dafür angelegten Stack dieser ausgewählte Weg gespeichert. Das wiederholt sich so oft, bis der Hamster die maximale Anzahl an Körnern in seinem Maul trägt. Nun muß er das Korn zurückbringen und läuft dabei seinen alten Weg umgekehrt zurück indem er die alten gewählten Wegmöglichkeiten aus dem Stack liest und umgekehrt wieder ausführt, bis er automatisch am Heimatfeld angekommen ist.
2.c. Der atHome Test und die Kornaufnahme
Der Hamster prüft auf jeden Feld, ob er zu Hause ist. Ist er zu
Hause und liegt dort schon etwas und er kommt mit leeren Maul zurück,
hört er auf um endloses Herumirren in einem möglichen leeren
Labyrinth zu vermeiden.
Die Kornaufnahme besteht daraus, daß er auf jeden Feld versucht
alles Korn, was er tragen kann, aufzunehmen.
3. Die Methode "ausspucken"
Diese Methode wurde komplett aus dem "LeftHand" Hamster übernommen.
Hat der Hamster das Heimatfeld erreicht, spuckt er das gesammelte Korn
aus.
![]() |
erlaubt dem Programmierer, seine vollständige Kreativität auszuschöpfen |
4. Die Änderung zur Version 1.1
Ausgiebige Tests auf dem mitgelieferten Labyrinth haben ergeben, das
wenn die "run" Methode (oder der Inhalt der "run" Methode) sechs mal abläuft,
eine optimale Punktzahl erreicht wird. Diese Zahl 6 ergibt sich aus dem
Durchschnitt zwischen der Anzahl der Läufe, die der Hamster braucht,
bis seine Punktzahl durch das Herumirren durch ein mögliches leeres
Labyrinth rückläufig wird.
5. Schlußwort
Wenn man sich den Programmcode ansieht, wird man feststellen, daß
ich nicht viel von Objektorientiertheit halte. Als alter BASIC-Programmierer,
der sich auch gern mal für ASSEMBLER interessiert, kann ich natürlich
überhaupt nicht verstehen, warum es in Java meinen Lieblingbefehl
GOTO nicht mehr gibt. Hätte ich den gehabt, hätte ich bestimmt
den Programmcode viel schöner gestalten können. Am besten noch
ohne diese überflüssigen Kommentare...
Der nicht ganz so glückliche kleine Hamster
Programmierung: Andreas Kleinschmidt
email Andreas_Kleinschmidt@web.de
Version 1.0
erster komplett lauffähiger Hamster
Version 1.1
Alles, was in "run" steht, läuft jetzt 6 mal
Version 1.2
für spätere Änderungen
Danke an
www.deathrock.com
Siouxsie & the Banshees
www.gothicradio.com
für die musikalische Unterstützung
![]() |
|