Programmierwettbewerb

Vorlesung Algorithmen und Datenstrukturen
2001

zurueck zur Wettbewerbsseite

Beschreibung des Programms World

Das Programm World erlaubt das Erstellen und Verändern von Labyrinthen, und die Auswahl und den Lauf der Hamster.

Starten könnt ihr es so (oder mit dem Script world):
Unix/Linux:
  java -classpath contest.jar:hamster algds.contest.World

Windows:
  java -classpath contest.jar;hamster algds.contest.World

World nach dem Start

Es hat die Menus World, Maze und Hamster.

World:
About... Autor und Version des Programms.
Clear log Leert das Feld mit den Statusanzeigen.
Pack Setzt die Grösse des World-Fensters auf einen optimalen Wert. Diese Optimalgrösse hängt vom Status der Auswahllisten ab, ist Edit Wall ausgewaehlt, sind die Listen am breitesten. Auch die Grösse des Labyrinth-Fensters wird angepasst.
Exit Beendet das Programm. Ein verändertes Labyrinth wird NICHT automatisch gespeichert.

Maze:
New... Erzeugt ein neues Labyrinth mit anzugebender Grösse. Ein neues leeres Labyrinth hat nur eine Ebene, keine Wände, keinen Mais und keine Beamer, Heimatfeld und (0,0)-Feld sind links oben.
Die Grösse eines Labyrinths kann derzeit nicht nachträglich geändert werden.
Load... Lädt ein Labyrinth. Öffnet ein Dialogfenster, in dem man es auswählen kann.
Reload Lädt das erfolgreich geladene Layrinth nochmal. Nach einem Lauf des Hamsters wird das Labyrinth nicht automatisch neu geladen.
Save Speichert das Labyrinth unter dem aktuellen Namen. Ist das Labyrinth neu, kann man einen Namen auswählen wie bei Save as...
Save as... Speichert das Labyrinth unter einem neuen Namen. Öffnet ein Dialogfenster, in dem man den Namen auswählen kann.
Die Labyrinth-Dateien (mit der Endung ".maze") sollten im Verzeichnis "mazes" abgelegt werden, weil MazeRunner und MazeRunnerX sie von dort laden. 
Visible Setzt im Labyrinth den Status "gesehen". Wenn der Hamster seinen Lauf beginnt, wird im Labyrinth der Status "ungesehen" gesetzt. Dadurch kann man verfolgen, wo der Hamster schon war.
Properties Setzt einige Eigenschaften des Programms. Beschreibung ist ein Stück weiter unten.

Hamster:
Load... Lädt einen Hamster, dessen Klassennamen man angibt.
Reload Lädt den Hamster nochmal. Wenn der Hamster seinen Lauf beendet, wird er nicht automatisch neu geladen.
Mute Der Hamster produziert mit seinen log-Methoden (z.B. log(String)) nur dann eine Ausgabe, wenn diese Option ausgeschaltet ist. Damit kann der Hamster "stummgeschaltet" werden.
Verbose Die Hamster-Methode debuglog(String) produziert nur dann eine Ausgabe, wenn diese Option eingeschaltet ist.
Follow Ist diese Option aktiviert, folgt die Labyrinth-Anzeige dem Hamster, wenn er den gerade angezeigten Bereich verlässt.

Beim ersten Start der World erscheint die Meldung "cannot read world.ini". Das bedeutet, dass die Ini-Datei noch nicht existiert. Geht ins Menu Maze/Properties, tragt euren Namen als Creator ein und klickt auf Save und dann auf OK. Eine Beschreibung der Elemente dieses Dialogfensters ist nachstehend.

Der Menu-Eintrag Maze/Properties öffnet ein Dialogfenster, das bestimmte Eigenschaften des Programms setzt:


Wenn ihr ein Labyrinth geladen habt, öffnet sich ein Fenster, in dem es angezeigt wird.
Ihr könnt nun einen Hamster laden oder das Labyrinth editieren.

World nach dem Laden eines Labyrinths und Hamsters

Labyrinthkomponenten

Labyrinth-Fenster mit Hamster Weisse Felder sind leer, auf orangen Feldern liegt Mais, der durch einen Kreis angezeigt wird. Die Grösse des Kreises hängt vom Maisvolumen auf dem Feld ab. Es wird aber ab einem Volumen von 20 nichts grösseres mehr angezeigt. Graue Linien bezeichnen einen Durchgang zwischen zwei Feldern, blaue Linien repräsentieren Wände. Das gekreuzte Feld (hier in der Mitte) ist das Feld, das die logischen Koordinaten (0,0) in der Ebene hat, der Mauscursor ist hier z.B. über dem Feld (9,6), der Hamster würde auf dem Feld aber als Koordinaten die Werte (4,1) übergeben kriegen. Das umrahmte Feld (hier rechts oben) ist das Heimatfeld des Hamsters. Auf dem startet er, und da muss er den Mais hinbringen. Der rote Dreiviertelkreis stellt den Hamster dar, wobei die Öffnung des Kreises in seine aktuelle Blickrichtung weist. Ihr könnt in den Properties auch einstellen, dass der Hamster durch ein Hamsterbild dargestellt wird. Rote Zahlen bezeichnen Beamer. Der Wert -1 steht für einen halben Beamer (diese werden beim Lauf ignoriert), Zahlen ab 0 treten paarweise auf und bezeichnen die beiden Enden eines Beamers.
Wenn ihr mit der Maus über das Labyrinth geht, wird in der untersten Zeile der Statusanzeige der Mais und die Koordinaten des Feldes angezeigt, über dem die Maus gerade ist. Der Rest der Statusanzeige ist weiter unten erklärt.

 

Editieren


Mit Add könnt ihr ein leeres Level oben hinzufügen, mit Del das aktuelle entfernen. Wenn nur noch ein Level da ist, kann das nicht geloescht werden. Swap dient zum Vertauschen zweier Level (was eigentlich nicht noetig ist, und wenn man mich fragt, warum die Funktion drin ist, sage ich: Weils moeglich war *lach*): Ein Level auswaehlen, dann Swap klicken, dann das andere Level auswaehlen, und nochmal Swap klicken.
In der linken von den drei Auswahl-Listen könnt ihr das angezeigte Level auswählen.

Zum Editieren der Level wählt ihr eine Funktion aus der mittleren Liste aus.
 
Edit Wall:
Klickt mit links auf einen Zellenrand, um eine Wand zu setzen, mit rechts, um sie zu entfernen.
Edit Corn:
Wählt aus der rechten Liste die Korngrösse und -anzahl aus, die ihr pro Klick setzen oder löschen wollt. Mit der linken Maustaste könnt ihr Mais ablegen, mit der rechten entfernen. Das Maisvolumen wird durch die Grösse des Kreises angezeigt.
Edit Beamer:
Wählt aus der rechten Liste eine Funktion aus:
 
New Beamer:
Klickt auf ein Feld, um dort einen neuen halben Beamer zu setzen. Er hat noch kein Ziel, ist aber zum Verbinden ausgewaehlt (Connect (x,y,z)), und kann durch einen Klick in ein anderes Feld direkt mit einem neuen Ziel verbunden werden. Ist auf dem angeklickten Feld bereits ein kompletter Beamer, dann passiert nichts, ist dort ein halber Beamer, wird dieser zum Verbinden ausgewählt.
Del Beamer:
Klickt auf ein Feld, um den dort liegenden Beamer inclusive seinem Ziel zu löschen.
Disconnect:
Klickt auf ein Feld, um den dort liegenden Beamer von seinem Ziel zu trennen. Die Beamer bleiben da, sind aber nun zwei halbe. Der angeklickte ist zum Verbinden ausgewählt (Connect (x,y,z)), und kann durch einen Klick in ein anderes Feld direkt mit einem neuen Ziel verbunden werden.
Connect (x,y,z):
Klickt auf ein Feld, um den in der Liste ausgewaehlten halben Beamer mit einem neu erzeugten oder vorhandenen halben Beamer auf dem angeklickten Feld zu verbinden.
Ihr könnt keinen Beamer mit sich selbst oder mit einem kompletten Beamer verbinden.

Halbe Beamer haben alle die Nummer -1, komplette Beamer werden fortlaufend nummeriert, beide Hälften des Beamers haben die gleiche Nummer. Die Nummern gelöschter oder getrennter Beamer werden nicht neu vergeben. Erst beim Laden oder Neuanlegen eines Labyrinths werden die Beamer neu durchnummeriert.
Halbe Beamer werden beim Lauf ignoriert und dem Hamster nicht angezeigt.

Edit Home:
Wählt aus der rechten Liste, ob ihr das Heimatfeld oder das Zentrum der Ebene setzen wollt. Vom Heimatfeld startet der Hamster und dorthin bringt er seinen Mais, das Zentrum einer Ebene ist das Feld, das die logischen Koordinaten 0,0 hat.

Lauf des Hamsters

Ladet einen Hamster mit File/Load Hamster.
Ist bereits ein Labyrinth geladen, wird er als Hamsterbild oder als Kreisbogen angezeigt. Es ist egal, ob ihr zuerst den Hamster oder das Labyrinth ladet. Klickt ihr auf den Startbutton, so beginnt der Hamster seine Suche im Labyrinth.

Habt ihr das Labyrinth verändert, dann speichert es, bevor ihr den Hamster startet, denn das Labyrinth wird vom Hamster verändert und nicht zwischengespeichert!!

Statusanzeige

energy: Die aktuelle Energie des Hamsters score: aktuelle Punktzahl
carry: Mais, den der Hamster trägt steps: aktuelle Schrittzahl
avail: Mais, der auf dem Feld liegt, auf dem der Hamster gerade ist turns: aktuelle Anzahl der Drehungen
coll: Mais, den der Hamster auf dem Heimatfeld angesammelt hat   logische Koordinaten und Richtung des Hamsters
field: Mais, der auf dem Feld liegt, auf das die Maus zeigt   Koordinaten des Feldes, auf das die Maus zeigt, als Realkoordinaten und als logische Koordinaten
Labyrinth-Fenster mit laufendem Hamster Die Mais-Anzeige enthält die Gesamtgrösse und in den Klammern die einzelnen Körner-Anzahlen von 1 bis CORNSIZE_MAX. Logische Koordinaten sind die, die der Hamster erhält, wenn er getX(), getY() und getLevel() aufruft (wobei die logische Levelnummer mit der realen übereinstimmt). Wenn der Hamster beginnt, wird das Labyrinth grau eingefärbt, um anzuzeigen, dass er noch nirgends war. Während der Hamster läuft, werden die Felder hellgrau, die er gesehen hat, und die Felder, die er bereits betreten hat, werden weiss.

Die Bedeutung der Symbole im Labyrinth ist weiter oben erklärt.

Wenn der Hamster seine Suche beendet, muss man ihn oder einen anderen neu laden, damit man wieder einen Hamster durchs Labyrinth schicken kann. Ausserdem muss man das Labyrinth neu laden. Das geschieht nicht automatisch, damit man sehen kann, was der Hamster "angerichtet" hat.

Ihr könnt den Hamster auch mit dem Stopbutton stoppen. Wenn euer Hamster so funktioniert wie er soll, dann beendet er kurz danach seinen Lauf. Wenn nicht, dann klickt nochmal auf Stop, und der Hamster wird gekillt. Das funktioniert jedenfalls mit unseren Testhamstern unter Windows.


Seitenanfang
Status vom 12.03.2001, Stephan Finn, Christian Semrau