Prof. Franz Schweiggert Abteilung Angewandte
Informationsverarbeitung 18. Mai 2005
Christian Ehrhardt Blatt 6
Unix-basierte Implementierung kleiner Datenbanken (SS 2005)
Abgabetermin 25.05.2005
In einer Datei wird ein Labyrinth beschrieben. Eure Aufgabe ist
es, ein Perl-Skript zu beschreiben, mit dem sich ein Abenteurer durch
das Labyrinth bewegen kann (alles textbasiert natürlich).
Ein Labyrinth besteht aus verschiedenen
Räumen. Ein spezieller Raum heißt ``Entry'', dort befindet sich der
Abenteurer zu Beginn. Jeder Raum hat Ausgänge und in einem Raum
können sich auch diverse Gegenstände befinden, die der Abenteurer
mitnehmen und wieder ablegen kann. Zur Bewegung in
den verschiedenen Räumen sollen die folgenden Kommandos möglich sein:
- inventory zeigt das Inventar des Abenteurers an, das ist
eine Liste all der Dinge, die der Abenteurer im Moment bei sich
trägt.
- look zeigt eine Beschreibung des aktuellen Raums an.
Dazu gehört eine Liste der Objekte, die sich
im Raum befinden und eine Liste der (sichtbaren) Ausgänge,
über die der Raum verlassen werden kann.
- look object zeigt eine Beschreibung des Objekts
object an. Das Objekt muß sich dazu im aktuellen Raum
oder im Inventar des Abenteurers befinden.
- take [count] object nimmt count Einheiten des Objekts
object, das sich im Raum befinden muß, auf und fügt sie dem
Inventar hinzu.
- drop [count] object ist das Gegenteil von take.
count Einheiten des Objekts object aus dem Inventar
werden im aktuellen Raum abgelegt.
- go direction: Der Abenteurer verläßt den aktuellen
Raum in Richtung direction, falls sich in dieser Richtung
ein Ausgang befindet. Jeder Ausgang führt wieder in einen
Raum.
Die notwendigen Informationen dazu befinden sich alle in der Beschreibung
des Labyrinths.
Die Beschreibung des Labyrinths besteht aus einer Folge von Tokens.
Ein Token beginnt immer mit einem Trennsymbol, das kein Whitespace
sein darf und erstreckt sich bis zum nächsten Auftreten des selben
Trennsymbols. Das Trennsymbol selbst gehört nicht zum Token. Zwischen
zwei Tokens kann eine beliebige Folge von Whitespace stehen. Whitespace
innerhalb eines Tokens gehört zum Token, ein Token kann aber auch leer
sein!
Die Beschreibung eines Objekts besteht aus drei Tokens:
- Das Wort ``object''.
- Der Name des Objekts. Dieser Name wird
in Objektlisten ausgegeben und muß bei take und drop
angegeben werden.
- Die ausführliche Beschreibung des Objekts für look.
Die Beschreibung eines Raums besteht aus einer variablen Anzahl von
Tokens:
- Das Wort ``room''
- Der Name des Raums. Dieser Name wird beim Betreten des Raums
ausgegeben.
- Die Beschreibung des Raums für look.
- Es folgt eine Liste von Tokens, die die Objekte im Raum beschreibt.
Jedes Token besteht aus dem Namen des Objekts, einer öffnenden
Klammer ``('', der Anzahl der Einheiten und einer schließenden
Klammer ``)''. Wenn eine Anzahl nicht explizit angegeben wurde,
soll von 1 ausgegangen werden. Die Liste der Objekte wird durch
ein leeres Token beendet.
- Anschließend folgt eine Liste von Tokens, die die Ausgänge
beschreibt. Auch diese Liste wird durch ein leeres Token beendet.
Jedes einzelne Token, das einen Ausgang beschreibt, wird
zunächst selbst wieder, wie anfangs für die gesamte Datei
beschrieben, in Tokens zerlegt.
Die einzelnen dadurch entstehenden Tokens haben dann die folgende
Bedeutung:
- Eine Beschreibung des Ausgangs. Diese Information wird
bei look im aktuellen Raum ausgegeben um den Ausgang
zu beschreiben. Wenn dieses Token leer ist, dann ist dieser
Ausgang unsichtbar, d.h. er taucht in der Ausgabe von
look nicht auf. Natürlich kann er trotzdem verwendet
werden.
- Der Raum, in den der Ausgang führt.
- Ein Text, der ausgegeben wird, wenn dieser Ausgang
benutzt wird.
- Die verbleibenden Tokens sind Richtungsangaben für go,
die dazu führen, daß dieser Ausgang verwendet wird.
Hiervon kann es mehrere geben.
Die gesamte Beschreibung des Labyrinths ist eine Folge von Beschreibungen
für Objekte und Räume. Ein Objekt, das sich anfangs in einem Raum
befindet, muß vor dem Raum selbst beschrieben werden.
Christian Ehrhardt
2005-05-18