Programmierwettbewerb

Vorlesung Algorithmen und Datenstrukturen
2002

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:
Unix/Linux:
  java -cp contest.jar:hamster algds.c2002.World
Windows:
  java -cp contest.jar;hamster algds.c2002.World
oder mit der Batchdatei
  world

World nach dem Laden eines Labyrinths und Hamsters


Es gibt die Menus Programm, Labyrinth, Hamster, Ansicht und Bearbeiten.

Programm:
Ueber das Programm Autor und Version des Programms.
Eigenschaften Setzt einige Eigenschaften des Programms. Beschreibung ist ein Stück weiter unten.
Programm beenden Beendet das Programm. Ein verändertes Labyrinth wird nicht automatisch gespeichert.

Labyrinth:
Neues Labyrinth Erzeugt ein neues Labyrinth mit anzugebender Grösse. Ein neues leeres Labyrinth hat keine Wände, keine Hoehen, keinen Mais und das Heimatfeld ist in der Mitte.
Die Grösse eines Labyrinths kann nicht nachträglich geändert werden.
Lade Labyrinth Lädt ein Labyrinth. Öffnet ein Dialogfenster, in dem man es auswählen kann.
Labyrinth neuladen Lädt das erfolgreich geladene Layrinth nochmal. Nach einem Lauf des Hamsters wird das Labyrinth nicht automatisch neu geladen.
Labyrinth speichern Speichert das Labyrinth unter dem aktuellen Namen. Ist das Labyrinth neu, kann man einen Namen auswählen wie bei Labyrinth speichern unter
Labyrinth speichern unter 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" (oder einem Unterverzeichnis davon) abgelegt werden, weil MazeRunner sie von dort laedt.

Hamster:
Lade Hamster Lädt einen Hamster, dessen Klassennamen man angibt. Ihr muesst in korrekter GrossKleinSchreibung den Klassennamen angeben, nicht den Dateinamen der Quelltext- oder Klassendatei.
Hamster neuladen Lädt den Hamster nochmal. Wenn der Hamster seinen Lauf beendet, wird er nicht automatisch neu geladen.
Hamster entfernen Entfernt den Hamster aus der Umgebung. (Damit man trotz bereitem einfachen Hamster in die Erweiterte Welt kommen kann.)
Hamster starten Laesst den Hamster loslaufen.
Hamster stoppen Unterbricht den Lauf des Hamsters.
Verbose Der Hamster soll ausfuehrliche Meldung ueber sein Verhalten machen. Die Hamster-Methode verbose() liefert true, wenn diese Option ausgewaehlt ist.
Normale Ausgabe Der Hamster soll nur kurze Meldungen machen. Die Hamster-Methode verbose() liefert false, wenn diese Option ausgewaehlt ist.
Mute Der Hamster wird stummgeschaltet. Der Hamster produziert mit seinen log-Methoden (z.B. log(String)) keine Ausgabe, wenn diese Option ausgewaehlt ist (und verbose() liefert false).

Ansicht:
Toolbar Zeigt die Buttonleiste an oder versteckt sie.
Editbuttons Zeigt die Editbuttons am linken Rand an oder versteckt sie.
Meldungsfenster Zeigt das Meldungsfenster an oder versteckt es. log-Ausgaben in dieses Fenster werden weiter gesammelt, nur nicht mehr angezeigt.
Fenster packen Setzt die Grösse des World-Fensters auf einen optimalen Wert. Dabei wird versucht, das Labyrinth komplett anzuzeigen, es wird aber nicht über den Bildschirmrand hinaus vergrössert. (Leider nutzt das Fenster dann auch den Platz, der eigentlich fuer den Windows-/KDE-/CDE- oder anderenWindowManager- Taskbar reserviert ist)
Ausgabe leeren Leert das Meldungsfeld.

Bearbeiten:
Bewegen, Level Up/Down, Einebnen, Waende setzen/entfernen, Klippen setzen/entfernen, Koerner entfernen, 1 Korn, 5 Koerner, 20 Koerner Waehlt eine Editierfunktion aus. Siehe den entsprechenden Editbutton

Editbuttons

Bewegen
Wenn das Fenster zu klein ist, um das ganze Labyrinth anzuzeigen, koennt ihr die Anzeige mit gedrueckter linker Maustaste verschieben, wenn ihr mit rechts in die Anzeige klickt, wird dieser Punkt in die Mitte der Anzeige verschoben.
Level Up/Down
Mit der linken Maustaste hebt ihr ein Feld um eine Hoehenstufe, mit der rechten Taste senkt ihr es eine Stufe ab. Gegebenenfalls werden dabei ebene Durchgaenge in Schraegen oder Klippen umgewandelt. Es gibt 4 Hoehenstufen. Anfaenglich sind alle Felder auf der untersten Stufe.
Einebnen
Klickt ihr mit der linken Maustaste auf ein Feld und zieht die Maus mit gedrueckter Taste zu anderen Feldern, dann werden diese Felder auf die gleiche Hoehe gesetzt wie das Feld auf das ihr zuerst geklickt habt.
Waende setzen/entfernen:
Klickt mit links auf einen Zellenrand, um eine Wand zu setzen, mit rechts, um sie zu entfernen.
Klippen setzen/entfernen:
Klickt mit links auf einen Zellenrand, um eine Klippe zu setzen, mit rechts, um sie zu einer Schraege zu machen. Klippen gibt es nur zwischen Feldern mit unterschiedlicher Hoehe, und Schraegen nur zwischen Feldern mit einem Hoehenunterschied von 1.
Koerner entfernen
Mit der linken Maustaste koennt ihr alles Getreide eines Feldes entfernen.
1 Korn, 5 Koerner, 20 Koerner:
Mit der linken Maustaste könnt ihr 1,5 oder 20 Maiskoerner ablegen, mit der rechten entfernen, wenn ihr die Maus mit gedrueckter Maustaste bewegt, wird das Getreide auf allen berührten Feldern geändert. Das Maisvolumen wird durch die Grösse des Kreises angezeigt.

Der Menu-Eintrag Programm/Eigenschaften öffnet ein Dialogfenster, das bestimmte Eigenschaften des Programms setzt:
Erzeuger Name des Labyrinth-Konstrukteurs. Wird fuer neu erzeugte Labyrinthe verwendet.
Autor Konstrukteur des aktuell geladenen Labyrinths.
Standard ClassLoader Angabe, ob zum Laden der Hamster der Standard-Klassenlader oder der eigene Lader verwendet werden soll.
Der Standard-Lader erkennt keine zwischenzeitlichen Neukompilierungen des Hamsters, verlangt aber die Klassen nicht explizit auf der Festplatte. Er sucht nicht nur im Verzeichnis hamster, sondern im gesamten classpath. Einige IDEs (z.B. IBM VAJA) speichern ihre Klassen nicht direkt auf der Platte, so dass ihr, wenn ihr die verwendet, nur den Standard-Lader nutzen koennt. Der eigene Lader erkennt, wenn der Hamster zwischendurch rekompiliert wird und laedt mit Hamster laden oder Hamster neuladen den neuen Hamster (und alle seine Unterklassen) von der Platte. Er nimmt dabei an, dass die Klassendateien im Unterverzeichnis hamster liegen.
Solange ihr euren Hamster programmiert und austestet, empfehle ich den eigenen Lader.
Systemdialog Angabe, ob zum Laden und Speichern der Labyrinthe ein Systemdialog oder ein JAVA-Dialog verwendet werden soll.
Extended world Wenn diese Option eingeschaltet ist, werden Hoeheninformationen verfuegbar, und es koennen Hoehenstufen und Klippen bearbeitet werden. Aber nur wenn sie ausgeschaltet ist, koennen Hamster, die nicht von Hamster2 abgeleitet sind, geladen werden.
Hamster folgen Ist diese Option aktiviert, folgt die Labyrinth-Anzeige dem Hamster, wenn er den gerade angezeigten Bereich verlässt.
SloMo Angabe, ob jede Handlung des Hamsters angezeigt werden soll oder ob nur bei Schritten des Hamsters pausiert werden soll.
Groesse Auswahl der angezeigten Zellengroesse.
Tempo Auswahl der voreingestellten Laufgeschwindigkeit. Gibt die Wartezeit nach jedem Schritt in Hundertstel Sekunden an. (Der Hamster ist also umso langsamer, je groesser der Wert ist.)
OKEinstellungen uebernehmen und Dialog schliessen.
AbbrechenEinstellungen verwerfen und Dialog schliessen.
UebernehmenEinstellungen uebernehmen und Dialog offenlassen.
LadenEinstellungen laden. Einstellungen werden beim Programmstart automatisch geladen
SpeichernEinstellungen speichern in world.ini. Einstellungen werden beim Programmende automatisch gespeichert.


Beim ersten Start der World geht bitte ins Menu Programm/Eigenschaften und tragt in dem Dialogfenster euren Namen als Erzeuger ein.


Labyrinth mit Hoehenstufen (treppen1.maze) Labyrinth ohne Hoehenstufen

Labyrinthkomponenten
In der Flatworld sind alle Felder weiss, ansonsten haengt die Farbe von der Hoehe ab. Gelbe Kreise in der Mitte eines Feldes bezeichnen Mais. Die Grösse des Kreises hängt vom Maisvolumen auf dem Feld ab. Graue Linien bezeichnen einen ebenen Durchgang zwischen zwei Feldern. Braune Linien markieren Schraegen, auf denen der Hamster einen Hoehenunterschied ueberwinden kann, Schwarzweisse Linien markieren Klippen, die der Hamster nur vom weissen zum schwarzen Rand hinabspringen kann. Er kann nicht vom schwarzen Rand hinauf. Blaue Linien repräsentieren Wände. Wenn die Wand zwischen Feldern mit unterschiedlicher Hoehe steht, wird sie dicker gezeichnet. Das schwarz umrahmte Feld in der Mitte ist das Heimatfeld des Hamsters. Auf dem startet er, und da muss er den Mais hinbringen. Der rote Pacman stellt den Hamster dar, wobei die Öffnung des Kreises in seine aktuelle Blickrichtung weist.


Lauf des Hamsters

Ladet einen Hamster mit dem Button oder Menueintrag Lade Hamster.
Wurde er erfolgreich geladen, wird er als Kreisbogen angezeigt. 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!!

Labyrinth mit laufendem Hamster Wenn der Hamster startet, wird das Labyrinth dunkelgrau 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 bzw. nehmen ihre normale Farbe an.

Statusanzeige
Während der Hamster läuft, oder ihr mit der Maus über das Labyrinth geht, werden in der Statusanzeige Informationen über den Fortschritt des Hamsters angezeigt.

po: (points) aktuelle Punktzahl
st: (steps) aktuelle Schrittzahl
ci: (collisions) Anzahl der Kollisionen des Hamsters
ce: (collected) Mais, den der Hamster auf dem Heimatfeld angesammelt hat
av: (available) Mais, der auf dem Feld liegt, auf dem der Hamster gerade ist
cr: (carry) Mais, den der Hamster gerade trägt
tm: (time) Zeit in Sekunden seit dem Start des Hamsters
mc: (mouse corn) Mais, der auf dem Feld liegt, auf das die Maus zeigt
lv: (level) Hoehe des Feldes, auf das die Maus zeigt

Beenden des Hamsterlaufs

Wenn der Hamster seine Suche beendet hat, 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.


Bekannte Fehler:

Nichts ist vollkommen, und schon gar nicht ein Programm, das jedes Jahr von Grund auf neu geschrieben wird. Wenn ihr Fehler entdeckt, schreibt sie uns, wir werden ihnen schnellstmoeglich auf den Grund gehen.

Leeres Fenster beim Programmstart
Mir ist ein NT-Rechner bekannt, auf dem das Programm World zwar startet, aber ausser einem leeren Fenster nichts anzeigt. Das Problem liess sich loesen, indem die Buttons und Menu-Eintraege keine Icons mehr benutzen. Um die Icons abzuschalten, muss man die vom Programm angelegte world.ini editieren, und die Option showicons auf false setzen. Da die world.ini nicht automatisch gespeichert wird, kann man eine Ini-Datei mit Vorgabewerten anlegen, indem man den Befehl
java -cp contest.jar algds.c2002.PropertiesIO
ausfuehrt.

Abgeschnittenes Fenster beim Packen
Manchmal wenn das Fenster beim Optimieren der Groesse (Anzeige/Fenster packen) am Bildschirmrand abgeschnitten wird, wird die Groesse der Fensterkomponenten nicht mit angepasst. In dem Fall kann man einfach die Fenstergroesse mit der Maus ein bisschen aendern, dann wird der Fensterinhalt aktualisiert.


Seitenanfang
Status vom 31.01.2002, Christian Semrau