Hamsterwettbewerb 2002
Otto-von-Guericke-Universität Magdeburg
Dokumentation zum Hamster (Bommel)
Der Schöpfer des Hamsters: Mirko Otto (Matrikelnr.:163945)
Die Aufgabe: Es ist ein Hamster zu schreiben, der so durch ein Labyrinth läuft,
dass er möglichst viel Getreide mit möglichst wenigen Schritten einsammelt.
|
Bewegungen im Array | ||||||||||||||
|
Klasse | Funktion |
Bommel.java | Die Hauptklasse des Hamsters. Sie ruft die anderen Klassen auf, welche die Funktionen enthalten. |
Const.java | Diese Klasse enthält zusätzliche Konstanten, sie wird von allen anderen Klassen implementiert und benötigt. |
Coordinate.java | Ich gehe immer mit dem Hamster mit und für die Bewegung in der Karte, habe ich diese Klasse entworfen. Sie ermöglicht es mir, mich mit einfachen Befehlen(z.B. go, go_N, ...) in dem Feld zu bewegen. |
Direction.java | Ist für die Richtung und das Drehen des Hamsters zuständig. Wenn sich der Hamster mit "turn(TURN_RIGHT)" dreht, dann drehe ich mich im Feld mit right_Dir() mit. |
Infopoint.java | In dieser Klasse wird entschieden, welches Feld der Hamster als nächstes betritt. |
Map.java | Hier wird die Struktur zur Speicherung aller Daten bereitgestellt. Es werden Informationen gesammelt und gespeichert, die Wege neu berechnet und Felder geprüft. |
Methode | Wirkung |
run | Hier werden die Strukturen(Map, Coordinate, Direction) neu angelegt und initialisiert, dann wird die Hauptlaufmethode goShopping aufgerufen. |
lookAround | Dreht sich im Kreis und schaut in alle Richtungen, um Aufzeichnungen zu machen. Dies macht er aber nur, wenn das Feld noch nicht als betreten gekennzeichnet und er nicht zu Hause ist. |
goShopping | Die wichtigste Methode überhaupt, hier laufen alle anderen Methoden zusammen oder werden hier aufgerufen. Hier wird entschieden, ob er sammeln geht, nach Hause geht oder ob er Schluss macht. |
goHome | Geht nach Hause und legt dann alles an Korn ab, was er hat. |
goHome_Ext | Siehe goHome, es gibt einen einzigen Zusatz. Wenn er ein Feld vor zu Hause steht und vor ihm in Richtung Home eine Klippe ist, dann schmeißt er das Korn darüber. |
goZiel | Geht zum Ziel. Wenn er zufällig über das Heimatfeld läuft, legt er auch gleich alle Körner ab. |
search_next_ZField | Ruft die Methode calc_new_distance_ZMap(Klasse Map) auf, es werden neue Entfernungen berechnet. |
search_next_ZField_Ext | Siehe search_next_ZField, die Berechnung erfolgt für erweiterte Labyrinthe. |
search_next_Field_Ext | Ruft die Methode calc_new_distance_Ext_Map(Klasse Map) auf. |
dropAll | Legt alles an Körner ab, was er hat. |
Methode | Wirkung |
equals | Überprüft, ob zwei Koordinaten gleich sind. |
get_x | Gibt die x-Koordinate zurück. |
get_y | Die y-Koordinate wird zurückgegeben. |
set_Field | Setzt auf die Koordinate, die der Methode übergeben wird. |
set_Home | Setzt die Koordinate auf das Heimatfeld des Hamsters. |
Hilfsmethoden (go_N, go_NE, ..., goNW) |
Geht in verschiedene Richtungen, in der Map. |
go | Nutzt die Hilfsmethoden(go_N, go_NE, ..., goNW) und die Richtung(Direction), um sich in der Map zu bewegen. |
Methode | Wirkung |
get_Dir | Gibt die Richtung zurück, in die der Hamster gerade schaut. |
right_Dir | Dreht sich nach rechts. |
Methode | Wirkung |
init_Info | Initialisierung des Arrays. |
fuell_Info | Das Array wird mit Werten aus den umliegenden Feldern gefüllt. |
bestWay_Info | Entscheidung für den besten Weg, nach bestimmten Gesichtspunkten (siehe Lauf- und Suchstrategie). |
Methode | Wirkung |
init_Map | Das Feld wird zu Begin mit Standartwerten initialisiert. |
initDIST_Map | In der Karte werden die Entfernungen zurückgesetzt, zur Neuberechnung der Distanzen. Hier wird auch gleich mit check_Field geprüft und Felder die ich nicht mehr betreten muss, werden dann auf besucht gesetzt. |
get_minIndiz_Ext_Map | Gibt das INDIZ(gesehen und noch nicht betreten) Feld zurück, welches am wenigsten weit weg ist. |
get_minCorn_Ext_Map | Es wird das Feld zurückgegeben, auf welchem Korn liegt und am wenigsten weit weg ist. |
set_value_Map | Hilfsmethode, setzt einen Wert in die Karte. Es gibt noch weitere Hilfsmethoden, wie set_N, set_NE ... set_NW, diese setzen ebenfalls Werte in die Karte. |
get_value_Map | Eine weitere Hilfsmethode, diese gibt einen Wert aus der Karte zurück. Es gibt noch weitere Hilfsmethoden, wie get_N, get_NE ... get_NW, diese geben ebenfalls Werte aus der Karte zurück. |
calc_pot_ZField | Das gilt nur für INDIZ(gesehen und noch nicht betreten) Felder. Es wird geprüft, ob ein weiteres INDIZ Feld nebenan ist. Wenn dies der Fall ist und kein Korn auf beiden liegt, dann werden diese beiden Felder als Felder betrachtet, die nicht mehr besucht werden müssen. |
check_Field | Das gilt nur für INDIZ(gesehen und noch nicht betreten) Felder. Es wird geprüft, ob alle Felder rings um dieses INDIZ Feld, als besucht gekennzeichnet sind. Wenn dies der Fall ist, wird das INDIZ Feld mit entsprechenden Werten aufgefüllt und als VISIT(gesehen und besucht) gekennzeichnet. |
check_INDIZ_Field | Ruft die Methode check_Field für alle INDIZ Felder rund um den jetzigen Standort auf. |
calc_new_distance_ZMap | Berechnet die Entfernungen neu, für alle Felder die erreichbar sind. Die Berechnung beginnt ausgehend vom Zielfeld und wird abgebrochen, wenn der jetzige Standpunkt erreicht ist oder alle Felder berechnet sind. |
calc_new_distance_Ext_ZMap | Siehe calc_new_distance_ZMap, die Berechnung erfolgt hier für erweiterte Labyrinthe. |
calc_new_distance_Ext_Map | Es werden alle erreichbaren Felder, die ich vom jetzigen Standort sehen kann, mit neuen Distanzwerten berechnet. Diese Methode wird für erweiterte Labyrinthe benötigt, um festzustellen welche Felder erreichbar sind oder auch nicht. |
set_visit_Map | Diese Methode indiziert die Felder beim Laufen mit neuen Abstandswerten, so ist eine vollständige Neuberechnung während des Laufes nicht nötig. Hier werden auch die Werte INDIZ und VISIT gesetzt, für alle Felder die ich sehe und(oder) betrete. |