Home
ZETA Benutzerhandbuch - martin
Contents
1. Beide Zeilen geben denselben Text aus Die erste Zeile ist jedoch eine Anweisung mit drei Ausdr cken die zweite Zeile besteht aus drei einzelnen Anweisungen Dies kommt bei einer weiteren Anweisung zum Tragen Stop das aus der Routine zur ckspringt und wahr zur ckgibt kann auch mit einem Text versehen werden Dann gibt es diesen Text aus bevor es wahr zur ckgibt Dieser Text kann auch zusammengesetzt sein wenn man dazu Kommas benutzt Eine Zeile wie Stop Du kommst nicht an den a0bj heran erzeugt allerdings die Fehlermeldung Diese Anweisung wird nie ausgef hrt bei der zweiten Anweisung da nach Stop die Routine bereits verlassen wurde Eine Konstante die einen Text enth lt kann wie ein Text in Anf hrungszeichen verwendet werden Konstante Absatz p 2 Routine meinFormat Es folgt ein einger ckter Absatz Absatz Dies ist ein einger ckter Absatz 28 1 Grundlagen ZETA erlaubt es Unicode Zeichen zu verwenden obwohl nur moderne Interpreter sie anzeigen k nnen Dazu gibt es zwei M glichkeiten einmal k nnen hexadezimale Unicodes in geschweiften Klammern angegeben werden Das macht 12 50 20ac bitte Dabei muss das Dollarzeichen angegeben werden um diese Notation von den Kurzstrings zu unterscheiden Wenn der Interpreter das Eurozeichen mit dem Unicode 20ac nicht korrekt darstellen kann wird hier ein Fragezeichen ausgegeben was unsch n ist Au erdem ist die Anzahl der so a
2. Das Standardverhalten dieser Befehlen ist allerdings wenig aussagekr ftig der Spieler riecht h rt schmeckt oder f hlt nichts Besonderes Besondere Sinneswahrnehmungen m ssen also in Vorher ber cksichtigt werden Die beiden Befehle zuh ren und riechen k nnen auch ohne Objekte benutzt werden dann wird der Aufenthaltsraum impliziert Raum beim Wasserfall Name Beim Wasserfall Vorher riechen stop Es riecht erdig hier moosig Vorreaktion zuh ren stop Du h rst nur das donnernde Tosen das Wasserfalls sonst nichts In diesem Fall kann der Spieler sein Transistorradio nicht mehr h ren weil der Wasserfall alles bert nt Den erdigen Geruch bekommt der Spieler aber nur wenn er rieche eingibt ohne Objekt so dass er einen Harzer K se immer noch erschnuppern kann wenn er will 7 12 Der Spieler Der Protagonist des Spiels den der Spieler durch das Abenteuer f hrt wird in ZETA durch ein Objekt beschrieben das Objekt Spieler Der Spieler hat wie alle anderen Objekte eine Position im Objektbaum meist befindet er sich direkt in einem Raum er kann aber auch wie in Abschnitt 7 4 beschrieben in anderen Objekten sein die das Attribut betretbar haben m ssen Mit Mutter Spieler bezieht man sich auf das direkte Mutterobjekt des Spielers etwa einen Stuhl auf dem er sitzt oder einfach den Raum in dem er sich aufh lt Die Variable aRaum gibt immer den Raum an in dem sich der Spiele
3. Pr positionen werden f r indirekte Objekte ben tigt und k nnen mit bis zu drei Pronomialadverbien angegeben werden Pr position Pr p gt Adverb Adverb Adverb Steuerbefehle ZETA besitzt einige Anweisungen die den Kompiliervorgang steuern k nnen Diese Anweisungen beginnen mit einem Doppelkreuz und werden mit dem Zeilenende abgeschlossen Es kann aber auch ein Semikolon benutzt werden solange es auf derselben Zeile wie das Doppelkreuz ist Das Doppelkreuz muss nicht unbedingt in der ersten Spalte der Zeile stehen datei Dateiname Bindet die Datei mit dem Dateinamen ein Der Dateiname kann einen Pfad enthalten Wird kein Pfad angegeben so wird der Pfad genommen in dem der Hauptquelltext liegt 151 Anhang A Spezifikation der Sprache Eingebundene Dateien k nnen wiederum Dateien einbinden optionen Optionen Setzt diese Optionen wenn es nicht bereits zu sp t daf r ist wenn Ausdruck Kompiliert die nachfolgenden Anweisungen nur wenn der Ausdruck wahr ist wenn def Bezeichner Kompiliert die nachfolgenden Anweisungen nur wenn der Bezeichner bereits explizit definiert wurde wenn ndef Bezeichner Dito nur negiert sonst Kompiliert die nachfolgenden Anweisungen nur wenn die vorangehenden Anweisungen wegen wenn nicht kompiliert wurden tende Beedndet die bedingte Kompilierung wenn Konstrukte k nnen verschachtelt werden text Fehlercode Text Schreibt den Text als Information
4. Weitere Funktionen erlauben die korrekte Ausgabe von Verben je nachdem ob ein Objekt im Plural steht oder nicht v_ist o ist oder sind v_hat o hat oder haben v_wird wird oder werden v_t o t oder en v_tt o t oder n v_allg s p o s oder p Die vorletzten beiden Routinen sind f r Verbendungen gedacht die letzte erlaubt eine absolut freie Wahl der Strings s und p f r Singular und Plural der o steh v_t im Weg der o m ffel v_tt etwas 1 1 der o v_allg f llt fallen aus dem Rahmen x Diese Beispiele zeigen eine weitere Regel Wenn bei Routinen zur Objektausgabe das Objekt fehlt wird das zuletzt verwendete in diesen F llen also o eingesetzt Die runden Klammern m ssen nat rlich trotzdem stehen auch wenn sie leer sind x Die S tze oben sind so noch nicht ganz richtig sie fangen n mlich klein an Die Routine Gro Routine Argumente ruft die Routine auf und wandelt den ersten Buchstaben der Ausgabe in einen Gro buchstaben um Gro der Mutter o T v_ist noch zu 117 8 Beschreibungen I Hier muss man aufpassen dass die Routine und die Argumente einzeln an Gro bergeben werden und nicht etwa der R ckgabewert der Routine Etwas wie Gro dem o war alles egal erzeugt einen Laufzeitfehler x Einige Pr positionen und bestimmte Artikel verschmelzen zu einem Wort zum
5. e Aufgabe 13 Um die Beschr nkung der laufenden D monen aufzuheben k nnte man nur einen D monen laufen lassen der dann alle anderen D monen aufruft wenn die dazugeh rigen Objekte das Attribut aktiv haben Wie e Aufgabe 14 Die D monen und Z nder laufen wie gesagt nicht in einer vorhersehbaren Reihenfolge ab Das kann ungl cklich sein Erweitere das System aus der vorigen Aufgabe so dass jedes Objekt eine Eigenschaft D mon_Prio mit Werten zwischen 10 und 10 haben kann so dass D monen mit einer h heren Priorit t zuerst laufen Zus tzlich zu diesen beiden Eigenschaften die erst explizit aktiviert werden m ssen wird am Ende des Zuges f r jedes Objekt das sich in Sichtweite des Spielers befindet automatisch die Eigenschaft jede_Runde aufgerufen wenn es sie besitzt Da das Objekt immer in der N he des Spielers ist wenn jede_Runde aufgerufen wird kann man diese Routine gut dazu verwenden um einfache Personen zu implementieren die nur agieren wenn der Spieler gerade mit ihnen im Raum ist oder x Man kann die Sichtbarkeit von Objekten k nstlich erweitern mehr dazu in Abschnitt 9 6 Wenn die Bibliothek die Sichtbarkeit pr ft um zu ermitteln f r welche Objekte 108 7 Das Modell der Spielwelt jede_Runde aufgerufen werden soll hat die Variable Kontext den Wert k__jede_Runde Die globale Variable Z ge enth lt die Anzahl der vom Spieler durchgef hrten Spielz ge Nicht verstandene Eingaben und Meta Befehle
6. Genus m Plural wenn selbst ist eingeschaltet antworte helle_Lampions antworte dunkle_Lampions Subst lampion m lampions pp Nachher einschalten mache selbst Lichtquelle ausschalten mache selbst nicht Lichtquelle Disambig einschalten wenn selbst ist nicht Lichtquelle antworte 8 ausschalten wenn selbst ist Lichtquelle antworte 8 ist schaltbar Objekt helle_Lampions Name leuchtend e Lampions Plural p Zahlenangabe Objekt dunke_Lampions Name erloschen e Lampions 180 L sungen der Aufgaben Plural p Zahlenangabe Das Wechseln zwischen den Pluralobjekten h tte auch in Meldung oder Nachher beim an und ausmachen abgefangen werden k nnen Dann aber w rde nicht ber cksichtigt wenn Lampions nicht vom Spieler angez ndet oder ausgeblasen w rden wenn etwa eine Sturmb das Lampionfest st rt e 19 Man definiert einfach zwei Plural Objekte so dass eines f r die dunklen ein anderes f r die hellen Lampions gilt Klasse Lampion Name wenn selbst ist eingschaltet Text selbst Farbwort leuchtend sonst erloschen e Lampion Genus m Farbe Farbwort jenach selbst Farbe 1 antworte gelb 28 antworte violett sonst antworte rot Plural wenn selbst istnicht eingeschaltet antworte dunkle_Lampions wenn selbst Farbe 1 antworte gelbe_Lampions wenn selbst Farbe 2 antworte vi
7. Kurzstring Iwan Iwan Nun kann man die Abk rzung Iwan in Texten verwenden Iwan folgt dir auf dem Fu e Der Wert des Strings kann dann w hrend des Spiels ge ndert werden mit Kurzstring Iwan Natascha ZETA verwendet einige dieser Strings um Beugungen in Objektnamen einfach angeben zu k nnen Da die Bezeichner f r Kurzstrings immer nur in einem eindeutigen Kontext verwendet werden k nnen sie Bezeichner haben die bereits vergeben wurden So kann es z B einen Kurzstring mit dem Bezeichner Westen geben auch wenn es bereits eine Routine oder Variable mit diesem Namen gibt Text zwischen Anf hrungsstrichen ist nur eine Art etwas auszugeben Zur Ausgabe von Text gibt es einige Systemfunktionen Eine davon wurde bereits vorgestellt num 10 Punkte 27 1 Grundlagen Diese Systemfunktion gibt den numerischen Wert von 10 Punkte als Dezimalzahl aus Weitere Funktionen geben Werte in bestimmten Formaten aus Text x gibt den Text an Adresse x aus Vokabel x gibt die Vokabel an Adresse x aus Char x gibt das Zeichen mit dem ZSCH Code x aus Nat rlich kann der Programmierer eigene Routinen zur Textausgabe schreiben zum Beispiel die Routine Kartenname x aus dem vorigen Abschnitt Die Ausdr cke die man ausgeben m chte kann man auch in einer Anweisung zusammenfassen wenn man sie mit Kommas voneinander trennt Du ziehst eine Karte Kartenname 0 p Du ziehst eine Karte Kartenname 0 p
8. L sungen der Aufgaben Befehl meta__Nachwort Infinitiv Nachwort istMeta Aktion wenn Ende lt 0 stop Erst durchspielen dann das Nachwort lesen Hast du einmal versucht n die Hose anzuziehen n die Tomate zu essen n die Taschenlampe einzuschalten n saet LibObjekt in Zetalib Texte lokal n verschiedenes wenn n 4 amp amp aBefehl meta__Nachwort stop Ausf meta__Nachwort wenn n 3 M chtest du einen NEUSTART einen alten Spielstand LADEN den letzten Zug R CKG NGIG machen wenn Ende gt 1 im NACHWORT erfahren was man im Spiel Lustiges machen kann stop oder das Spiel beENDEn e 16 Manche Spiele zeichnen eine ASCI Windrose hier begn gen wir uns mit einer einfachen Liste Routine Ritg i r rname lokal d Datentyp aRaum r wenn d Objekt d Routine wenn i p Text rname i t antworte i LibObjekt in Zetalib Texte lokal n Status wenn n 3 lokal i i Ritg i Norden n 178 L sungen der Aufgaben i Ritg i Nordosten no i Ritg i Osten o i Ritg i S dosten so i Ritg i S den s i Ritg i S dwesten sw i Ritg i Westen w i Ritg i Nordwesten nw i Ritg i hoch N i Ritg i runter r i Ritg i rein rein i Ritgl i raus raus Vereinfacht werden hier Routinen als m gliche Ausg nge angenommen M
9. merkt die Bibliothek das und gibt die neuen Lichtverh ltnisse bekannt entweder mit einer Raumbeschreinung oder mit dem LibText Lage 10 der standardm ig sagt Es ist nun stockdunkel hier x Ein Nachteil der automatischen berpr fung ist dass es nicht sofort hell oder dunkel wird sondern erst am Ende des Zuges Man kann die Lichtverh ltnisse aber auch vorher berpr fen indem man die Routine Lichtverh ltnisse in seinem Code aufruft 101 7 Das Modell der Spielwelt x Die genauen Regeln zum Ermitteln der Lichtverh ltnisse sind wie in Inform Es ist hell wenn das Mutterobjekt des Spielers Licht bekommt Ein Objekt bekommt Licht wenn es das Attribut Licht hat eines einer direkten Tochterobjekte Licht spendet oder es lichtdurchl ssig ist und sein Mutterobjekt Licht bekommt Ein Objekt spendet Licht wenn es selbst das Attribut Licht hat wenn es lichtdurchl ssig ist und eines seiner Kinder Licht spendet oder wenn eines seiner Unterobjekte Licht spendet Lichtdurchl ssig sind nicht geschlossene Beh lter Ablagen und transparente Objekte Diese Verh ltnisse k nnen mit den Routinen spendet _Licht obj und bekommt_Licht obj berpr ft werden x Wer die Dunkelheit in seinem Spiel abschaffen will kann einfach die Routine bekommt_Licht ersetzen so dass sie immer wahr antwortet 7 11 Die Sinne Der wichtigste Sinn in einem Adventure ist wohl die Sicht Beschreibungen von R umen und Objek
10. x doppelt 3 x 6 x 2 doppelt x 1 1 x 26 1 Grundlagen Wenn der Funktionsaufruf alleine steht wie im Beispiel unserer ersten Routine Hallo wird der zur ckgegebene Wert nicht benutzt er wird quasi weggeworfen Eine besondere Form von antworte ist Stop das wahr zur ckgibt antworte ohne nachfolgenden Wert gibt falsch zur ck Eine besondere Art von Routinen sind Systemroutinen oder Systemfunktionen Sie k nnen wie Routinen aufgerufen werden m ssen aber nicht vom Programmierer definiert werden Sie sind bereits in ZETA vorhanden Die Anweisung Zufall x ist eine Systemroutine von ZETA die eine Zufallszahl von eins bis x erzeugt Zufall 6 simuliert also einen W rfel Anders als bei benutzerdefinierten Routinen wird bei Systemroutinen berpr ft ob die Anzahl der Argumente bei der bergabe stimmt und ob der R ckgabewert verwendet wird oder nicht Die folgenden Anweisungen erzeugen einen Fehler beim Kompilieren zufall 6 kein R ckgabewert x Zufallt kein Argument Eine Liste aller Systemfunktionen befindet sich in Anhang A x Zufallszahlen werden trotz ihres Namens nicht wirklich zuf llig sondern mit einem Algorithmus dem Zufallszahlengenerator bestimmt Die produzierte Zahlenfolge scheint zuf llig wiederholt sich aber wenn auch erst nach langer Zeit Die Zahlenfolge die erzeugt wird h ngt von ihrem Ausgangswert der so genannten Saat ab Wenn man Zufall mit einer negativen Zahl
11. Die Ausgabe von Text ist bis jetzt schon oft vorgekommen ohne dass sie erkl rt wurde Eine Anweisung die nur aus einem Text in Anf hrungszeichen besteht gibt diesen Text aus Einstmals vor vielen vielen Jahren lebte im Morgenland ein m chtiger K nig Er herrschte ber gro e L nder und wohnte in einem Schloss aus wei em Marmor der in der Sonne blitzte wie getriebenes Silber Der Text der in Anf hrungszeichen eingeschlossen ist Kann dabei ber mehrere Zeilen gehen Der Zeilenumbruch sowie alle Leerstellen die vor oder hinter dem eigentlichen Text stehen werden dabei nur zu einem Leerzeichen umgewandelt so dass die Anweisung oben schreibt Einstmals vor vielen vielen Jahren lebte im Morgenland ein m chtiger K nig Er herrschte ber gro e L nder und wohnte in einem Schloss aus wei em Marmor der in der Sonne blitzte wie getriebenes Silber Zeilenumbr che in Texten werden mit n geschrieben Abs tze werden durch eine Leerzeile im Text oder durch p gekennzeichnet Gruselett Der Fl gelflagel gaustert n durchs Wiruwaruwolz n die rote Fingur plaustert n und grausig gutzt der Golz Christian Morgenstern Hier wird nach jeder Zeile des Gedichts umgebrochen Da das letzte Zeichen auf der Zeile ein n ist wird hier kein Leerzeichen eingef gt Ein Absatz wird wenn nichts anderes angegeben wird durch eine Leerzeile vom n chsten getrennt und hat keinen Einzug Wenn man Anf hrungsstriche schr
12. Nicht besonders elegant vielleicht aber zumindest sprachlich korrekt Wenn der Raumname als Titel f r eine Raumbeschreibung oder die Statuszeile verwendet werden soll wird der 118 8 Beschreibungen Kontext aufk__Raumtitel gesetzt Damit k nnen dann flexible Ausgaberoutinen geschrieben werden Name wenn Kontext k__Raumtitel stop In einem immensen Kornfeld immens e Kornfeld Genus n 8 2 Listen von Objekten In Beschreibungen von R umen und des Inventars werden mehrere Objekte hintereinander als Satz aufgelistet Zum Schreiben der Liste gibt es ein Hilfsobjekt Liste dessen Name den momentanen Inhalt der Liste ausgibt wie zum Beispiel in der Eigenschaft Inhalt eines Beh lters In der Schubkarre siehst du einen Liste Oft ist der Inhalt der Liste bereits vorgegeben Der Autor kann aber auch selbst das Listenobjekt benutzen um eigene Listen zu erstellen Die Routine erstelle_Liste obj attr add erstellt eine Liste aller Tochterobjekte von obj die das Attribut attr haben Ist add gleich null wird eine neue Liste angelegt ansonsten wird die neue Liste einfach an die alte angeh ngt attr kann auch negativ sein dann werden alle Objekte ber cksichtigt die dieses Attribut nicht haben Ist attr null so wird alles in die Liste mit aufgenommen ungeachtet des Attributs Die Routine antwortet mit der Anzahl der neu zur Liste hinzugef gten Objekte Die Anzahl der Objekte in der Liste steht in
13. jenach leseArg 255 nehmen Stop Das geht nicht untersuchen sonst Stop Gro der selbst vist T MLCHT MLCHELO und die Bibliothek ruft sie folgenderma en auf schreibeArg 255 aBefehl a0bj vorher Auf diese Weise kann der Quelltext eines Adventures bersichtlich gestaltet werden Diese Vorgehensweise ist jedoch mit Vorsicht zu genie en Direkte Zugriffe auf Variablen bergen ein hohes Risiko Sie werden trotzdem erlaubt da sie erfahrenen Programmieren auch neue M glichkeiten er ffnen 130 11 Daten f r den Parser 11 1 Definition von Objektvokabular Die Eigenschaften Subst und Adj zum Definieren von Objektvokabular sind keine gew hnlichen Eigenschaften Sie verdienen daher eine Erkl rung Zun chst sind Subst und Adj keine Eigenschaften im Sinne einer Objekteigenschaft Sie sind vielmehr Schl sselw rter um das Vokabular das der Parser f r dieses Objekt versteht zu definieren Ein Ausdruck wie Hufeisen Subst 0 ist daher nicht g ltig und erzeugt eine Fehlermeldung Die Syntax f r die Angaben von Vokabeln bei Objekten ist ebenfalls von der f r andere Eigenschaften verschieden Es muss immer eine Vokabel in Hochkommas angegeben werden gefolgt von einem Konstanten Wert der diese Vokabel n her beschreibt bei Substantiven ist dies meist der Genus Diese Angaben stehen immer direkt zusammen Kommas trennen sie von weiteren Angaben Subst Substantiv Konstante Adj Ad
14. 1 Ineiner Schleife ber alle Objekte in der Windrose wird gepr ft ob der Ausgang in diese Richtung ein Objekt ist Variable sondieren falsch LibObjekt in ZetaLib Texte n lokal o 168 L sungen der Aufgaben gehen wenn n 1 antworte Du kannst nicht nach Objekt_ohne_Art a0bj gehen sondieren wahr o Tochter Windrose l sche_Liste solange o schreibeArg 255 0 wenn Datentyp aRaum Ausg nge o Objekt setze_auf_Liste o o Schwester o sondieren falsch wenn Liste Anzahl 0 stop Du kannst im Moment nirgendwohin gehen so wie s aussieht stop nur nach Objekt_ohne_Art Liste Routine stummer_Text x wenn sondieren antworte x Das Problem hierbei ist dass man beim Senden der Mitteilung Ausg nge nicht wei ob in der Routine Text ausgegeben wird Vor der Schleife wird daher die Variable sondieren gesetzt um anzuzeigen dass Ausgang nicht benutzt wird um tats chlich zu gehen sondern nur um zu sehen ob es berhaupt einen Ausgang in diese Richtung gibt Alle Textausgeban in Ausg nge au er die generellen Absagen unter nichts m ssen daher diese Variable pr fen Wenn die Antwort nur ein statischer Text ist Kann man die Routine stummer_Text verwenden Ausg nge Norden antworte Gang S den stop stummer_Text Der Weg in diese Richtung ist blockiert dort ist der Stollen eingest rzt 4 e5 _ Dazu
15. Alligatoren Schwimmen strengstens verboten Interessant ist das Kleingedruckte berlebende werden strafrechtlich zwerfolgt Ein Sonderfall des Lesens ist das nachschlagen von Stichw rtern in Lexika oder Fachb chern Das Nachschlagewerk ist a0b j Die Schwierigkeit hier ist a0b j2 eindeutig festzulegen denn es kann ja jedes beliebige Objekt dort stehen Es muss auch nicht unbedingt anwesend sein und der nachzuschlagende Begriff kann auch auf mehrere Objekte zutreffen Zum Ermitteln von Stichw rten gelten folgende Regeln Zu jedem Stichwort muss ein Objekt existieren das das Attribut Stichwort hat Dieses Objekt kann ein normales Objekt im Spiel sein muss es aber nicht 96 7 Das Modell der Spielwelt Aus den Objekten auf die die Eingabe zutrifft wird dann nach folgendem Schema ein Treffer ausgew hlt Ein Objekt das ein Stichwort ist bekommt vier Punkte momentan sichtbare Objekte zwei und Objekte die das Attribut bekannt haben bekommen einen Das Objekt mit der h chsten Punktzahl wird genommen Wenn es mehrere Objekte mit der selben Bestpunktzahl gibt so wird das erste stillschweigend ausgew hlt Wenn es das Objekt aus der Angabe nicht gibt so ist 40652 das Objekt unbekanntes_Objekt das in der Bibliothek definiert wird Das bedeutet dass in jedem Fall ein Objekt eindeutig gefunden wird und der Parser nie nachfragt x Ein Objekt ist bekannt wenn es einmal in einer Raumbeschreibung aufgetaucht ist oder wenn
16. cksichtigen x Genau wie die Richtungsangaben zu R umen sind Verbindungen Einbahnstra en x Eine Verbindung kann nat rlich alles m gliche sein eine Br cke etwa oder ein Pfad Verbindungen k nnen auch dazu verwendet werden generelle Konzepte der Verbindung wie zum Beispiel Nachbarr ume zu beschreiben e Aufgabe 5 Wie kann man eine T r erzeugen die auf beiden Seiten also in beiden R umen ist e Aufgabe 6 Wie k nnte man die Himmelsrichtungen in einem Spiel komplett abschaffen 86 7 Das Modell der Spielwelt Objekte die das Attribut schlie bar besitzen kann man ffnen und schlie en Eine T r w rde man also schlie bar machen wie im Beispiel oben Der Zustand des Objekts wird durch das Attribut geschlossen beschrieben das entweder gesetzt oder gel scht ist Es gibt kein Attribut offen Da der Normalzustand offen genauer gesagt nicht geschlossen ist kann man normalerweise durch eine Verbindung einfach hindurchgehen x Der Spieler kann Verbindungen nicht mitnehmen sie werden als fest betrachtet e Aufgabe 7 Programmiere eine Planke die der Spieler mitnehmen und als Verbindung zwischen zwei Seiten einer Schlucht benutzen kann Manche Objekte in Adventures sind das typischerweise T ren sind abschlie bar man kann sie aufschlie en und abschlie en wenn sie geschlossen sind Abgeschlossene Objekte haben dann zus tzlich das Attribut abgeschlossen sie lassen sich nicht ffnen Der passende Schl s
17. die den Wert einer Variable um eins erh hen oder vermindern Stehen diese Operatoren vor der Variable so wird der Wert erst ge ndert und dann gelesen stehen sie dahinter so wird der Wert erst gelesen und anschlie end modifiziert x 5 num x t num x 1 Grundlagen Dies schreibt 5 und 7 der Wert von x ist danach 7 Diese Operatoren sind etwas gew hnungsbed rftig und werden unter anderem in Sprachen wie C und Java benutzt Sie k nnen auch alleine in einer Anweisung stehen dann ist es egal ob der Operator vor oder nach einer Variable kommt x entspricht x x 1 Eine weitere Abk rzung betrifft das relative Ver ndern von Variablen H ufig tauchen Anweisungen wie diese auf x x 2 y 1 Hier wird die Variable x um den Ausdruck nach dem Pluszeichen erh ht Dies kann man kurz schreiben als x 2 y 1 Anstelle des kann hier auch ein anderer arithmetischer Operator stehen erlaubt sind und sowie einige bitweise Operatoren die im n chsten Absatz vorgestellt werden x Neben den arithmetischen Operatoren gibt es auch noch die so genannten bitweisen Operatoren Mit ihnen k nnen Bin rzahlen verkn pft werden dies geschieht stellenweise Eine Stelle einer Bin rzahl die eine der Ziffern 0 oder 1 ist hei t Bit die Zahlen in ZETA haben 16 Bits Man sagt ein Bit ist gesetzt wenn es den Wert 1 hat und es ist gel scht wenn es null ist Das bitweise Und amp verkn pft zwei Zahl
18. effektiv f r alle drei F lle x Das erscheint zwar vielleicht etwas umst ndlich dient aber dazu das Verhalten konsistent zu halten Nehmen wir einmal an hei e Kohlen liegen in einem Ofen und k nnen nur mit Asbesthandschuhen angefasst werden W rde man statt nehmen das brigens nie direkt vom Parser erzeugt werden kann den Befehl aufheben abfangen h tte man zwar nimm Kohle unterbunden nimm Kohle aus Ofen aber nicht Dasselbe gilt f r das Ablegen Wenn ein Klebestreifen sich nicht ablegen l sst weil er an der Hand festpappt unterbindet man mit hergeben lege Klebestreifen ab und lege Klebestreifen auf Tisch gleicherma en x Ein Schwachpunkt dieses Modells ist allerdings das R ume das Ablegen und Herausnehmen von gegenst nden nicht mit einem Pseudobefehl behandeln k nnen Hier muss 105 7 Das Modell der Spielwelt man die Vorreaktion des Raums bem hen Spieler ist kein Objekt sondern eine globale Variable die auf das jeweilige Spielerobjekt zeigt Dieses Objekt kann also w hrend des Spiels ver ndert werden wenn sich der Spieler zum Beispiel in jemand anderes verwandelt oder einfach vor bergehend den Part einer anderen Person bernimmt Die Routine Spielerwechsel obj b verwandelt den Spieler in obj dabei wird nicht nur die Variable Spieler ver ndert sondern auch aRaum und Sichtgrenze sowie die Schiebekulissen und die Lichtverh ltnisse ber cksichtigt Die Flagge b gibt an ob und in
19. falsch zur ckgibt um das Objekt zuzulassen oder wahr eine Fehlernummer oder eine Fehlermeldung um es auszuschlie en Wenn es nur ein Objekt in der Liste der m glichen Objekte gibt und ein Fehler auftritt so wird entweder die Fehlermeldung ausgegeben oder die Meldung mit der passenden Fehlernummer Die Variable PlLural_Modus ist gesetzt wenn berpr ft werden soll ob ein Objekt in einer Liste von Objekten mit alles eingeschlossen werden soll So ist nimm Nussbaum legal Dass der Baum nicht genommen wird wird in der Aktion des Befehls abgefangen Trotzdem soll bei nimm alles der Baum nicht ber cksichtigt werden Zwei Objekteigenschaften k nnen die berpr fung im Vorfeld beeinflussen Mit der Eigenschaft verbieten kann man wie in ung ltig einen wahren Wert zur ckgeben um 164 Anhang B berblick ber die Bibliothek das Objekt auszuschlie en Die Eigenschaft erlauben kann einen wahren Wert zur ckgeben um das Objekt einzuschlie en Routinen zur berpr fung der G ltigkeit sollten keinen Text ausgeben Disambiguisierung Wenn der Parser zwischen mehreren Objekten entscheiden muss werden alle nicht zugelassenen Objekte aus der Liste gestrichen Wenn genau ein Objekt brig bleibt so wird dieses Objekt genommen Wenn mehrere Objekte brig bleiben so wird der Eintrag Priorit t aufgerufen eine Routine die die Objekte auf einer Skala von null schlecht bis zehn gut bewertet So k nnen Obje
20. n aufruft so wird die Saat auf n gesetzt der R ckgabewert ist null Damit werden die Zufallszahlen vorhersehbar was beim Testen von Spielen n tzlich ist Wenn Zufall mehr als ein Argument hat so wird aus den Argumenten eines zuf llig ausgew hlt Zufall 1 1 3 5 gibt zu 50 Prozent 1 und zu je 25 Prozent 3 oder 5 zur ck 1 6 Bedingungen 1 Grundlagen Manche Anweisungen sollen nicht immer ausgef hrt werden sondern nur unter bestimmten Bedingungen Um dies zu steuern gibt es die wenn Anweisung Sie hat die Form wenn Bedingung Anweisung Die Anweisung wird nur ausgef hrt wenn die Bedingung wahr ist Ein Beispiel dazu wenn Punkte 100 Gewonnen n Wenn die Variable Punkte den Wert 100 hat wird Gewonnen ausgegeben und nur dann Wenn Punkte einen anderen Wert hat wird die Anweisung zum Ausgeben des Texts einfach bersprungen Der Operator ist ein Vergleichsoperator und ist nicht mit dem Zuweisungsoperator zu verwechseln Code wie wenn Punkte 100 Gewonnen n ist zwar syntaktisch korrekt macht aber etwas anderes Der Variable Punkte wird der Wert 100 zugewiesen und der Text wird ausgegeben da ZETA diese Zuweisung als wahre Bedingung betrachtet Dies kann das gewollte Verhalten sein und deshalb erlaubt es ZETA auch aber in diesem Fall ist es wahrscheinlicher dass es einfach ein Tippfehler ist und ZETA gibt eine Warnung aus Der Operator ist nur einer von sechs arithmetischen Op
21. nfzehn Argumente und lokale Variablen definiert werden 1 Grundlagen Auch wenn eine Variable bergeben wird bleiben die Variablen in der aufgerufenen Routine immer lokal Routine doppelt x x xX 2 num x An Hauptprogramm lokal a a 2 doppelt a num a Hier ist der Wert der Variable a nach Aufruf von doppelt immer noch 2 nicht etwa 4 Routinen k nnen nicht nur Werte empfangen sie geben immer einen Wert an die aufrufende Routine zur ck Eine Routine ist also mehr als nur ein Platzhalter f r h ufiger wiederkehrende Anweisungen Sie empf ngt einige Argumente macht dann etwas z B gibt sie Text aus oder f hrt Berechnungen durch und schlie lich bergibt sie einen Wert den R ckgabewert an die Routine r aus der sie aufgerufen wurde sie antwortet Wie den Wert erzeugt interessiert r genauso wenig wie f sich darum k mmert was r mit dem zur ckgegebenen Wert macht Wenn nichts anderes angegeben wird ist dieser Wert null oder falsch Die beiden Systemkonstanten falsch und wahr haben die Werte 0 und 1 Mit der Anweisung antworte wird die Routine beendet und der angegebene Wert wird als Antwort des Aufrufs zur ckgegeben Routine doppelt x antworte x 2 Hauptprogramm lokal a a 2 num doppelt a Mit der num Anweisung wird nun der R ckgabewert der Routine doppelt ausgegeben in diesem Fall 4 Der R ckgabewert der Routine wird dort eingesetzt wo der Aufruf steht
22. welchem Modus eine Beschreibung nach dem Wechsel ausgegeben wird genau wie bei gehe_zu x Der momentane Spieler ist immer verborgen so dass f r ihn keine Sonderregelungen getroffen werden m ssen Er taucht nicht in Raumbeschreibungen auf Das alte Spielerobjekt bleibt im Spiel und ist nicht mehr verborgen Wenn das nicht so sein soll muss es explizit aus dem Objektbaum entfernt werden x Mit Formen von ich und in der Regel auch du bezeichnet man immer den Spieler so dass ein Objekt das den Spieler repr sentiert nicht unbedingt ein eigenes Vokabular haben muss Ungeachtet der Eigenschaft Name des Spielers ist die Ausgabe f r das Spielerobjekt immer eine Form von du oder genauer gesagt das was die Routine du_Name die nat rlich ersetzt werden kann ausgibt siehe Abschnitt 8 1 x Die Bibliothek teilt dem Spieler nie mit welches Objekt gerade der Spieler ist man kann Verwandlungen also auch unbemerkt vornehmen Wenn die Metamorphose allerdings offensichtlich ist sollte man einen Hinweis in die Statuszeile oder die Raumbeschreibung schreiben x Das vorgeferitgte Spielerobjekt hei t Protagonist Es hat normalerweise keine besonderen Eigenschaften au er der Beschreibung die mit dem Lib Text Nummer acht f r untersuchen ge ndert werden kann Es besitzt allerdings die wichtigsten Eigenschaften die jedoch leer definiert sind Auf diese Weise kann man dem Protagonisten nachtr glich Eigenschaften wie Anweisungen oder
23. wird der Befehl ansprechen mit dem Akteur als a0b 7 ausgef hrt Dies bietet die M glichkeit eine allgemeine Form der Absage zu implementieren die Einzelheiten der Anweisung sind dem Autor hier nicht mehr zug nglich da die Variablen Befehl a0bj und a0bj2 mit den Werten Ansprechen Akteur und nichts berschrieben wurden Der Akteur wechselt beim ansprechen wieder auf den Spieler Wenn der Befehl ansprechen nicht abgefangen wird ist die lapidare Antwort der Bibliothek Der Kapit n hat Besseres zu tun x ansprechen ist ein Pseudo Befehl es gibt kein Satzmuster das ihn erzeugen k nnte x Der Akteur ist nat rlich gleich dem Spieler wenn er nicht explizit angegeben wird Du nimm die Axt ist also gleichbedeutend mit nimm die Axt x Formen von du oder ihr oder Sie beziehen sich immer auf den Akteur Formen von ich auf den Spieler Bei Schau dich an ist a0b j der Spieler bei Annika schau dich an der Akteur Annika x Ein Objekt das die Eigenschaft Anweisungen besitzt muss nicht unbedingt eine Person sein Jedes beliebige Objekt kann theoretisch angesprochen werden x Man kann verschiedenen Personen verschiedene Verben zuordnen wenn man will Dies ist sinnvoll f r Situationen in denen Anweisungen nicht an Menschen sondern an Maschinen gegeben werden Gamma Schutzwall ein oder wenn f r manche Menschen andere Regeln wie zum Beispiel andere Sprachen gelten So k nnen Ve
24. Beispiel im aufs oder zur Wenn man diese Verschmelzungen ber cksichtigen m chte kann man die Routine Pr p_das_Objekt p o k benutzen Es wird die Pr position p danach das Objekt o im Kasus k mit bestimmtem Artikel ausgegeben dabei werden eventuelle Verschmelzungen ber cksichtigt Auch hier gibt es wieder Abk rzungen so dass Pr p_den in a0bj Pr p_dem in a0bj nun ein sprachlich fl ssiges ins Meer oder im Meer ausgeben In den meisten F llen bleiben Pr position und Artikel aber getrennt in den Ozean I Wichtig ist hier dass die Pr positionen als Vokabeln zwischen Hochkommas nicht als Texte angegeben werden Zum Ermitteln der Verschmelzungen werden die Synonymdefinitionen des Parsers verwendet Ein Sonderfall sind die Namen von R umen In Raumbeschreibungen oder in der Statuszeile werden sie w rtlich ausgegeben etwa In einem Kornfeld oder Billardzimmer Dort wird man diese Namen auch am h ufigsten lesen Da R ume wie alle Objekte Vokabular haben k nnen muss es auch Ausgaberegeln f r die Raumnamen in verschiedenen F llen geben Wenn ein Raum die Eigenschaft Genus hat dann wird der Raumname genau wie der Name eines Objekts angegeben Das hei t Adjektivendungen m ssen mit e markiert werden Wenn kein Genus definiert ist wird einfach dieser Ort benutzt so dass die Antwort auf nimm Kornfeld w re Du kanst diesen Ort nicht nehmen
25. Besonderheiten zur Verf gung Wenn e den Wert falsch hat schlug das Speichern oder Laden des Spielstands fehl Bei erfolgreichem Speichern wird wahr zur ckgegeben bei erfolgreichem Laden ist der R ckgabewert zwei und das Programm wird an der Stelle nach dem entsprechenden Speicherbefehl fortgesetzt In der Praxis hei t das dass der R ckgabewert des Ladens egal ist denn alles was nach lade steht wird nur ausgef hrt wenn das Wiederherstellen des Zustands nicht geklappt hat speichere hat hingegen drei m gliche R ckgabewerte Null f r einen Fehler beim Speichern eins f r erfolgreiches Speichern und zwei f r erfolgreiches Laden eines zuvor gespeicherten Zustands Die Frage nach einem Dateinamen wird immer vom Interpreter gestellt und kann ein einfacher Prompt sein oder ein Dialog Der Autor hat darauf keinen Einfluss Anstatt den momentanen Zustand der Z Maschine auf eine Datei zu schreiben kann man ihn im Speicher des Rechners ablegen und ihn dann sp ter wieder wiederherstellen Dies wird von der Adventure Bibliothek gemacht um die Daten f r das R ckg ngigmachen von Z gen zwischenzuspeichern Die Funktionen hei en e speicherezug e ladezug Wenn ein Interpreter kein Zwischenspeichern von Spielst nden im Arbeitsspeicher erm glicht ist das Resultat von speicherezZug gleich 1 Es ist nicht erlaubt einen Zustand mit ladeZug vom Speicher zu lesen wenn zuvor kein Zustand mit schreibeZug abgelegt wurde Es bes
26. Die komplizierte Methode ist die Routine Statuszeile zu ersetzen und eine eigene zu schreiben in der dann von Hand alle Texte in der Statuszeile positioniert werden Dabei muss beachet werden dass das obere Fenster im Interpreter nicht automatisch invers dargestellt ist Wer eine eigene Statuszeile programmieren will findet das n tige R stzeug dazu in Abschnitt 3 4 112 7 Das Modell der Spielwelt e Aufgabe 16 Schreibe eine Liste der m glichen Ausg nge rechts oben in die Statuszeile 113 8 Beschreibungen 8 1 Namen von Objekten und R umen Jedes Objekt das im Spiel auftaucht muss einen Namen besitzen der dann in den vom Parser generierten Meldungen zum Beispiel Du siehst nichts Besonderes an dem silbernen Essl ffel eingesetzt wird Um den Namen des Objekts korrekt ausgeben zu k nnen muss man die Eigenschaften Name und Genus definieren Der Name ist ein Text oder eine Routine um Text auszugeben Der Genus kennzeichnet das grammatische Geschlecht das zum Namen passt Maskulinum m nnlich Femininum weiblich Neutrum s chlich Plural Mehrzahl bb m3 Mit diesen beiden Informationen kann die Bibliothek das Objekt nun immer mit dem richtigen Artikel ausgeben x Da Artikel und Endungen f r alle in der Mehrzahl stehenden Substantive die N gel gleich sind muss man nicht zwischen Plural m nnlich Plural weiblich und Plural s chlich unterscheiden Im Deutschen werden Adjektive und auch Substantive
27. Kommentar 1 2 Kommentar 1 2 zum Trennen von Anweisungen 1 2 Zuweisungsoperator 1 3 Vergleichsoperator 1 6 Feldindex 1 8 Anf hrungszeichen im Flie text 1 9 n Zeilenumbruch im Flie text 1 9 p Absatz im Flie text 1 9 a Option 4 3 abbrechen Anweisung 1 7 Abbruchkriterium 1 7 abk Steueranweisung 4 3 Abs tze mit p 1 9 additive Vererbung 2 5 aktivesFenster Systemfunktion Anhang A Akzente 1 9 alias Steueranweisung 4 3 Anf hrungszeichen 1 3 Anf hrungszeichen im Flie text 1 9 antworte Anweisung 1 5 Anweisungsblock 1 6 Argumente 1 5 Argumente Systemfunktion Anhang A 183 Index Attribut Direktive 2 3 Attribute 2 3 Anhang A Aufrufen von Routinen 1 2 Aufteilen von Text 3 1 Ausdr cke Anhang A Ausf hrungsblock 1 2 Ausgabekanal Systemfunktion Anhang A Bedingtes Kompilieren 4 3 Bedingungen 1 6 Anhang A beerbt Bedingung 2 5 beerbt bei der Objektdefinition 2 5 Bereich von Zahlen g ltiger 1 3 Bezeichner 1 3 Anhang A Bin rzahlen 1 3 bis Anweisung 1 7 Bit 1 4 bitweise Operatoren exklusiv Oder 1 4 amp Und 1 4 lt lt Verschiebung nach links 1 4 gt gt Verschiebung nach rechts 1 4 Oder 1 4 Nicht 1 4 blinddef Steueranweisung 4 3 bsBreite Systemfunktion Anhang A bsH he Systemfunktion Anhang A Char Systemfunktion Anhang A Codeblock 1 6 CursorPos Systemfunktion Anhang A CursorX Systemfunktion Anhang A C
28. Objekt Objektk rper Dabei ist jede der Angaben optional Pfeile ist eine beliebige Folge von Pfeilen gt die die anf ngliche Lage des Objekts im Baum darstellen Ein Objekt das Pfeile hat ist ein Kind des 147 Anhang A Spezifikation der Sprache zuletzt mit einem Pfeil weniger definierten Objekts Eine alternative M glichkeit die Lage im Baum anzugeben ist das Mutterobjekt direkt nach in anzugeben Objekte werden von zwei ab laufend nummeriert Auf diese Weise sind die Konstanten falsch wahr und alle Objektbezeichner verschieden Eigenschaften und Attribute Der Objektk rper kann folgende optionalen Angaben enthalten beerbt Klassenliste ist Artributliste Eigenschaft Werteliste Es k nnen beliebig viele Eigenschaften angegeben werden zu jeder Eigenschaft kann eine Liste mit einem oder meheren Eintr gen angegeben werden Formal gibt es zwei Arten von Eigenschaften Gemeinsame Eigenschaften sind Eigenschaften die dem Format der Objekte in der Z Maschine entsprechen Sie m ssen mit Eigenschaft Name oder Name Wert definiert werden und k nnen einen Default Wert besitzen der Objekten zugeordent ist die diese Eigenschaft nicht explizit definiert haben Es gibt maximal 63 gemeinsame Eigenschaften Die Werteliste kann bei einer gemeinsamen Eigenschaft je Objekt bis zu 32 Eintr ge haben Individuelle Eigenschaften sind eine zus tzliche Datenstruktur von ZETA Diese Eigenschaften m ssen nic
29. Sichtgrenze anpasst und einige andere Dinge berpr ft zum Beispiel ob es am neuen Ort dunkel ist oder nicht Die Flagge b gibt an ob nach dem Ortswechsel eine Raumbeschreibung ausgegeben werden soll zwei unterdr ckt die Raumbeschreibung eins schreibt eine ausf hrliche Beschreibung so als ob man Lage ausf hrt und null schreibt die normale Raumbeschreibung wie sie beim Betreten des Raums ausgegeben w rde das hei t je nach Modus und ja nachdem ob der Spieler den Raum bereits besucht hat wird eine knappe oder eine ausf hrliche Bescheribung geschrieben In der Regel ist der Zielort obj ein Raum er kann aber auch ein betretbares Objekt sein das sich in einem Raum oder in anderen betretbaren Objekt befindet Dass obj ein g ltiges Objekt ist muss der Autor sicherstellen Wenn obj ein Sitzm bel ist sollte die Sitzposition angepasst werden x Die Routine kann ein drittes Argument haben das ein Fahrzeug oder ein Reittier bezeichnet auf oder in dem der Spieler sitzt zum Beispiel gehe_zu Basar falsch fliegender_Teppich 104 7 Das Modell der Spielwelt In diesem Fall wird nicht der Spieler sondern das Fahrzeug bewegt und der Spieler nat rlich mit ihm Danach werden die Variablen angepasst wie normal Der Spieler hat nat rlich nicht nur ein Mutterobjekt sondern auch Tochterobjekte sein Inventar Genau wie bei Beh ltern und Ablagen beschreibt seine Eigenschaft Kapazit t die Anzahl der Objekte die er tragen ka
30. Spiel gedacht sind geben zeigen fragen erz hlen angreifen und sogar k ssen Diese Befehle machen 97 7 Das Modell der Spielwelt aber nichts wenn man nichts ausdr cklich in Vorher definiert Die Person lehnt Gaben h flich ab zeigt sich nicht beeindruckt von Gezeigtem und wei keine Antwort auf konkrete Fragen Auf einen Angriff schlie lich hat die Bibliothek die belehrende Antwort Gewalt ist keine L sung Eine Person kann auch andere Gegenst nde bei sich tragen die dann als Tochterobjekte der Person definiert werden Wenn die Person das Attribut transparent hat sind diese Objekte sichtbar sie werden dann bei der Beschreibung aufgez hlt Eine Person kann auch die Eigenschaft Inhalt haben mit der diese Beschreibung individuell angepasst werden kann Tochterobjekte einer Person die nicht transparent ist bewegen sich mit der Person bleiben dem Spieler aber verborgen x Personen und Tiere halten sich nicht unbedingt immer am selben Ort auf Um sie im Spiel herumwandern zu lassen sei es entlang einer vorgegebenen Route oder auf mehr oder weniger zuf llige Weise benutzt man am besten einen so genannten D mon Wie das geht steht in Abschnitt 7 13 7 9 Kommunikation Zur Kommunikation mit anderen gibt es verschiedene Ans tze Ein einfaches System ist andere nach bestimmten Dingen zu fragen oder ihnen Sachen zu erz hlen Die Stichw rter f r fragen und erz hlen werden genauso ermittelt wie beim Nachschlagen O
31. Spieler sagt gehe aufs Sofa wird dies als der erste Eintrag von Sitzpositionen also als liegen interpretiert Man kann auf dem Sofa nicht stehen Die momentan eingenommene Sitzposition wird in der globalen Variable Sitzposition abgelegt x Mitden Routinen v_sitz v_setz undv_sitzt sowie in_oder_auf obj kann man die Innenansicht anpassen wenn man will Die standardm ig verwendete Beschreibung ist Du v_sitzt _ in_oder_auf x1 _ einem x1l Ein Fahrzeug ist ein Objekt das sich mit dem Spieler von einem Ort zum anderen bewegt wenn sich der Spieler darin befindet Fahrzeuge bekommen neben dem Attribut betretbar 92 7 Das Modell der Spielwelt das Attribut Fahrzeug Objekt gt Skateboard Name Skateboard Genus n Adj grell bunt grellbunt Subst skateboard n board n Beschreibung Das Skateboard hast du von deinem Bruder im Austausch f r 150 Plastiksoldaten der Roten Armee bekommen Die einst grellen Farben sind mittlerweile durch steten Gebrauch etwas ert glicher geworden in einer gezackten Schrift steht auf dem Board Skate or Die Immer Dein Skateboard steht hier bereit dich in einem wilden Teufelsritt durch das Haus zu bef rdern Sitzpositionen stehen sitzen Vorher fahren wenn Sitzposition stehen stop Dazu musst du dich auf das Board stellen lesen stop Skate or Die Yeah ist Fahrzeug betretbar Ablage W
32. Systemfunktionen und Besonderheiten h b bsH he bsBreite Wenn das Statusfenster aktiv ist kann man die Position an der als n chstes geschrieben werden soll den Cursor ndern mit der Systemfunktion cursorPos x y Die obere linke Ecke des Statusfensters ist 1 1 die untere rechte Ecke hat die Koordinaten bsBreite Z Mit den Funktionen x cursorX y cursorY kann man die momentane Position des Cursors abfragen Schlie lich kann man mit l scheFenster F den Inhalt des Fensters F l schen Wenn F 1 ist wird der gesamte Bildschirm gel scht das Statusfenster wird ausgeblendet und der Cursor im Textfenster wird in die obere linke Ecke gesetzt Dies ist der Zustand in dem sich der Bildschirm zu Beginn des Spiels befindet Der Interpreter bricht immer ganze W rter um wenn er Text ausgibt Auf diese Weise ist der Text gut zu lesen Gerade im Statusfenster ist es aber manchmal praktisch diese Art der Texttrennung aufzuheben und Text immer am rechten Bildschirmrand umzubrechen Mit der Funktion Wortumbruch Flagge kann man das Umbrechen ganzer W rter daher f r das momentan aktive Fenster ein Flagge 0 und ausschalten Flagge 1 3 5 Laden und Speichern Der Zustand der Z Maschine ndert sich st ndig Man kann ihn auf eine externe Datei schreiben um ihn sp ter wieder einlesen zu k nnen Dazu stehen in ZETA die Funktionen e speichere e lade 53 3 Systemfunktionen und
33. Vorher geben Nat rlich kann man dieses Objekt auch ersetzen 106 7 Das Modell der Spielwelt 7 13 Zeitabh ngige Vorg nge Viele Dinge im Spiel geschehen nicht als unmittelbare Reaktion auf eine konkrete Handlung des Spielers sie laufen einfach unabh ngig im Hintergrund ab Um solche Ereignisse zu programmieren gibt es drei hnliche in Details aber unterschiedliche Konzepte D monen Z nder und Jede_Runde Diesen Konzepten ist gemeinsam dass sie zu einem Objekt geh ren und am Ende jeden Zuges ausgef hrt werden nachdem der Spieler seine Handlung ausgef hrt hat und unabh ngig davon ob diese ein Erfolg war Die Eigenschaft D mon kann eine Routine enthalten die am Ende des Zuges ausgef hrt wird wenn dieser D mon aktiv ist Man kann D monen mit D mon_An obj aktivieren und mit D mon_Aus obj deaktivieren Mit der Routine D mon_aktiv obj kann man feststellen ob der D mon eines Objekts gerade aktiv ist Wenn man aktive D monen ein oder inaktive ausschaltet passiert nichts Ein Z nder z hlt einmal aktiviert eine bestimmte Anzahl von Z gen herunter bevor er ebenfalls am Ende eines Zuges ein Ereignis ausl st das in der Eigenschaft Z ndung des Objekts programmiert ist Um den Z nder zu aktivieren muss man zus tzlich zum betreffenden Objekt den Z ndzeitpunkt angeben setze_Z nder obj Z ndzeit Die Z ndzeit ist die Anzahl der Z ge in der das Eregnis obj Z ndung passiert Nach jedem Zug
34. alpha nichts Datentyp Ding beta Textstring Datentyp Ding gamma Routine Datentyp Ding delta Objekt Datentyp Ding epsilon nichts Datentyp Ding Objekt Ding selbst ist nat rlich ein Objekt I Die Funktion Datentyp unterscheidet nur die vier Hauptdatentypen und bezeichent alles andere als nichts oder null Daher ist etwas Vorsicht geboten zum Beispiel kann folgendes gelten Datentyp 3 nichts Datentyp 3 Objekt Dies ist so wenn es ein Objekt mit der Nummer drei gibt ZETA kann nicht zwischen der Zahl drei und dem Objekt drei unterscheiden Die Funktion Datentyp schaut also nur ob der Inhalt einer Variable im Bereich der Objekte Klassen Routinen oder Strings liegt und einer dieser Datentypen sein k nnte 2 7 Mitteilungen an Objekte Objekte k nnen miteinander kommunizieren indem sie sich so genannte Mitteilungen engl messages senden Eine Mitteilung hat einen Absender und einen Empf nger Au erdem kann sie wie bei Routinen Argumente bermitteln und eine Antwort zur ckbekommen Daher sieht die Syntax f r eine Mitteilung auch hnlich aus wie bei Routinen x Computer berechne 2 Nummer 43 2 Objekte und Klassen sendet die Mitteilung berechne an den Computer mit den Argumenten 2 und Nummer und speichert die Antwort in der Variablen x Die runden Klammern m ssen angegeben werden auch wenn keine Argumente bergeben werden Ohne Klammern betrachtet Zeta den Ausd
35. besitzt diese Eigenschaft aufgerufen Das kann ein Text sein in der Regel ist es aber eine Routine Zusatzinfo jenach selbst F llstand 2 voll 1 halbvoll sonst leer Zus tzlich dazu wird die Zusatzinfo der Lib Objekte aufgerufen um allgemein g ltige Regeln f r diese zus tzlichen Informationen schreiben zu k nnen Dann wird das momentan betrachtete Objekt als Argument bergeben Zusatzinfo lokal o wenn o ist Lichtquelle stop Licht spendend wenn o ist schaltbar wenn o ist eingeschaltet stop eingeschaltet stop ausgeschaltet wenn o ist schlie bar wenn o ist abgeschlossen stop abgeschlossen wenn o ist geschlossen stop geschlossen stop offen 120 8 Beschreibungen x Das geschieht nur f r Objekte deren Zusatzinfo keinen wahren Wert zur ckgegeben hat so dass diese Eigenschaft bei Objekten auch benutzt werden kann wenn die allgemeinen Regeln nicht zutreffen sollen x Die Flagge 1__In o ist sowohl beim Inventar als auch bei Raumbeschreibungen und Inhaltslisten von R umen Ablagen und Beh ltern gesetzt x W hrend des Schreibens von Inventarlisten ist der Kontext k__Inventar beim Schreiben von Inhaltslistenk__Inhalt Innerhalb einer Liste kann man Objekte gruppieren Um hnliche Objekte immer nebeneinander stehen zu lassen kann man ihnen die Eigenschaft Listengruppe geben Alle Objekte die dieselbe Listengruppe haben werden
36. betreten erlaubt das Bewegen zu benachbarten R umen wenn diese bekannt sind Raumbeschreibungen Je nachdem ob ein Raum besucht worden ist oder nicht in welchem Modus knapp normal ausf hrlich sich der Spieler befindet und welcher Raumbeschreibungsstil gew nscht ist wird zun chst der Name des Raums eventuell gefolgt von einem Tochterobjekt auf dem sich der Spieler befindet auf dem Thron ausgegeben danach folgt die Beschreibung des Raums Es folgt eine Liste der Gegenst nde im Raum die weder zur Klasse Deko geh ren noch das Attribut verborgen haben Zun chst werden alle Objekte die die Eigenschaft Immer 157 Anhang B berblick ber die Bibliothek haben gelistet Der Text aus dieser Eigenschaft wird ausgegeben Danach werden alle nicht bereits erw hnten Objekte mit der Eigenschaft Erst ausgegeben Jedes Objekt bekommt einen eigenen Absatz eventuelle Inhaltsangaben werden angeh ngt Danach wird die Eigenschaft Inhalt des Raums aufgerufen die alle nicht bereits erw hnten Objekte in eine Liste packt Die globale Variable au erdem ist wahr oder falsch jenachdem ob vorher bereits etwas ausgegeben wurde Wenn es keine weiteren Objekte gibt wird die Eigenschaft kein_Inhalt aufgerufen Wenn bislang nichts ausgegeben wurde und es weitere Objekte gibt wird die Standardmeldung Du siehst hier Au erdem siehst du hier ausgegeben Inventar Beschreibungen von Gegenst nden Gegenst nde werden mit ih
37. dem Boot nur auf dem Wasser fahren kann 94 7 Das Modell der Spielwelt 75 Kleidung Objekte die der Spieler an und ausziehen kann bekommen das Attribut Kleidung Mit den Befehlen anziehen und ausziehen kann der Spieler diese Kleidung dann anlegen Am K rper getragene Kleidung ist genau wie die anderen Bsitzt mer des Spielers eine Tochter des Objekts Spieler Um dies zu unterscheiden bekommen Kleidungsst cke das Attribut angezogen wenn sie getragen werden Dieses Attribut hat nur eine Bedeutung wenn dss betreffende Objekt beim Spieler ist und sollte auch nur in diesem Zusammenhang verwendet werden x Nat rlich laufen die wenigsten Spieler nackt herum eine Ausnahme ist hier Frank Borgers Eden Es wird vielmehr angenommen dass der Spieler ihm angemessene Kleidung tr gt und sich das An und Ausziehen nur auf besondere Kleidungsst cke bezieht wie Raumanz ge Schutzhelme oder leisetretende schwarze Schuhe mit Kreppsohlen 7 6 Objekte zum Ein und Ausschalten Ein Objekt das das Attribut schaltbar besitzt l sst sich mit den Befehlen einschalten und ausschalten in einen der beiden Zust nde ein und aus bringen Diese Zust nde werden durch das Setzen oder L schen des Attributs eingeschaltet beschrieben Ein Objekt ist also ausgeschaltet wenn es schaltbar aber nicht eingeschaltet ist Solche Objekte k nnen Radios Kaffeemaschinen oder Taschenlampen sein Auch eine Fackel w re ein schaltbares Objekt obwohl m
38. die Ausf hrung der vom Spieler eingegebenen Befehle zu gruppieren um sie einer Eingabesyntax zuordnen zu k nnen Sie werden mit der Direktive Befehl Bezeichner definiert innerhalb der geschweiften Klammern stehen so genannte Befehlseintr ge die hnlich wie Eigenschaften von Objekten angegeben werden Bevor man einen Befehl definieren kann m ssen diese Eintr ge mit Befehlseintrag Eintrag deklariert werden Dies passiert normalerweise in der Bibliothek und der Autor eines Spiels muss sich keine Gedanken dar ber machen Das Konzept des Befehls in ZETA ist das ein stark vereinfachtes Objekts Ein Befehl hat Eintr ge so wie ein Objekt Eigenschaften hat Diese Eintr ge k nnen aber nur je einen Wert enthalten Listen sind nicht m glich Ausserdem hat ein Befehl keine Position im Objektbaum und keine Attribute Das erste Wort in der Befehlsliste gibt die Anzahl der Befehle an Es folgt ein Wort pro Befehl das die Adresse seiner Eintragsliste enth lt Die Eintragsliste eines Befehls sieht folgenderma en aus Sie beginnt mit einem Byte das eine Null enth lt Danach folgen die angegebenen Eintr ge und zwar in absteigender Reihenfolge ihrer internen IDs Pro Eintrag werden drei Bytes angegeben Das erste enth lt die ID des 133 11 Daten f r den Parser Eintrags plus 64 Die n chsten beiden Bytes enthalten den Wert des Eintrags Diese Liste wird abgeschlossen wenn das erste dieser Bytes null ist Dieses Format
39. die Objekte darin nicht sichtbar Genau wie bei den Verbindungen werden Beh lter die nicht geschlossen sind als offen betrachtet Um sie ffnen und schlie en zu k nnen muss man sie schlie bar machen und nat rlich k nnen Beh lter auch abschlie bar sein Beh lter k nnen auch das Attribut transparent besitzen dann kann man ihren Inhalt immer sehen Wenn der Beh lter geschlossen ist sind die Objekte darin allerdings f r den Spieler nicht erreichbar Das Attribut transparent hat f r Ablagen keine Bedeutung Das Konzept der Beh lter und Ablagen eignet sich vor allem zum Verstauen beweglicher Objekte der Inhalt der Ablagen und Beh lter ndert sich in der Regel Ein Objekt kann aber auch Unterobjekte haben die getrennt vom Hauptobjekt betrachtet werden die aber fest mit diesem verbunden sind wie zum Beispiel Kn pfe an einem Radio oder Anker und Segel eines Modellschiffs 89 7 Das Modell der Spielwelt Die Unterobjekte eines Objekts werden einfach in dessen Eigenschaft Unterobjekte als Liste angegeben Sie befinden sich au erhalb des Objektbaums und haben kein Mutterobjekt Immer wenn ein Objekt sichtbar ist sind auch dessen Unterobjekte sichtbar x Auf diese Weise kann man auch Objekte definieren die gleichzeitig Beh lter und Ablagen sind Hier zum Beispiel eine Waschmaschine Die W sche kommt in die Trommel andere Gegenst nde k nnen oben auf die Maschine gelegt werden Objekt gt Waschmaschine Name Was
40. eine nicht definierte Position und korrumpiert sehr wahrscheinlich die Spieldaten Es ist die Aufgabe des Spielers sicherzustellen dass so etwas nicht passiert Will man im Laufe des Spiels Daten zu einem Eigenschaftsfeld hinzuf gen so muss man bei der Definition Platzhalter einsetzen die man dann sp ter berschreiben kann Vokabular m hre karotte mohrr be 1 Piee Elze 1 1 1 1 Manche Eigenschaften werden erst w hrend des Spiels belegt und bestehen zu Beginn nur aus Platzhaltern kode Dr Dr DE Or 0 Dir DD 70 Das ist un bersichtlich daher kann man hier eine abk rzende Schreibweise verwenden bei der die Anzahl der Eintr ge hnlich wie bei der Definition von Feldern in eckigen Klammern angegeben wird Code 12 38 2 Objekte und Klassen x Die Felder von Eigenschaften haben immer 16 Bit Eintr ge und es k nnen maximal 32 Eintr ge pro Eigenschaft definiert werden Manchmal m chte man aber nur Bytes abspeichern zum Beispiel bei Zeichenketten Dies kann man mit dem Operator gt machen dann hat man 64 Bytes zur Verf gung Code g 100 a n 100 y m 100 tet 4 2100 0 U 0 03 Obj Code gt 0 g Obj Code gt 1 a Obj Code gt 2 n Obj Code gt 15 0 x Mit dem Operator amp kann man eine Eigenschaft eines Objektes in ein Feld umwandeln Das ist in den meisten F llen redundant obj p 0 und obj amp p 0 bewirken dasselbe Wenn man das Feld jedoch einer Vari
41. ermitteln oder um Texte vor der Ausgabe zu formatieren I Hierbei muss man aufpassen dass das Feld f genug Eintr ge zur Verf gung hat um den Text aufzumehmen Wenn die Textumleitung nicht rechtzeitig ausgeschaltet wird l uft das Feld ber und korrumpiert wahrscheinlich andere Daten 3 3 Schrift und Farbe Auf manchen Interpretern kann Schrift in verschiedenen Schriftstilen und farben angezeigt werden Mit Schriftstil Stil kann man den nachfolgenden Text mit einer der folgenden Textauszeichnungen versehen 50 3 Systemfunktionen und Besonderheiten 0 Normale Textschrift kursiv kursive oder schr ggestellte Schrift fett Fettdruck invers Vorder und Hintergrundfarbe vertauscht monospace diktengleiche Schreibmaschinenschrift Diese Schriftstile k nnen auf manchen Interpretern z B Frotz kombiniert verwendet werden indem man die Funktion Schriftstil mehrmals aufruft z B Schriftstil Monospace Schriftstil invers Betreten n streng n verboten u Schriftstil 0 Mit Schriftstil 0 setzt man den Stil immer auf die normale Textschrift zur ck Die Backslashs am Anfang der zweiten und dritten Textzeile denen ein Leerzeichen folgt verhindern dass der white space bis an die eigentlichen W rter wie blich ignoriert wird damit das Layout des Schilds nicht zerst rt wird Diese Kombination wird nicht von jedem Interpreter verstanden und nicht jeder Interpreter verf gt ber verschiedene Schrifta
42. ersten beiden Bytes enthalten die Adresse der Vokabel wenn das Wort im W rterbuch des Spiels steht oder null wenn das Wort nicht bekannt ist Das dritte Byte gibt die Position des ersten Zeichens des Worts in Zeile an das vierte Byte ist die L nge des Worts Einige Sonderzeichen wie das Komma werden als einzelnes Wort betrachtet Wenn man die W rter von eins bis max durchnummeriert f ngt jeder Vier Byte Block bei Wort gt n 4 2 bzw bei Wort gt n 2 1 an Die oben stehende Belegung von Zeile w rde nach dem Splitten folgende Eintr ge in Wort ergeben Wort gt 0 max Wort gt l wort gt 2 2 karl Wort gt 4 2 Wort gt 5 Wwort gt 6 2 Wort gt 8 9 wort gt 9 1 wort gt 10 2 n Wwort gt 12 8 Wort gt 13 1 Hier ist zu beachten dass in Wort lange und kurze Eintr ge gemischt auftreten Deshalb benutzt man auch besser die Operatoren gt und gt anstatt der eckigen Klammern W hrend des Kompilierens legt ZETA ein W rterbuch an in das alle Vokablen die im Laufe des Spiels zwischen Hochkommas definiert werden abgelegt werden Dieses W rterbuch wird dann beim Aufteilen der Textzeile zu Rate gezogen und ein Wort mit der passenden Vokabel belegt wenn sie bekannt ist Die Textanalyse die von splitte durchgef hrt wird ist nur sehr einfach Wenn das Spiel z B die Vokabel rot kennt kennt es die gebeugte Form rotes noch lange nicht Diese eingehendere An
43. hat sie zu Beginn den Wert 0 Das Hauptprogramm gibt also O0 aus Man kann der Variable aber einen Anfangswert geben Variable x 24 Vielleicht ein paar Worte zu den Bezeichnern Die Bezeichner manchmal auch IDs von engl identifier genannt m ssen eindeutig sein Es kann nur eine Variable mit dem Namen x geben und wenn es eine Variable mit dem Namen x gibt darf nicht auch eine Routine so hei en Au erdem gelten f r Bezeichner folgende Regeln Sie d rfen nur Buchstaben auch die deutschen Umlaute und Ziffern und den Unterstrich _ enthalten Sie d rfen maximal 36 Zeichen lang sein und das erste Zeichen darf keine Ziffer sein um sie besser von Zahlen unterscheiden zu k nnen Erlaubte Bezeichner sind zum Beispiel x1024 gro er_H gel 12gelb Bei Bezeichnern in ZETA wird nicht zwischen Gro und Kleinschreibung unterschieden Weiterhin werden die Umlaute gleich wie ihre Kreuzwortr tsel Pendants ae oe und ue behandelt Das B ist quivalent zu ss Die Bezeichner Gro er_H gel und grosser_h gel sind also f r ZETA gleichwertig Variablen kann mit dem Gleich Zeichen innerhalb einer Routine ein neuer Wert zugewiesen werden Hauptprogramm x 1972 num x Es wird immer 1972 ausgegeben egal welchen Wert x vorher hatte Lokale Variablen k nnen mit der Anweisung lokal definiert werden Diese Anweisung muss die erste in einer Routine sein Es k nnen bis zu f nfzehn Variablen angegeben werden die d
44. heraus oder als ZETA Fehler mit dem angegebenen Fehlercode der einer der Bezeichner Warnung Fehler oder Faal sein muss alias Synonym Bezeichner Definiert ein Synonym zu einem Bezeichner Auf diese Weise kann man zum Beispiel englische Schl sselw rter definieren seriennr Seriennummer Setzt die Seriennummer der Spieldatei release Release Setzt die Release die Ver ffentlichung der Spieldatei Systemfunktionen Einige Funktionen sind bereits in ZETA vorhanden Meist sind es Funktionen die einem bestimmten Opcode der Z Maschine entsprechen Systemfunktionen werden nur kompiliert wenn sie im Quelltext tats chlich benutzt werden Eine Systemfunktion ist genau wie eine 152 Anhang A Spezifikation der Sprache Routne nur dass die Anweisungen darin nicht von Programmierer kommen sondern von ZETA Systemfunktionen werden im Gegensatz zu normalen Routinen beim Aufruf auf die Anzahl der Argumente und auf einen R ckgabewert hin berpr ft Folgende Systemfunktionen stehen in ZETA zur Verf gung aktivesfFenster f Aktiviert das Fenster zum Schreiben f kann null sein f r das untere Textfenster oder eins f r das obere Statusfenster Argumente gibt die Anzahl der an die Routine bergebenen Argumente zur ck Dies ist wichtig bei Routinen mit einer beliebigen Anzahl von Parametern Ausgabekanal k Aktiviert den Kanal k wenn k positiv ist oder deaktiviert den Kanal k wenn k negativ ist f r die Ausga
45. je nach Fall gebeugt Wenn also ein Name Adjektive enth lt so muss die Bibliothek wissen wo solche Beugungen eingef gt werden Dies wird mit so genannten Kurzstrings siehe Abschnitt 1 9 gemacht die je nach Genus des Objekts und Fall die passenden Werte haben F r Adjektivendungen benutzt man den Kurzstring e der einfach ans ungebeugte Wort angeh ngt wird Name qgolden e Taschenuhr Name kleinf e bunt e Schnipsel Name eigenartig w ssrig e Weintrauben Adverbien die Adektive n her beschreiben m ssen nicht gebeugt werden und bekommen daher auch keine Endung Manche Substantive die im Plural stehen bekommen im Dativ ein n angeh ngt Dies wird 114 8 Beschreibungen mit n ber cksichtigt Name Lagerregale n Name m risch dreinschauend e Zwerge n F r W rter lateinischer Herkunft die in allen F llen au er dem Nominativ die Endung en haben setzt man en Name langhaarig e Student en Oft wird an Substantive im Genitiv ein s oder es angeh ngt Hierf r setzt man s und es Name Apfel s Name Ziegelhaus es Der Genitiv wird allerdings nur in seltenen F llen und von der Bibiothek nie zur Ausgabe verwendet Dieses Schema funktioniert gut f r die meisten F lle Einige Objekte ben tigen aber spezielle Regeln die durch Sonderkonstanten die zum Genus addiert werden beschrieben werden Mit Eigenname bewirkt man dass ein Obj
46. komplette Auflistung aller Sprachelemente von ZETA Wer bereits Autorensysteme oder Programmiersprachen kannt kann hier einen schnellen berblick ber ZETA bekommen Ein behutsamerer Einstieg in die Sprache von Zeta findet sich in nicht gefunden Folgende typographische Konventionen gelten Platzhalter in Kursiv m ssen durch passende Ausdr cke ersetzt werden Optionale Angaben sind in geschweifte Klammern gesetzt W rtlicher Text also Schl sselw rter und Operatoren sind mit Schreibmaschine geschrieben Format des Quelltexts Der Quelltext ist ASCIH Text der mit dem Zeichensatz Zeichensatz ISO 8859 1 Westeuropa gelesen wird Er besteht aus white space einer beliebig langen Folge von Leerzeilen Tabulatoren und Zeilenumbr chen aus Bezeichnern numerischen Konstanten Operatoren und Texten die in doppelte oder einfache Anf hrungszeichen eingeschlossen werden Bezeichner m ssen durch white space voneinander abgetrennt werden Operatoren und Bezeichner k nnen direkt aufeinander folgen Syntaktische Zeilen k nnen ber mehrere Textzeilen gehen und m ssen mit einem Semikolon abgeschlossen werden Die geschweiften Klammern werden stets als eigene Zeile betrachtet Au erhalb von Anf hrungszeichen werden Buchstaben mit Akzenten in ihre lateinischen quivalente umgewandelt Kommentare Alles was auf einer Textzeile nach zwei aufeinanderfolgenden Schr gstrichen steht wird vom Compiler ignoriert und als Kommentar betrachte
47. man nach der Bedingung auch mehrere Anweisungen die in geschweifte Klammern gefasst sind angeben Man nennt dies einen Anweisungs oder Codeblock wenn a lt 0 und b lt 0 a 0 b 0 Warnung a und b negativ Die Einr ckung des Blocks ist Geschmackssache macht aber den Code leserlicher blicherweise wird die ffnende Klammer auf die Zeile geschrieben in der die wenn Anweisung steht Die nachfolgenden Anweisungen werden einger ckt und die abschlie ende Klammer bekommt eine eigene Zeile und steht direkt unter wenn Diese Konvention wird in diesem Handbuch verwendet Eine n tzliche Erweiterung von wenn ist sonst Nach der Anweisung die ausgef hrt wird wenn die Bedingung wahr ist kann man nach sonst eine zweite angeben die ausgef hrt wird wenn die Bedingung falsch ist wenn Bedingung Anweisung sonst Anweisung In jedem Fall wird eine und nur eine der beiden Bedingungen ausgef hrt Die Bedingung wird nur einmal berpr ft wenn a lt 0 1 Grundlagen a 0 a ist negativ sonst a ist null oder positiv Hier wird nur einer der Texte ausgegeben auch wenn beim Erreichen von sonst a gleich null ist Nach Ausf hren des ersten Blocks wird der zweite bersprungen Vorsicht ist bei verschachtelten Bedingungen geboten wenn a 0 wenn b 0 Klar sonst Mehrdeutig Auf welche Bedingung bezieht sich sonst ZETA weist es dem letzten wenn zu Um den Code bersichtlich zu machen
48. nat rlich nur wenn die Dateinamen in beiden Bibliotheken dieselben sind 4 2 Steuerdateien In einem Projekt arbeitet man oft mit denselben Optionen Um das Setzen von Optionen zu vereinfachen erm glicht es ZETA so genannte Steuerdateien anzulegen Diese Dateien haben die Endung zak ZETA Ablaufkontrolle und enthalten Optionen die genau wie beim Aufruf angegeben werden Eingebunden wird eine solche Datei mit einem vorangestellten Doppelpunkt Zum Beispiel zieht zeta eldorado die Steuerdatei eldorado zak an In einer solchen Steuerdatei wird alles so interpretiert als ob es auf der Kommandozeile beim Aufruf st nde Anstelle von eldorado k nnte man also alle in Dieser datei angebenenen Optionen auch in den Aufruf schreiben Leere Zeilen werden ignoriert genauso wie alles was nach einem Lattenzaun steht Eine typische Steuerdatei s he so aus Ragnar k C 2003 Bj rn Magnusson Standard Standard Optionen 59 4 Der Compiler und seine Optionen rag_beta zet ragnarok z8 Quellcode Beta Version Spieldatei li1b zlib lib raglib Pfade f r Bibliotheken Smaxcode 320k Mehr Speicher f r Code g z8 Datei erzeugen 5 2 Logbuch und Statistik Steuerdateien k nnen auch andere Steuerdateien anziehen nur sollte man daf r sorgen dass sich die Steuerdateien nicht selbst aufrufen x Statt einer Steuerdatei kann man nat rlich auch eine Batch Datei oder ein Makefile benutzen in d
49. neuen D monen keine Z nder benutzt werden sollen K nnte man nun die Konstante max_Z nder auf eins setzen 14 Es g be hier mehrere L sungen Eine M glichkeit ist die Priorit ten in einer Schleife sortiert auf ein Feld zu schreiben und sie dann in der richtigen Reihgenfolge abzuarbeiten Bei dieser Methode ist die Anzahl der aktiven D monen wieder von einem Feld abh ngig Hier wird die Objektschleife mehrmals durchlaufen was die Anzahl der D monen nicht einschr nkt aber bei vielen aktiven D monen mit unterschiedlichen Priorit ten das Spiel sehr langsam machen kann Attribut aktiv Objekt D mon lokal jetzt danach 32767 wiederhole jetzt danach danach 32768 alleObjekte o wenn o ist aktiv amp amp o selbst amp amp o hat D mon lokal p o D mon_Prio wenn p jetzt o D mon wenn p lt jetzt amp amp p gt danach danach p bis danach 32768 init D mon_an selbst Die Priorit t kann hier jeden beliebigen Wert annehmen au er den niedrigsten in ZETA m glichen der hier als Abbruchbedingung verwendet wird Um die bersicht zu behalten sollte man sich vielleicht auf den Bereich 10 bis 10 beschr nken e 15 Dazu definiert man einen neuen Meta Befehl meta__Nachwort der w hrend des Spiels nichts macht Diesen Befehl f ngt man dann im Lib Text ab Nat rlich muss auch die Frage angepasst werden Verb nachwort gt meta__Nachwort 177
50. niemals nicht verwendet wird x Etwas aufpassen muss man wenn man Namen auf ihre Existenz bepr ft wenn def Expertenmodus ist wahr wenn es den Bezeichner Expertenmodus in diesem Spiel gibt wohingegen wenn Expertenmodus wahr ist wenn Expertenmodus einen Wert hat der von null verschieden ist Wenn es den Bezeichner Expertenmodus nicht gibt erzeugt die zweite Anweisung eine Fehlermeldung Um besser verfolgen zu k nnen was gerade kompiliert wird kann man Texte ausgeben w hrend ZETA den Quelltext abarbeitet text WarnunglFehler Fatal Meldung Wenn der Text der Anweisung text direkt folgt wird er einfach ausgegeben Wenn eine weitere Angabe zum Fehlercode gemacht wird behandelt ZETA den Text so als ob er eine normale Fehlermeldung ist Insbesondere bricht etwas wie wenn ndef Debug text Fatal Das Modul R3 kann nur im Debug Modus laufen tende den Kompiliervorgang sofort ab ZETA bietet die M glichkeit Konstanten Objekte und Routinen blind zu definieren blinddef Definitionstyp Bezeichner Wert Blinddefinition bedeutet dass nichts definiert wird wenn bereits etwas mit diesem Bezeichner definiert wurde Ansonsten wird je nach Definitionstyp eine Konstante mit dem Wert eine Routine die den Wert zur ckgibt oder ein Objeklt ohne Eigenschaften definiert Objekte k nnen keine Wertezuweisung haben Die Definitionen blinddef Konstante max_Last 50 blinddef Routine ist_schwer wahr blindde
51. rlich ist aber f r den zuk nftigen Gebrauch gemacht worden um etwa Pr positionen als Teile von Verben zu betrachten 4 Pr positionen Das erste Wort der Pr positionsliste gibt die Anzahl der Pr positionen an Es folgt zu jeder Pr position ein Block mit vier W rtern der die Vokabeladressen dr Pr position und von bis zu drei Pronomialadverbien wie damit oder darauf Wenn eine Pr position weniger als vier Eintr ge besizt so wird mit Nullen aufgef llt Zum Beispiel bewirkt die Direktive Pr position mit gt damit 135 11 Daten f r den Parser den Pr positionsblock mit damit 0 0 5 Synonyme Synonyme werden hintereinader auf eine Liste geschrieben Jedes Synonym eresetzt m W rter durch n andere W rter wobei n auch null sein kann Das erste Byte jedes Synonyms enth lt die Anzahl der W rter in der Form m 16 n Es folgen n m W rter die die Vokabeladressen enthalten Zum Beispiel erzeugt Synonym ins gt in das den Synonymeintrag 12 Tamet ont Das Die Synonymliste endet wenn das Byte das die Anzahl der W rter festlegt null ist 136 Anhang A Spezifikation der Sprache ZETA ist ein Compiler f r die virtuelle Z Maschine Es k nnen Spieldateien der Versionen f nf und acht erzeugt werden F r diese Art von Spieldateien steht eine breite Palette an Interpretern f r verschiedene Plattformen zur Verf gung Diese Spezifikation ist eine sehr trockene aber
52. rper hat hat dasselbe Format wie ein Objektk rper Klassen k nnen ebenfalls von anderen Klassen erben Eine Anzahl in runden Klammern erzeugt so viele Instanzen der Klasse die nicht im Spiel sind aber sp ter mit der Systenfunktion erzeuge dynamisch erzeugt werden k nnen Klassen k nnen auch Mitteilungen erhalten wenn sie von einer ihrer Instanzen gesendet werden Die Variablen selbst und Sender werden dabei nicht ge ndert Grammatikdefinitionen Als zus tzliche Datenstrukturen f r Textadventures gibt es in ZETA Befehle Verben Pr poitionen und Synonyme Befehle sind objekt hnliche Zusammenschl sse von Daten und werden wie folgt definiert Befehl Name Eintr ge Eintr ge haben die Form Eintrag Wert und m ssen vor Benutzung mit Befehlseintrag Name definiert werden Verben sind Imperativverben denen m gliche Satzstrukturen zugeordent sind 150 Anhang A Spezifikation der Sprache Verb Verb Satzmuster Verb hat die Form regelm Verb unregelm Verb Verb Ein Satzmuster hat die Form Satzbausteine gt Befehl Satzbausteine ist eine nicht durch Kommas getrennte Auflistung folgender Satzbausteine Satzbaustein Routine Vokabel Das Satzmuster ist beendet wenn eine Zeile nicht mit einem Stern beginnt Satzbausteine m ssen vorher mit Satzbaustein Satzbaustein deklariert werden Synonyme sind Listen von W rtern die durch andere ersetzt werden sollen Synonym Wortliste gt Wortliste
53. und die Release die laufende Nummer der Ver ffentlichung angeben kann release Release seriennr Seriennummer Die Release ist eine Zahl die Seriennummer eine Folge von nicht mehr als sechs Zeichen die in der Regel nur Ziffern enth lt 65 4 Der Compiler und seine Optionen Jede Spieldatei hat eine Release und eine Seriennummer und wenn der Autor sie nicht explizit angibt so ist die Release eins und die Seriennummer das Datum des Kompilierens im Format jjmmdd also 020501 f r den ersten Mai 2002 66 5 Fehler suchen und beseitigen 5 1 Fehler beim Kompilieren Wenn ZETA beim Kompilieren Fehler findet wird eine Fehlermeldung ausgegeben die den Fehlergrad die Stelle im Quelltext an der der Fehler aufgetreten ist und eine Beschreibung des Fehlers angibt Zum Beispiel zeigt Fehler modul_l1 zet 12 Hier wird ein Operator erwartet an dass in Zeile 12 der Datei modul_1 zet ein Fehler aufgetreten ist ZETA kam mit der Syntax einer Anweisung nicht zurecht und konnte daher keinen Code erzeugen In einem solchen Fall w rde die betreffende Zeile des Quelltextes ausgegeben und die fehlerhafte Stelle mit einem Pfeil markiert Wenn ZETA in der Fehlermeldung keine Datei angibt befindet sich der Fehler in der Hauptdatei ZETA benutzt ein Fehlersystem mit drei Stufen Fatale Fehler f hren zum sofortigen Abbruch des Kompiliervorgangs Dies passiert nur in schwer wiegenden F llen wenn z B kein Speicherplatz mehr vorhanden is
54. von einem Feld das normale ZETA Zahlen speichern kann I Dies birgt besonders f r Einsteiger einige Gefahren Normal wei ZETA ob ein Feld ein String ist oder nicht und benutzt immer die richtige Methode um die Eintr ge zu lesen oder sie zu ndern Wenn der Feldbezeichner aber eine Variable ist kann ZETA nicht wissen um was f r ein Feld es sich handelt Es liest dann die Eintr ge als ob es kein String w re und dann bekommt man bei Strings unsinnige Eintr ge geliefert Dann muss auf diese Operatoren zur ckgegriffen werden Man kann so zum Beispiel eine Routine schreiben die einen beliebigen String der in einem mit String deklarierten Feld liegt ausgibt Routine sText textfeld lokal i solange textfeld gt i char textfeld gt i t t F r solche Aufgaben stehen aber bereits fertige Routinen zur Verf gung die leicht eingebunden werden k nnen Einsteiger brauchen sich also keine Gedanken zu machen und sollten immer den sicheren Weg der Indizierung mit eckigen Klammern w hlen x Die Systemfunktion kopiereFeld a b n kopiert n Bytes von Feld a nach Feld b Auf diese Weise kann man schnell Datenbl cke bertragen ohne eine Schleife benutzen zu m ssen String eins Regenwald String zwei Nebelhorn kopiereFeld zwei eins 5 Der String eins lautet nun Nebelwald Mit der Funktion lL scheFeld a n setzt man n Bytes im Feld a auf den Wert null 24 1 Grundlagen 1 9 Texte
55. wie Laden und Speichern werden bei dieser Z hlung nicht ber cksichtigt Es gibt in der Bibliothek kein System um die Uhrzeit zu bestimmen Ein solches System ist allerdings schnell implementiert wer will Kann die Erweiterung uhrzeit zin einbinden Schlie lich wird sozusagen als berd mon der stets aktiv ist und nicht an die Sichtbarkeit von Objekten gebunden ist die Eigenschaft jede_Runde aller Lib Objekte ausgef hrt Hier kann man nun all das abfangen was mit den anderen drei Konzepten oder Kombinationen aus ihnen nicht m glich war Dies ist auch der letzte Ausweg wenn man die Reihenfolge von D monen beachten muss Der genaue Ablauf nach Ende jeden Zuges ist wie folgt e Alle D monen und Zeitz nder werden aufgerufen e Jede_Runde wird f r sichtbare Objekte ausgef hrt e Jede_Runde aller Lib Objekte wird ausgef hrt e Die Objekte beim Spieler bekommen das Attribut bewegt e Die globale Variable Z ge wird aktualisiert 7 14 Der Anfang und das Ende des Spiels Wie bereits in Abschnitt 6 1 beschrieben wird zu Beginn des Spiels einmalig die Routine Anfang aufgerufen Hier wird in der Regel ein Begr ungstext ausgegeben in dem der Spieler erf hrt wer er ist und was er machen soll Jedes Spiel muss diese Routine Anfang definieren auch wenn kein Text ausgegeben werden soll Vor dieser Routine k nnen Objekte initialisiert werden dazu gibt es die Eigenschaft init die jedes Objekt besitzen kann Diese Eigenschaft i
56. wird die verbleibende Zeit um eins verringert die Z ndung wird ausgel st wenn dieser Wert negativ wird Eine Z ndzeit von Null l st also ein Ereignis noch im selben Zug aus Ein Z nder ist nicht unaufhaltsam er kann mit l sche_Z nder obj wieder gel scht werden Die Routine Restzeit obj gibt an wieviele Z ge bis zur Z ndung verbleiben oder 1 wenn die Z ndung nicht aktiv ist 107 7 Das Modell der Spielwelt x Die D monen und Z nder laufen in einer nicht vorhersagbaren Reihenfolge ab so dass sich der Autor nicht darauf verlassen kann dass ein bestimmter D mon schon gelaufen ist wenn gerade ein anderen abgearbeitet wird Auch wenn man aus einem D mon heraus einen anderen aktiviert ist nicht sichergestellt dass dieser in der selben Runde noch ber cksichtigt wird x Es k nnen beliebig viele D monen und Z ndungen definiert werden ein Objekt kann auch beides besitzen Es k nnen allerdings immer nur max_Z nder D monen und Z nder gleichzeitig aktiv sein Wer mehr ben tigt definiert diese Konstante vor dem Einbinden der z Lib mit einem h heren Wert e Aufgabe 11 Implementiere eine Schiebet r die sich mit einer Codekarte ffnen l sst und die einen Zug lang offen bleibt e Aufgabe 12 D monen eigen sich gut um wiederkehrende Verhaltensmuster bei anderen Personen im Spiel zu implementieren Wie s he ein Dieb aus der sich wie in Zork durch die G nge schleicht und seinen Pfad zuf llig sucht
57. zu verlassen um das Aufschlie en zuzulassen Wesentlich einfacher ist es aber eine Routine f r Schl ssel_f r zu verwenden 172 Schl ssel_f r antworte wahr L sungen der Aufgaben e9 Hier definieren wir f r jeden Raum von dem aus man sich mit dem Boot fortbewegen kann eine Eigenschaft Kanu_Ausg nge die analog zu Ausg nge funktioniert Diese Eigenschaft wird im Code des Kanus berpr ft Zus tzlich bekommen R ume die vollst ndig im Wasser liegen das Attribut Wasser Attribut Wasser Eigenschaft Kanu_Ausg nge Objekt Kanu Name Kanu Genus n Subst kanu n boot n kanadier Beschreibung Ein kleines leichtes Immer Dein Kanu steht hier Vorher lokal n verlassen wenn aRaum ist Wasser stop fahren wenn Spieler nichtin selbst wenn Paddel nichtin Spieler wenn aRaum hat Kanu_Ausg nge schreibeArg 255 a0bj2 m Kanu Nicht hier stop Dazu musst du ins Kanu steigen stop Du hast nichts zum Paddeln n aRaum Kanu_Ausg nge a0bj2 wenn Datentyp n Objekt wenn n istnicht Wasser Du erreichst das Ufer und setzt dein Kanu an Land p gehe_zu n 0 selbst f wenn n stop In diese Richtung kannst du nicht paddeln stop Sitzpositionen sitzen liegen ist Fahrzeug betretbar Beh lter Objekt Paddel Name Paddel Genus n Adj h lzern Subst padde
58. Anweisungen Anstelle eines Blocks von Anweisungen in geschweiften Klammern kann wie blich auch eine einzelne Anweisung ohne Klammern stehen Diese Schleife z hlt die Variable einfach durch alle Objekte mit ihren internen Nummern durch Dies kann in einem gro en Spiel lange dauern Deshalb ist es f r einen Fall alleObjekte x wenn x in Eimer besser nur die Kinder des Objekts zu durchlaufen Dazu benutzt man eine solange Schleife x Tochter Eimer 34 2 Objekte und Klassen solange x x Schwester x I W hrend x die Schleife durchl uft darf es nicht im Objektbaum bewegt werden da sich dann das Schwesterobjekt ndert und die letzte Anweisung im Block nicht richtig funktioniert Dann muss man doch alleObjekte oder benutzen oder das Schwesterobjekt vor dem Verschieben zwischenspeichern x Tochter Eimer solange x y Tochter x verschiebe x nach K bel x yi 2 3 Attribute Bis jetzt sind unsere Objekte noch gesichtslos Sie haben einen Platz im Objektbaum sonst nichts Das ndert sich wenn wir den Teil zwischen den geschweiften Klammern definieren Die einfachste Art von Daten die ein Objekt haben kann sind Attribute Ein Attribut ist eine Eigenschaft die ein Objekt hat oder nicht Bevor man ein Attribut in einer Objekdefinition benutzen kann muss man es deklarieren zum Beispiel Attribut essbar Nun hat jedes definierte Objekt eine Information dar ber ob es essbar is
59. Attribut schlie bar besitzen hei en ffnen und schlie en Au derdem k nnen T ren betreten werden Schl ssel und Schl sser Objekte die das Attribut abschlie bar haben k nnen abgeschlossen werden Dann haben sie die Attribute geschlossen und abgeschlossen Objekte die die Eigenschaft Schl ssel_f r definieren sind Schl ssel Mit ihnen k nnen abschlie bare Objekte aufgeschlossen werden Die Eigenschaft Schl ssel_f r kann eine Liste von Objekten enthalten Die Befehle hier sind aufschlie en und abschlie en Betretbare Objekte und Fahrzeuge Manche Objekte haben das Attribut betretbar dann kann der Spieler auf ihnen sitzen stehen oder liegen wenn sie eine Ablage sind oder in ihnen wenn sie Beh lter sind Die Variable Sitzposition ist einer der Befehle die Werte sitzen stehen oder liegen oder null wenn seine Position wie in einem Raum egal ist Die Befehle lauten hier betreten und verlassen Die Spezialf lle stehen sitzen und Liegen werden in betreten mit der jeweiligen Sitzposition umgewandelt Betretbare Objekte werden in der Raumbeschreibung mit einem eigenen Absatz ber cksichtigt der mit der Eigenschaft Innenansicht definiert wird Ein Objekt das das Attribut Fahrzeug hat bewegt sich mit dem Spieler wenn er darauf sitzt Der passende Befehl hei t fahren er l sst im Allgemeinen jede Bewegung zu nderungen m ssen vom Autor abgefangen werden Wenn der Spieler in einem Fahrzeug sitzt und eine Richtung eingib
60. Ausgabe stehen weiterhin einige Felder zur Verf gung Sie enthalten Vokabeln m ssen also mit Vokabel x ausgegeben werden und sind mit __Kasus 4 __Genus indiziert Diese Felder enthalten Artikel und Endungen f r Adjektive und Pronomina ihre Bezeichner sind lang aber weitestgehend selbsterkl rend def_Artikel indef_Artikel indef_Art_Endung ohne _Adj_Endung def_Adj_Endung indef_Adj_Endung personal_Pron possessiv_Pron_Endung demonstrativ_Pron_Endung All diese Felder enthalten Vokabeln keine Texte Zum Ausgeben muss daher die Routine Vokabel benutzt werden x Der Name des Objekts Spieler ist unabh ngig davon welches Objekt dies gerade ist die passende Form von du Es sei denn die Routine du_Name wird ersetzt Diese Regeln zur Ausgabe werden nat rlich nicht nur von der Bibliothek benutzt man kann sie auch selbst benutzen Die Routinen das_Objekt o k ein_Objekt o k 116 8 Beschreibungen kein_Objekt o k Objekt_ohne_Art o k geben das Objekt o im Fall k mit den passenden Artikeln aus Da die Angabe des Kasus im Flie text etwas umst ndlich ist gibt es f r die ersten beiden Routinen Abk rzungen die den Kasus bereits beinhalten der o des o dem o den o ein o eines o einem o einen o x Dies sind die m nnlichen Formen der Artikel nur f r diesen Genus sind alle F lle eindeutig unterscheidbar Man denkt hier also besser nicht an das Objekt sondern den Gegenstand
61. Ein typischer Objektbaum s he etwa so aus Zimmer Tisch gt Spieler gt Stuhl Zeitung Apfel gt Rucksack gt Schl ssel Luftpumpe 31 2 Objekte und Klassen Tisch Stuhl und Spieler sind T chter ihrer Mutter Zimmer Allerdings ist nur der Tisch die Tochter von Zimmer Der Schl ssel ist die Schwester des Rucksack der wiederum die Schwester vom Apfel ist Die drei Routinen Mutter x Tochter x und Schwester x bestimmen die Verwandten eines Objekts x Die Funktion Kinder x gibt an wieviele Kinder x hat In unserem Beispiel w ren Mutter Tisch Zimmer Mutter Rucksack Spieler Tochter Apfel nichts Tochter Tisch Zeitung Schwester Spieler Stuhl Kinder Spieler Diese Funktionen k nnen nur auf Objekte angewandt werden auf nichts anderes insbesondere nicht auf die Konstante nichts Es gibt zwei M glichkeiten ein Objekt zu Beginn im Objektbaum zu platzieren Die erste ist die Position eines Objekts relativ zu den vorher definierten anzugeben Objekt Zimmer Objekt gt Tisch Objekt gt gt Zeitung Objekt gt Stuhl Diese Definition entspricht dem Beispiel oben jedoch ohne den Spieler Ein Objekt ohne Pfeile hat keine Mutter ein Objekt mit einem Pfeil hat das zuletzt ohne Pfeile definierte Objekt als Mutter ein Objekt mit zwei Pfeilen das zuletzt mit einem Pfeil definierte und so weiter Allgemein ausgedr ckt Die Anzahl de
62. Himmelsrichtungen R ume an Bord eines Schiffes m ssen ebenfalls das Attribut an_Bord besitzen e2 _ Zun chst m ssen wir die neuen Eigenschaften definieren f r jede Richtung eine Die Eigenschaft kein_Weg wird aufgerufen wenn es keinen Ausgang in diese Richtung gibt Eigenschaft nach_N Eigenschaft nach_NO Figenschaft kein_Weg 167 L sungen der Aufgaben Nun definieren wir eine Klasse Ort der alle R ume angeh ren In der Eigenschaft Ausg nge dieser Klasse leiten wir nun die Anfrage an die einzelnen Richtungseigenschaften um Zur Zuordnung der Objekte und Eigenschaften benutzen wir hier eine Routine In Inform wird die assiziierte Eigenschaft beim Richtungsobjekte gespeichert aber dann m ssten wir hier alle Richtungsobjekte ersetzen Routine Richtungseigenschaft o jenach o Norden antworte nach_N Nordosten antworte nach_NO sonst antworte kein_Weg Klasse Ort beerbt Raun Ausg nge r lokal Ziel e Richtungseigenschaft r antworte aRaum e Die R ckgabewerte sind wie bei Ausg nge un eine typische Raumdefinition k nnte folgende Eigenschaften haben nach_N H ngebr cke nach_NO Dort geht es in die Schlucht hinunter nach_NW antworte selbst nach_NO nach_S wenn Amulett in Spieler amp amp Amulett hat angezogen antworte Geheimgang stop Eine magische Kraft h lt dich zur ck 3 Hier fangen wir am besten den Standardtext ab es ist LibText gehen
63. Liste Anzahl x Miterstelle_globale_Liste attr add kann man alle Objekte nicht nur die T chter eines einzelnen Objekts ber cksichtigen x Man kann auch einene Routinen zum Anlegen der Liste schreiben Mit setze_auf_Liste obj wird ein Objekt auf die Liste gesetzt Mit Ll sche_Liste kann man die Liste l schen Das Erstellen der Liste erzeugt noch keine Ausgabe es speichert nur die zu listenden Objekte zwischen Um die Liste auszugeben muss man den Namen des Objekts Liste ausgeben 119 8 Beschreibungen Das Aussehen der Liste l sst sich in einem bestimmten Rahmen durch die Eigenschaft Liste Stil beeinflussen Dieser Listenstil ist eine bin re Kombination aus mehreren Flaggen So wird zum Beispiel oder statt und ausgegeben wenn 1__oder gesetzt ist Setzen kann man diese Flagge mit Liste Stil 1l__oder Gerade in Inventarlisten aber gelegentlich auch in Raumbeschreibungen werden gerne Zusatzinformationen zu den Objekten ausgegeben die in der Regel in Klammern angeh ngt werden Du hast einen Rucksack und eine Taschenlampe eingeschaltet und etwas Kleingeld 1 Euro und 85 Cent bei dir In deinem Rucksack sind eine Flasche Himbeergeist halbvoll drei Landj ger und ein Anorak Das ist nat rlich ein extremes Beispiel und standardm ig schreibt die Bibliothek in Listen nichts als die Objektnamen Wenn im Listenstil aber 1__Info gesetzt wird dann wird zu jedem Objekt das die Eigenschaft Zusatzinfo
64. Objekt Schwarzbrot das die Eigenschaften der Klasse Nahrung besitzt Die Eigenschaften von Schwarzbrot k nnen sich nat rlich w hrend des Spiels ndern Der Bezeichner der Klasse wird hier als Direktive verstanden und bedeutet erzeuge eine Instanz dieser Klasse Diese Schreibweise ist eine Abk rzung f r Objekt Schwarzbrot beerbt Nahrung Die Klassenzugeh rigkeit kann also auch nach dem Schl sselwort beerbt im Objektk rper angegeben werden Nicht alle Nahrungsmittel sind gleich und deshalb kann man die geerbten Eigenschaften in der Definition der Instanzen ndern Nahrung Limette Vitamine 6 Nahrung Schimmelk se N hrwert 2 Kohlenhydrate 0 ist verfault Nahrung Schokopudding Kohlenhydrate 4 Vitamine 0 Damit gibt es nun vier Nahrungsmittel mit folgenden Eigenschaften Vitamine Kohlenh Eiwei N hrwert Schwarzbrot 2 2 2 6 Limette 6 2 2 10 40 2 Objekte und Klassen Schimmelk se 2 0 2 2 Schokopudding 0 4 6 Bei der Definition der Eigenschaft N hrwert der Klasse Nahrung tauchte eine besondere Variable auf selbst Diese Variable bezieht sich auf das Objekt f r das die Routine gerade ausgewertet wird Dies ist notwendig damit die Routine f r alle Instanzen der Klasse g ltig ist In diesem Beispiel werden die Eigenschaften ersetzt dies ist der Regelfall Neben der ersetzenden Vererbung k nnen Eigenschaften aber auch erweiternd vererbt werden Dazu muss eine Eigens
65. ZETA Entwicklungssystem f r Text Adventures Benutzerhandbuch Martin Oehm ZETA Benutzerhandbuch Inhaltsverzeichnis Einleitung za eseiintebeiiieaairausinsatiarahrnasuheielansfaiiis 1 ber dieses Handbuch Susanne 1 Danksasunset EE ee E E 2 Teil I Die Sprache von ZETA nee een 3 T Grundlagen sa u aa aan 4 1 1 Erste Schrille sen za Re nase 4 1 2 Routinen und Anweisungen sssseessesssesesessesssrtsssresseeeesseessstesseeesseeesseesseeesseee 4 1 3 Zahlen und Vatiablen aa ae Be E E E ES 5 1 4 Recheneperalio nen na es 9 1 5 Argumente von Routinen und R ckgabewerte neesseensnseennnneennennn 12 1 6 BediNsunsen een a E E R E a A 14 1 7 Schleifen nr EEE 18 1 8 Felder vun ss EEEE E A A E E R 21 1 9 a AN A ANA EAE AAT 25 2 Objekte und Klassen sissssissssisssssososcsnissosissssosssnsissesisossass ssesissssoso ssosisosesso ssssistssisc ssos sso 31 2 1 Das Konzept der Objekte aan Ra as 31 2 2 Der Objekibaum una 31 2 3 AttADUE See ati nee ee 35 2 4 Eigenschaften von Objekten u ei 36 23 Klassen naar ETTE EE A ATA a 39 2 6 Verschiedene Datentypen sesesesseesesesssseseeseseseesseeesseeessetesseresseesseeeesseresseessse 42 2 7 Mitteilungen an Objekte wu ne einig 43 2 8 Erzeugen und Vernichten von Objekten uu0sssssnssnnssnnnnessnnnenennn nenn 46 3 Systemfunktionen und Besonderheiten 00s c00sseesssseessnsesnssnsenssnssnsssnnsensnnssessssssnsnnne 48 3 1 Eingabe Von Text a 48 3 2 Tex
66. able zuweisen will oder es an eine Routine bergeben will muss man den Operator amp benutzen x M hre amp Vokabular vokabel x 0 2 5 Klassen Klassen sind hnlich wie Objekte Sie dienen anderen Objekten als Vorlage tauchen aber selbst im Spiel nicht auf Beim Erzeugen eines Objekts aus einer Klasse werden die Eigenschaften und die Attribute der Klasse auf das Objekt bertragen Man sagt die Eigenschaften der Klasse werden vererbt Das neu erzeugte Objekt hei t dann Instanz der Klasse Das ist praktisch wenn es mehrere Objekte gibt die ein hnliches oder gleiches Verhalten haben Zum Beispiel k nnte man eine Klasse Nahrung definieren Klasse Nahrung ist essbar Vitamine 2 Kohlenhydrate 2 Eiwei 2 N hrwert wenn selbst ist verfault antworte 1 antworte selbst Vitamine selbst Kohlenhydrate selbst Eiwei 39 2 Objekte und Klassen Die Definition einer Klasse ist hnlich wie bei Objekten Unterschiedlich ist dass Klassen unbedingt einen Bezeichner haben m ssen und dass man den Ort einer Klasse nicht angeben kann Die Klasse beschreibt das Konzept eines Nahrungsmittels das verschiedene Regeln enth lt aber keinem Ort zugewiesen ist Die Definitionen innerhalb des Objektk rpers zwischen den geschweiften Klammern sind bei Klassen genau wie bei Objekten Mit dieser Definition kann nun eine Instanz der Klasse Nahrung erzeugt werden Nahrung Schwarzbrot Damit gibt es nun ein
67. abular m hre karotte mohrr be Beschreibung wenn M hre ist verfault Ein unappetitliches braunes Ding sonst Die Karotte strahlt dich in knackigem Orange an N hrwert wenn M hre ist verfault antworte 1 antworte 6 ist essbar nicht verfault 37 2 Objekte und Klassen Die Eigenschaften Besch und N hrwert sind hier Routinen Der Name ist eine Zeichenkette und Vokabular ist ein Feld mit drei Eintr gen Routinen die Eigenschaften von Objekten sind oft sagt man auch Methoden dazu sind wie normale Routinen Sie geben falsch zur ck wenn nichts anderes gesagt wird und sie k nnen Argumente empfangen Wenn man aus einer Eigenschaft mit mehreren Eintr gen liest so ist das Ergebnis immer der erste Eintrag Solche Eigenschaften k nnen aber auch wie Felder benutzt werden Die Eintr ge haben Indizes die bei null anfangen und die man der Eigenschaft in eckigen Klammern nachstellen kann Mit bestimmt man die Anzahl der Eintr ge im Feld einer Eigenschaft M hre Vokabular M hre Vokabular m hre M hre Vokabular 0 m hre M hre Vokabular 1 karotte M hre Vokabular 2 mohrr be Auf dieselbe Weise kann man die Eintr ge auch ver ndern Die L nge dieses Feldes kann sich nicht ndern die Eintr ge schon Eine Anweisung wie M hre Vokabular 4 ist daher nicht erlaubt und folgende Zuweisung M hre Vokabular 3 m hrchen schreibt den Wert an
68. alyse macht der Parser der Adventure Bibliothek 49 3 Systemfunktionen und Besonderheiten 3 2 Textkan le Ein und Ausgabetexte werden durch so genannte Textkan le in den Interpreter hinein und aus ihm hinaus geleitet Normalerweise ist der Eingabekanal die Tastatur der Ausgabekanal ist der Bildschirm Dies kann man aber ndern Die Funktion Eingabekanal x w hlt den aktiven Eingabekanal aus Eingabekanal O ist die Tastatur Eingabekanal 1 ist eine Datei Andere Eingabekan le gibt es nicht und es ist immer nur einer dieser Kan le aktiv Wenn der Eingabekanal auf eins geschaltet wird fragt der Interpreter nach einer Datei dies ist nicht Aufgabe des Programms Mit der Funktion Ausgabekanal x k nnen Ausgabekan le aktiviert x gt 0 und deaktiviert x lt 0 werden Es gibt vier Ausgabekan le den Bildschirm ein Protokoll des gesamten Texts ohne Statuszeile ein String im Speicher ein Protokoll der eingegebenen Befehle Aa wN Anders als bei der Eingabe k nnen hier mehrere Kan le aktiv sein Ausgabekanal 3 sollte nicht mit Ausgabekanal aktiviert und deaktiviert werden Stattdessen gibt es eine weitere Funktion Textumleitung f die allen ausgegebenen Text auf das String Feld umleitet bis diese Umleitung mit Textumleitung 0 wieder ausgeschaltet wird In den ersten beiden Bytes gt 0 steht die Anzahl der Zeichen ab gt 2 steht der Text Diese Funktion kann z B benutzt werden um die L nge eines Textes zu
69. an die letzte M glichkeit benutzt kann der Kommentar ber mehere Zeilen gehen Danach wird das Hauptprogramm definiert Jedes erstelle Spiel muss eins besitzen es wird nach Aufrufen der Spieldatei im Interpreter ausgef hrt Wenn alle Anweisungen im Hauptprogramm abgearbeitet sind h lt der Interpreter an Die beiden geschweiften Klammern schlie en den Ausf hrungsblock des Hauptprogramms 1 Grundlagen ein Momentan enth lt dieser Block nur eine Anweisung Text in doppelten Anf hrungszeichen Diese Anweisung bedeutet Gib diesen Text auf dem Bildschirm aus In ZETA m ssen alle Befehle mit einem Strichpunkt oder Semikolon abgeschlossen werden es sei denn sie stehen vor einer geschweiften Klammer Das Semikolon in unserem Beispiel w re also nicht unbedingt n tig gewesen aber es schadet nicht es zu setzen Au erhalb von Anf hrungszeichen behandelt ZETA Leerzeichen Tabulatoren und Zeilenumbr che gleich Als so genannten white space der zum Abtrennen von einzelnen W rtern und Symbolen im Quelltext dient Folgender Quelltext h tte also dieselbe Spieldatei erzeugt Hauptprogramm Hallo Welt Neben dem Hauptprogramm gibt es noch weitere Bl cke mit Anweisungen die hnlich aufgebaut sind sie hei en Routinen Eine Routine wird mit der Direktive Routine definiert Routine Hallo Hallo Welt Hauptprogramm Hallo Jetzt steht ein anderer Befehl im Hauptprogramm Hallo bedeutet F hre die Anweisu
70. an kann diese Routinen ja nicht ausf hren da man nicht wei ob sie Text ausgeben Die lokale Variable i wird nur verwendet um zu sehen ob man ein Komma ausgeben muss Damit das Hochz hlen der lokalen Variable in Rit g in der aufrufenden Routine bemerkt wird muss dieser Wert wieder zur ckgegeben werden Man h tte hier nat rlich auch eine globale Variable verwenden k nnen e 17 Man definiert f r jede Farbe eine Klasse und ein passendes Pluralobjekt hier als Beispiel nur die blauen B lle Klasse blauer_Ball Name wenn Liste Inhalt stop blau e klein e blau e Ball Genus m Plural blaue_B lle Listengruppe B lle Adj klein blau Subst ball m b lle pp Objekt blaue_B lle Name wenn Liste Inhalt stop blau e klein e blau e B lle n Genus p Zahlenangabe Listengruppe B lle Anzahl 179 L sungen der Aufgaben Mit der Abfrage nach Liste Inhalt wird gepr ft ob innerhalb einer Unterliste nur ein verk rzter Name ausgegeben werden soll Nun noch die Listengruppe f r alle B lle Objekt B lle e 18 Name klein e B lle Gruppenliste Genus p Zahlenangabe Anzahl Man definiert einfach zwei Plural Objekte so dass eines f r die dunklen ein anderes f r die hellen Lampions gilt Klasse Lampion Name wenn selbst ist eingschaltet selbst Farbe leuchtend sonst erloschen e Lampion
71. an vielleicht das Verb schalten hier vermeiden und stattdessen anz nden oder l schen verwenden w rde Was jedoch genau mit dem angeschalteten Objekt passiert muss der Autor selbst ber cksichtigen Objekt Taschenlampe Name Taschenlampe Genus f Subst lampe f taschenlampe f leuchte f Nachher einschalten mache selbst Lichtquelle ausschalten mache selbst nicht Lichtquelle ist schaltbar nicht eingeschaltet 95 7 Das Modell der Spielwelt Wenn keine Beschreibung angegeben wird wie hier wird beim Untersuchen von schaltbaren Objekten einfach gesgt Die Taschenlampe ist an aus x Es gibt auch einen Befehl schalten der ein Objekt immer in den jeweils anderen Zustand schaltet und nach einschalten oder ausschalten umgeleitet wird 7 7 Lesen und nachschlagen Auf manchen Objekten steht etwas geschrieben das man lesen kann ZETA unterscheidet zwischen lesen und untersuchen Alles was man auf einem Objekt lesen kann muss explizit in Vorher abgefangen werden sonst steht nichts auf dem Objekt Oft ist das was auf dem Objekt steht auch dessen Hauptmerkmal wie zum Beispiel bei einem Warnschild Dann kann man das untersuchen und das lesen zusammenfassen Deko gt Warnschild Name Warnschild Genus n Subst schild n warnschild n warnung f Vorher lesen untersuchen stop Unter einem Totenkopf mit gekreuzten Knochen steht Achtung
72. ang A kopiereFeld Anhang A lade Anhang A ladeFeld Anhang A ladeZug Anhang A Lese 3 1 Anhang A leseArg Anhang A lesekintrag 11 2 Anhang A l scherfeld Anhang A l scheFenster Anhang A Mutter 2 2 Anhang A num 1 3 Anhang A schreibeArg Anhang A Schriftstil Anhang A Schwester 2 2 Anhang A speichere Anhang A speichereFeld Anhang A speichereZug Anhang A Splitte 3 1 Anhang A Statusfenster Anhang A Taste 3 1 Anhang A Text Anhang A Textfarbe Anhang A TextInFeld Anhang A Textumleitung Anhang A Tochter Anhang A Unicode 1 9 verbleibend 2 8 Anhang A vernichte Anhang A Vokabel Anhang A Wortumbruch Anhang A zerst re 2 8 zufall 1 5 Anhang A Index 189 Index Taste Systemfunktion 3 1 Anhang A text Steueranweisung 4 3 Text Systemfunktion Anhang A Textausgabe 1 9 Texte Anhang A Texte komprimieren 4 3 Text farbe Systemfunktion Anhang A Text InFeld Systemfunktion Anhang A Textstring Datentyp 2 6 Textumleitung Systemfunktion Anhang A Tochter Systemfunktion 2 2 Anhang A Typen von Daten 2 6 Umlaute 1 9 Unicode 1 9 Unicode Systemfunktion gt 1 9 Unterklassen 2 5 Variable Direktive 1 3 Variablen Bezeichner 1 3 globale 1 3 Anhang A G ltigkeitsbereich 1 3 lokale 1 3 Anhang A verbleibend Systemfunktion 2 8 Anhang A Vergleichsoperatoren 1 6 Verkn pfungen logische 1 6 vernichte Systemfunktion Anhang A Vernichten von Objekten 2 8 verschiebe Anweisung 2 2 Vokabel Syste
73. ar selbst pDie T r schlie t sich wieder mache selbst geschlossen Vorher ffnen_mit wenn a0bj2 Codekarte stop Ausf hineinlegen a0bj2 selbst hineinlegen2 wenn selbst istnicht geschlossen stop Ein kurzer hoher Piepton ert nt sonst passiert nichts mache selbst nicht geschlossen setze_Z nder selbst 1 stop Die T r schiebt sich fast ger uschlos auf als du die Codekarte kurz in den Schlitz steckst ffnen wenn Codekarte in Spieler wenn vorh_Befehl betreten mit der Codekarte n stop Ausf hineinlegen Codekarte selbst stop Dazu brauchst du deine Codekarte schlie en stop Das geht automatisch gibts_in Reaktorraum Oberdeck zielraum wenn aRaum Reaktorraum antworte Oberdeck antworte Reaktorraunm ist Verbindung geschlossen schlie bar verborgen Die Abfrage von vorh_Befehl bewirkt dass mit der Codekarte nicht gedruckt wird wenn die geschlossene T r betreten wird und sie implizit ge ffnet wird da es sonst zwei Klammers tze in einer Reihe g be was zwar nicht falsch aber auch nicht sch n ist 175 L sungen der Aufgaben e 12 Das Problem ist hier wieder dass man die Eigenschaft Ausg nge des momentanen Aufenthaltsraums des Diebs aufrufen m sste aber nicht wei ob hier Textausgegeben wird oder nicht daher legen wir zu jedem Raum den der Dieb betreten kann eine Eigenschaft NPC_Ausg nge an die eine Liste der m g
74. atz von zwei schlie t direkt an den von eins belegten an so dass der nicht existierende Eintrag eins 10 auf den Speicherplatz zugreift der zwei 0 zugedacht ist x Der Bezeichner eines Feldes ist f r ZETA nichts anderes als die Adresse im Speicher an der der f r das Feld reservierte Speicherplatz beginnt so dass eins 10 die beiden Bytes die an der Adresse eins 2 10 liest und sie als 16 Bit Zahl interpretiert Bei illegalen Indizes greift man mit dieser Methode auf beliebige Daten zu beim Schreiben auf Eintr ge mit illegalen Indizes kann man wichtige Daten zerst ren Eine weitere Schwierigkeit bei Feldern ist die Unterscheidung zwischen Strings und Word Feldern Eine Deklaration ohne weitere Angaben erzeugt ein Word Feld dessen Eintr ge zwei Bytes lang sind und als 16 Bit Zahl interpretiert werden Strings werden oft benutzt um Zeichenketten abzulegen bei denen es ausreicht wenn die Eintr ge die Werte von null bis 255 darstellen k nnen Mit eckigen Klammern greift man immer so auf ein Feld zu wie es seinem Typ entspricht und Einsteiger sollten immer diese Variante benutzen Trotzdem kann es Probleme geben zum Beispiel String Passwort Mississippi Routine schreibeText a lokal i solange a i charlali t Ein Aufruf der Routine schreibeText Passwort schreibt nun issip gefolgt von vielen unerkl rlichen Zeichen Warum a ist kein Feldbezeichner sondern eine Variable und daher wei ZETA nich
75. ausgegeben nachdem die Karre erfolgreich verschoben wurde Man kann in Vorher nat rlich auch eine Meldung vor der neuen Raumbeschreibung ausgeben aber man wei ja nicht immer ob das Verschieben gelingt Die Karre wird beim Betreten des neuen Raums nicht in der Beschreibung erw hnt nachher schon x Das Fahren und das Verschieben funktioniert nur wenn sich das Fahrzeug direkt im Raum befindet Wenn also das Skateboard auf einem Podest steht kann der Spieler nicht damit fahren x Wenn ein Fahrzeug nicht fest ist kann man es immer verschieben Im Beispiel des Skateboards ist das aber nicht besonders sinnvoll deshalb sollte man das Verschieben hier mit einer geeigneten Meldung abfangen genauso wie das Aufheben bei der Schubkarre explizit abgefangen wird x Normalerweise ist bei gehen das zweite Objekt null Wenn gehen jedoch von fahren oder verschieben_nach aufgerufen wird ist a0b65j2 das Fahrzeug So kann man seinen Code f r die Richtungen anpassen Ausg nge Norden wenn a0bj2 stop Mit dem a0bj2 kommst du nicht durch den schmalen Durchlass antworte Kammer x Der Befehl fahren hat auch eigenes Vokabular so dass man auch fahre mit dem Skateboard in die K che sagen kann Das Konzept der Fahrzeuge ist aber weitreichend so dass man eventuell eigene Verben wie reite oder rudere f r den Befehl fahren definieren sollte e Aufgabe 9 Konstruiere ein Ruderboot so dass man zu Fu nur auf dem Land mit
76. bale Variablen Globale Variablen sind Speicherpl tze f r Werte die von berall im Programm aus zug nglich sind Sie k nnen beliebige Datentypen enthalten Es k nnen bis zu 234 globale Variablen definiert werden mit Variable Name Name Wert Wert ist hier eine Konstante die den Anfangswert er Variablen angibt Wird kein Wert angegeben so ist der Anfangswert null Objekte Objekte sind Zusammenschl sse von Werten den so genannten Eigenschaften Objekte in ZETA haben au erdem eine Position in einem Objektbaum und k nnen Attribute haben Sie werden weiter unten genauer beschrieben Felder Felder sind Datenstrukturen die eine bestimmte Anzahl von 1 von einfachen Datenelementen enthalten k nnen Die Anzahl der Feldeintr ge ist konstant die Eintr ge k nnen sich ndern Ein Feld wird folgenderma en deklariert Feld Dimension um ein Feld mit Dimension Eintr gen zu erzeugen die zu Beginn des Spiels alle null sind oder Feld Werteliste um ein Feld mit den Eintr gen der Werteliste zu erzeugen oder 140 Anhang A Spezifikation der Sprache Feld Zeichenfolge um ein Feld von ZSCH Zeichen zu erzeugen dessen Eintr ge die Zeichen der angegebenen Zeichenfolge sind Strings sind Felder deren Eintr ge Bytes sind die nur Werte von null bis 255 annehmen k nnen Sie werden analog zu Feldern mit dem Schl sselwort String deklariert String Dimension String Werteliste String Zeichen
77. be Mehrere Kan le k nnen aktiv sein M gliche Werte f r k sind 1 f r den Bildschirm 2 f r ein Manuskript und 4 f r ein Protokoll der eingegebenen Befehle bsBreite gibt die Breite des Bildschirms in Zeichen an bsH he gibt die H he des Bildschirms in Zeichen an Char z gibt das Zeichen engl character mit dem ZSCH Wert z aus CursorPos x y positioniert den Cursor an Spalte x und Zeile y im oberen Fenster Die linke obere Ecke ist 1 1 CursorX gibt die momentane Spalte der Cursorposition an CursorY gibt die momentane Zeile der Cursorposition an Datentyp x gibt den Datentyp von x an M gliche Antworten sind Objekt Klasse Textstring Routine und nichts 153 Anhang A Spezifikation der Sprache Eingabekanal k aktiviert den Kanal k f r die Eingabe und deaktiviert alle anderen Eingabekan le M gliche werte von k sind null f r die Tastatur oder eins f r eine externe Datei erzeuge k erzeugt eine Instanz der Klasse k Wenn ein Objekt erzeugt wurde wird die Eigenschaft erzeugen des Objekts aufgerufen und die Fuinktion gibt das Objekt zur ck Wenn kein Objekt erzeugt werden konnte ist die Antwort null Kinder o gibt die Anzahl der Kinder des Objekts o an kopierefeld eins zwei n kopiert n Bytes von Feld eins nach Feld zwei lade l dt einen zuvor auf eine Datei gespeicherten Spielstand und setzt das Programm im geladenen Zustand fort Gibt null zur ck wenn das Laden
78. beArg kann man nicht nur auf die Argumente einer Routine zugreifen Mit Indizes von acht bis f nfzehn greift man auf weitere lokale Variablen zu wenn sie definiert sind mit Indizes von sechzehn bis 255 auf globale Variablen Das sollte aber besser vermieden werden denn diese Variablen haben ja alle feste Bezeichner Mit dem Index null zieht man einen Wert von Stapelspeicher und das sollte auf keinen Fall gemacht werden da sonst die Anweisungen durcheinanderkommen und die Z Maschine wahrscheinlich in einen irreparaben Zustand gebracht wird Alle anderen Indizes sind illegal Dass ein vern nftiger Index im Bereich von null bis Argumente angegeben wird muss vom Programmierer sichergestellt werden 10 2 Implizites jenach x Die Adventure Bibliothek benutzt h ufig eine Fallunterscheidung in Routinen die nicht ausdr cklich mit jenach angegeben ist vorher nehmen Stop Das geht nicht untersuchen sonst Stop Gro der selbst vist v Nichte Ww chE1g 3 Dies wird mit einem schmutzigen Trick gemacht ZETA behandelt alle Bereichsangaben vor einem Doppelpunkt die auf der untersten Ebene der Routine stehen als den Beginn einer jenach Anweisung die diese Bereiche gegen den wert der globalen Variable mit dem Index 255 berpr ft ZETA reserviert die Variablen 252 bis 255 als Register f r den internen Gebrauch Die Routine oben sieht in Wirklichkeit also so aus 129 10 Weitere Funktionalit ten vorher
79. bjekt Polizist Name Polizist Genus m Subst polizist m pom m polizeiobermeister m obermeister m bulle m Beschreibung Dieser Polizist tr gt die Kennzeichen eines Polizeiobermeisters drei gr ne Sterne und einen Oberlippenbart Immer Ein Polizist beobachtet gelangweilt das eher uninteressante Geschehen hier Vorher fragen jenach a0bj2 Wache Mein Revier ist die vierte Polizeiinspektion in Obersendling proklamiert der Polizist stolz Polizist Ich bin schon seit f nfzehn Jahren bei der Bereitschaftspolizei sonst Dar ber darf ich Ihnen leider nichts sagen Dienstgeheimnis Der Polzist wirkt nicht gerade berzeugt von dieser faulen 98 7 Das Modell der Spielwelt Ausrede stop erz hlen jenach a0bj2 Mord Kommen Sie mit das m ssen wir melden Der Polizist zerrt dich sanft aber bestimmt zur n chsten Wache verschiebe selbst nach Wache gehe_zu Wache sonst Ach ja Wissen Sie ich h re jeden Tag so viele Geschichten Der Polizist winkt m de ab stop k ssen stop Nicht bei dem Schn uzer geben stop Nein das w re Bestechung zeigen stop Wenn Sie Beweismaterial oder Fundsachen abgeben wollen gehe Sie doch bitte zur Wache Danke angreifen stop Der Polizist hat eine Pistole einen Gummikn ppel Handschellen und ein Funkger t mit dem er viele hnlich ausgestattet
80. chaft als erweiternd oder additiv deklariert werden Dies geschieht mit der Angabe bei der Definition der Eigenschaft Eigenschaft Vokabular Dann wird ein Feld von Eigenschaften definiert dem die Eintr ge aus der Klassendefinition angeh ngt werden Klasse M nze Vokabular qoldst ck m nze M nze Dublone Vokabular dublone Dublone Vokabular 3 Dublone Vokabular 0 dublone Dublone Vokabular 1 goldst ck Dublone Vokabular 2 m nze Ein Objekt kann Instanz mehrerer Klassen sein Zum Beispiel Objekt Tr ffel beerbt Nahrung Rarit t Hier werden zuerst alle Eigenschaften der Nahrung bertragen dann die der Rarit t wobei eventuell bereits geerbte Eigenschaften wieder berschrieben werden Wenn eine Eigenschaft also in beiden Klassen definiert ist wird die der Rarit t vererbt Der Tr ffel besitzt alle Attribute die bei der Nahrung oder der Rarit t oder beiden gesetzt sind Schlie lich k nnen auch Klassen von anderen Klassen erben 41 2 Objekte und Klassen Klasse Obst beerbt Nahrung N hrwert antworte 3 selbst Vitamine Dann ist Obst eine Unterklasse von Nahrung Eine Instanz von Obst erbt nat rlich alle Eigenschaften von Nahrung die nicht in der Definition von Obst berschrieben wurden Ob ein Objekt eine Instanz einer Klasse ist kann man mit folgender Bedingung pr fen Objekt beerbt Klasse In dieser Bedingung sin
81. chmaschine Genus f Subst maschine f waschmaschine f trommel f waschtrommel f deckel m Inhalt In der Trommel der Waschmaschine siehst du ein Liste Unterobjekte WM_Ablage umleiten darauflegen2 herunternehmen2 antworte WM_Ablage ist Beh lter fest nicht geschlossen schlie bar Objekt WM_Ablage Name Deckel der Waschmaschine Genus m Inhalt Oben auf der Waschmaschine lieg v_t Liste _ ein Liste ist Ablage verborgen Die beiden Befehle f r Ablagen werden nun umgeleitet auf das Unterobjekt WM_Ablage Da dieses Objekt kein eigenes Vokabular hat kann es nie direkt angesprochen werden und agiert hier nur als Ablage Inhalte von Unterobjekten werden automatisch angezeigt so dass hier kein zus tzlicher Code n tig ist Mit der Eigenschaft umleiten wird das angesprochene Objekt vor der berpr fung der G ltigkeit umgelenkt so dass auch nimm alles von der Waschmaschine funktioniert Mehr dazu in Abschnitt 9 6 x Unterobjekte kann auch eine Routine sein die ein Objekt als Argument hat Wenn das Objekt ein Unterobjekt sein soll muss mit einem wahren Wert geantwortet werden lI Die Methode eine Routine f r Unterobjekte zu benutzen ist zwar recht flexibel aber auch sehr ineffektiv Es ist vermutlich besser sich ndernde Unterobjekte in frei 90 7 Das Modell der Spielwelt gehaltene Eintr ge von Unterobjekt nachzutragen oder si
82. d Unterklassen ber cksichtigt Wenn es also ein Objekt Birne der Klasse Obst gibt sind die folgenden Bedingungen wahr Birne beerbt Obst Birne beerbt Nahrung 2 6 Verschiedene Datentypen Variablen und Eigenschaften von Objekten k nnen nicht nur Zahlenwerte annehmen sondern verschiedene Arten von Daten enthalten wie z B Texte in Anf hrungsstrichen Objekte Klassen Vokabeln in Hochkommas Attribute Eigenschaften oder Feldbezeichner Intern werden diese Daten nat rlich immer als Zahlen gespeichert So ist ein Text nichts anderes als die Adresse im Speicher an der er beginnt Vier Datentypen sind von besonderer Bedeutung Objekte Klassen Routinen und Texte Um zu erfahren welchen dieser Typen eine Variable speichert kann man die Systemfunktion Datentyp benutzen Sie gibt einen der folgenden Werte zur ck Objekt ein Objekt Klasse ein Objektklasse Routine eine Routine Textstring ein Text in Anf hrungszeichen nichts keiner dieser Typen Der Wert nichts bedeutet dass in dieser Variable ein Wert gespeichert ist der keinem der anderen vier Datentypen entspricht Es ist meist ein Zahlenwert Kann aber auch z B eine Vokabel sein 42 2 Objekte und Klassen Dazu ein kurzes Beispiel Objekt Ding in Gegenstand alpha 1 beta Sic transit gloria mundi gamma antworte zufall 0 8 15 delta Gegenstand epsilon epsilon Die Eigenschaften von Ding haben dann folgende Datentypen Datentyp Ding
83. das Ende der Liste zu markieren Danach folgen die Satzbausteine die je drei Bytes belegen Das erste Byte gibt den Typ des Satzbausteins an die letzten Bytes enthalten ein zum Satzbaustein geh rendes Datenwort Ist das erste Byte null so wird das Satzmuster abgeschlossen Es gibt folgende Typen von Satzbausteinen Endmarker direktes Objekt sb indirektes Objekt sb p Pr position ein explizit angegebenes Wort eine Routine UO P wN Ho 134 11 Daten f r den Parser Der Inhalt des Datenworts ist eine Vokabeladresse 3 und 4 die Adresse einer Routine 5 oder ein vorher definierter Satzbaustein im Fall des indirekten Objekts enth lt das erste Byte den Satzbaustein das zweite die Pr position Satzbausteine m ssen deklariert werden bevor sie in Satzmustern verwendet werden Satzbaustein dasObjekt Die internen Nummern von Satzbausteinen sind immer Vielfache von 256 so dass sb p immer eindeutig ist Folgende Definition Verb ziehe dasObjekt gt ziehen dasObjekt an gt anziehen erzeugt diese Liste von Satzmustern 00 ziehen Befehl Wort 02 1 direktes Objekt 03 dasObjekt Satzbaustein Wort 05 0 Ende des Satzmusters 06 anziehen Befehl Wort 08 1 direktes Objekt 09 dasObjekt Satzbaustein Wort 11 3 Pr position 12 tan Vokabel Wort 14 0 Ende des Satzmusters 15 Ende der Satzmusterliste Wort TE aes N chste Satzmusterliste Die Trennung der Typen 3 und 4 erscheint etwas willk
84. de bereit Das entspricht 204 800 Bytes ein Kilobyte hat 1 024 nicht 1 000 Bytes Diese Einstellungen werden meist nicht ver ndert es sei denn es ist zuwenig Speicher auf der Maschine vorhanden oder der Quelltext ist so gro dass der in einem Bereich bereitgestellte Speicher nicht ausreicht In beiden F llen wird dem Autor gesagt wie er das Problem beheben kann Als letzter Ausweg k nnen Daten die w hrend des Kompilierens ben tigt werden mit der Option t auf tempor re Dateien ausgelagert werden Die Dateien fungieren als Speicher und 58 4 Der Compiler und seine Optionen werden wieder gel scht nachdem die Spieldatei erzeugt wurde Mit c kann man einen Trockenlauf starten Nur die Compiler Parameter werden ausgegeben Eine weitere Option ist die Angabe von Verzeichnis Pfaden nach einem Plus Zeichen Dateien die w hrend des Kompilierens eingebunden werden sollen werden in allen angegebenen Pfaden gesucht Alle Pfade werden der Reihe nach abgearbeitet der erste Treffer wird genommen Der einzige Pfad der bereits angegeben ist ist das momentane Arbeitsverzeichnis Diese Angaben erm glichen es ein wenig Ordnung zu halten und verschiedene Bibliotheken bequem aus verschiedenen Verzeichnissen anzuziehen Eine andere Anwendung w re das Testen einer neuen Version einer Bibliothek Statt qlib gibt man dann qlib_beta an um die neuen Dateien ins Projekt einzubinden und deren Funktion zu berpr fen Das geht
85. den 1 8 Felder Man kann Variablen in Strukturen zusammenfassen Die einfachste Methode dies zu tun sind Felder Dies sind Listen von Variablen deren Eintr ge mit ihrer laufenden Nummer angesprochen werden k nnen Zum Beispiel k nnen wir so einen Sto Karten erzeugen Feld Karten 32 Dieses Feld hat 32 Eintr ge die mit Karten 0O Karten 1 Karten 2 Karten 31l angesprochen werden k nnen Zu Beginn haben diese Eintr ge alle den Wert null Nun soll aber der Index die Position im Sto angeben der jeweilige Eintrag den Wert der Karte der ebenfalls zwischen 0 Herz Sieben und 31 Kreuz As liegt Routine KartenOrdnen lokal i schleife i 0 i lt 32 i Feld i i 21 1 Grundlagen Nun sind die Karten alle sch n geordnet jede Karte taucht genau einmal im Sto auf Nun wollen wir sie mischen Routine TauscheKarten lokal a b GC solange a b a Zufall 32 1 b Zufall 32 1 c Kartenlal Kartenl la Karten b Karten b c Routine KartenMischen n lokal i schleife i 0 i lt n i TauscheKarten Mit TauscheKarten a b kann man zwei Karten die zuf llig bestimmt werden im Stapel austauschen Mit KartenMischen n wird dies n Mal gemacht Nach KartenMischen 100 sollte der Sto gut gemischt sein Ein wenig Kosmetik noch zur Ausgabe des gemischten Sto es Routine Kartenname n jenach n 8 0 Herz T Karo 2 Pik s 3 Kreu
86. den Klammern ver ndert werden zum Beispiela b c Alle arithmetischen Operationen und Vergleiche werden vorzeichenbehaftet durchgef hrt Logische Operatoren haben als Ergebnis stets einen der Werte wahr eins oder falsch null Bitweise Operatoren betrachten die Werte als 16 Bit Werte ohne Vorzeichen Einige Operatoren vereinfachen die Zuweisung ihre Pr zedenz ist wie die der einfachen Zuweisung a t b entspricht a a b a b entspricht a a b a b entspricht a a b a b entspricht a a b a b entspricht a a b a amp b entspricht a a amp b a b entspricht asa b a lt lt entspricht a a lt lt b a gt gt entspricht a a gt gt b Zuweisungen sind Ausdr cke die als Ergebnis den Wert der linken Seite nach der Zuweisung haben a b 5 weista den Wert von b c zu der 5 ist Nach dieser Anweisung ist der Wert von a und b f nf a b 5 erh ht b um f nf und weist a den neuen Wert von b zu Meistens werden Zuweisungen aber als Anweisung eingesetzt ohne dass dabei ihr Ergebnis ber cksichtigt wird Ausdr cke die ausgewertet werden aber das Ergebnis nicht verwenden sind nicht erlaubt und werden nicht kompiliert Die einzigen Ausdruecke die alleine stehen koennen sind Zuweisungen Inkremente und Dekremente 143 Anhang A Spezifikation der Sprache Ausnahme ist hier ein Text in Anf hrungszeichen oder eine Konstante die einen Text enth lt Diese Ausdr cke geben dies
87. denen eine Null zum Markieren des Endes angeh ngt wird Feld geheimesWort uruguay Diese Deklaration ist gleichwertig mit Feld geheimesWort u rota mary O y ut a va 0 Die Eintr ge des Feldes k nnen sich genau wie bei anderen Feldern aber im Gegensatz zu anderen Texten in Anf hrungszeichen ndern x Folgende Definition macht hingegen etwas anderes Sie erzeugt ein Feld mit den Adressen von f nf konstanten Zeichenketten Feld L nderMitU Uganda Ukraine Ungarn Uruguay Usbekistan Die zweite komplexere Datenstruktur Objekte werden im n chsten Kapitel behandelt x Ein Feld kann mit der Direktive String anstelle von Feld definiert werden Dann sind die Eintr ge nur ein Byte lang und k nnen nur Werte von 0 bis 255 annehmen Diese Art von Feldern wird oft f r Zeichenketten verwendet da die Codes f r darstellbare Zeichen in 23 1 Grundlagen diesem Bereich liegen Das Uruguay Beispiel w re typischerweise als String deklariert worden aber auch das Karten Beispiel h tte mit dieser Speicherplatz sparenden Methode funktioniert Die Eintr ge von Feldern die mit Feld deklariert werden sind dagegen normale ZETA Zahlen die zwei Bytes belegen x Neben der M glichkeit zu jedem Feld einen Index in eckigen Klammern anzugeben gibt es zwei weitere Operatoren um auf die Eintr ge in einem Feld zuzugreifen Mit gt liest man von einem Feld als ob es ein String w re mit gt wie
88. des momentanen Spielerobjekts Au erdem hat jeder Beh lter und jede Ablage eine Kapazit t genau wie der Spieler 158 Anhang B berblick ber die Bibliothek Dekorationen R ume k nnen wie alle Objekte Vokabular besitzen Dieses bezieht sich auf den Raum selbst nicht wie in Inform auf unwichtige Objekte So kann man sich z B mit betreten auf R ume beziehen Unwichtige Details in der Raumbeschreibung k nnen mit der Klasse Unwichtig erzeugt werden die nichts anderes tut als Vokabular abzufangen Beh lter Ablagen und Unterobjekte Objekte die sichtbare Tochterobjekte haben m ssen entweder ein Beh lter oder eine Ablage sein jedoch nie beides gleichzeitig Ein Beh lter ist ein Objekt in dem sich andere Objekte befinden Damit man die Objekte sehen kann darf der Beh lter nicht geschlossen sein oder er muss das Attribut transparent besitzen Im letzten Fall k nnen die Objekte im Beh lter jedoch nicht ber hrt werden Die Befehle lauten hineinlegen und herausnehmen Eine Ablage ist ein Objekt auf dem sich andere Objekte befinden die immer dann sichtbar und ber hrbar sind wenn es die Ablage selbst ist Die Befehle lauten hier darauflegen und herunternehmen Eine weitere M glichkeit dass Tochterobjekte sichtbar sind ist dass eine Person diese Objekte bei sich tr gt Wenn diese Person transparent ist kann man diese Objekte sehen Normalerweise kann man Objekte die eine Person bei sich tr gt nicht anfassen ode
89. des Buchs nachschl gt Danksagungen Teil l Die Sprache von ZETA 1 Grundlagen 1 1 Erste Schritte Z Code ist bin rer Code und damit f r den Menschen nicht lesbar ZETA wandelt eine lesbare Beschreibung des Spiels den so genannten Quelltext in eine bin re Spieldatei im Z Code um Diese Spieldatei kann dann mit einem Interpreter ausgef hrt das erzeugte Spiel gespielt werden Dieses Handbuch beschreibt den Aufbau und die Syntax des Quelltextes Der Quelltext ist ein ASCH Dokument der in jedem Texteditor erstellt werden kann Bei umfangreicheren Textverarbeitungsprogrammen muss allerdings darauf geachtet werden dass keine Formatierungen abgespeichert werden Die Quelldatei darf nur reinen Text enthalten Es empfiehlt sich einen Editor zu verwenden der keine Formatierngen zul sst Wichtiger ist eine gute Suchfunktion 1 2 Routinen und Anweisungen Unser erstes Programm ist noch recht simpel es soll einfach den Text Hallo Welt auf dem Bildschirm ausgeben Der Quelltext dazu sieht so aus Ein erstes Beispiel Hauptprogramm Hallo Welt Die erste Zeile im Beispiel wird von ZETA ignoriert Man nennt dies einen Kommentar hier kann der Programmierer Notizen einf gen um den berblick im Quelltext zu behalten Wie in C oder Java gibt es zwei Arten von Kommentaren ZETA ignoriert alles was auf einer Zeile nach einem doppelten Schr gstrich kommt und alles was zwischen und steht Wenn m
90. die Eigenschaft vernichten aufgerufen Vokabel x schreibt die Vokabel an der Adresse x Wortumbruch w schaltet den Wortumbruch im oberen Fenster ein w 1 oder aus w 0 zufall x Wenn mehrere Argumente bergeben werden ermittelt die Funktion zuf llig eines der Argumente als Antwort Ansonsten bestimmt die Funktion eine Zufallszahl im Bereich von eins bis x wenn x positiv ist setzt die Saat des Zufallszahlengenerators auf x wenn x negativ ist oder initialisiert den Zufallszahlengenerator des Interpreters wenn x null ist 156 Anhang B berblick ber die Bibliothek Nicht aktualisierte Arbeitsfassung Das Modell der Spielwelt R ume und Richtungen Die Spielwelt besteht aus R umen Objekten die keine Mutter haben und die zur Klasse Raum geh ren Diese R ume sind miteinander durch Richtungen verbunden Richtungen sind Objekte der Klasse Himmelsrichtung die sich ein einem bestimmten Objekt der Windrose befinden Die Ausg nge eines Raumes werden in dessen Eigenschaft Ausg nge beschrieben Das Richtungsobjekt wird als Argument und als Wert eines impliziten jenach bergeben die Antwort ist entweder ein Raum oder ein Verbindungsobjekt oder einer der Werte falsch oder wahr Wenn die Antwort falsch ist so wird eine Standard Absage geschrieben entweder aRaum Aus nge nichts oder ein Lib Text Der wichtigste Befehl zur Fortbewegung lautet gehen und erwartet eine Himmelsrichtung Ein weiterer Befehl
91. e Ein Kreuzer Marke aus Bayern und eine Wohlfahrtsmarke Damit dies funktioniert m ssen Objekte die Listengruppen repr sentieren die Eigenschaft Anzahl haben Der Wert von Anzahl wird automatisch beim Erzeugen der Liste aktualisiert x Das Gruppenobjekt ist nur ein Hilfsobjekt das kein Vokabular hat und nirgendwo im Spiel auftauscht x Weil niedrige Zahlen von ZETA oft als Objekte interpretiert werden sollten Listengruppen die Objekte ohne eigenes Format einfach nur gruppieren am besten negative Werte haben Die Gruppierung erfolgt immer auch wenn 1__gruppieren nicht gesetzt ist x Nat rlich kann Listengruppe auch eine Routine sein die mit einem Objekt oder einem anderen Wert antwortet Nur wenn null geantwortet wird werden die Objekte nicht geordnet x Die Eintr ge in der Liste werden im Feld Listenfeld abgelegt das Liste Anzahl Eintr ge hat die bei null beginnen Die Unterliste Anzahl Eintr ge der momentan betrachteten Untergruppe stehen im Feld ab dem Eintrag mit dem Index Unterliste Startwert 122 8 Beschreibungen x W hrend eine Untergruppe geschrieben wird ist die Eigenschaft Inhalt der Liste gleich dem ersten Objekt der Unterliste ansonsten ist Liste Inhalt immer null So kann der Name gegebenenfalls f r Gruppen angepasst werden Unterliste Inhalt enth lt dann das Objekt mit dem Gruppennamen f r die Unterliste x Ein Problem wenn man im Namen des Gruppenobjekts Nebens tze verwendet ist dass man nich
92. e Kollegen herbeirufen kann Besser nicht Auch hier ist aOb j2 das Hilfsobjekt unbekanntes_Ob jekt wenn die Eingabe keinem realen Objekt im Spiel entspricht Eine weitere M glichkeit ist anderen Personen Anweisungen zu geben Diese Anweisungen sind genau so aufgebaut wie die Anweisungen des Spielers an den Protagonisten nur dass der Empf nger der Anweisungen der so genannte Akteur der Anweisung mit einem nachfolgenden Komma vorangestellt wird Kapit n M ller geben Sie mir die Pistole In diesem Fall ist der Akteur Kapit n M ller der Befehl ist geben aObj ist der Spieler und aObj2 die Pistole Wenn der Befehl nicht vom Spieler selbst ausgef hrt wird wird die Ausf hrung weitergeleitet an die Eigenschaft Anweisungen des Akteurs Anweisungen gehen stop Nern ich Bleibe hier nicht_verstanden stop Der Polizist schaut dich verst ndnislos an 99 7 Das Modell der Spielwelt sonst stop Ich bin nur meinem Dienstherrn verpflichtet sonst niemandem Dieses Beispiel ist nur sehr kurz eine Anweisung an den Polizisten bewirkt nur eine Absage Ein solches Verhalten ist wohl der Regelfall Wenn Akteure komplexere Handlungen ausf hren sollen muss dies explizit implementiert werden Die Bibliothek hat Regeln daf r was passiert wenn der Spieler einen Gegenstand aufhebt f r beliebige Akteure existieren diese Regeln nicht Wenn die Anweisungen des Akteurs einen falschen Wert zur ckgeben
93. e durch berschreiben mit nichts wieder zu entfernen 7 4 Begehbare Objekte Sitze und Fahrzeuge Nicht immer befindet sich der Spieler direkt in einem Raum viele Spiele implementieren Objekte die man betreten kann Beispiele f r solche Objekte die nicht gro genug sind um ein eigener Raum zu sein sind Podeste mannshohe K fige Fahrzeuge oder abgetrennte Bereiche eines Zimmers wie Kochnischen und begehbare Kleiderschr nke Solche Objekte bekommen das Attributbet retbar sie k nnen dann betreten oder verlassen werden In der Regel sind betretbare Objekte au erdem ein Beh lter oder eine Ablage Als Beispiel Objekt gt Schrank Name gro e Kleiderschrank Genus m Adj gro enorm Subst schrank m kleiderschrank m Beschreibung In diesem Kleiderschrank k nnte man eine genze Famile verstecken Immer Ein enorm gro er Kleiderschrank steht an der Wand Innenansicht Du stehst in einem gro en Kleiderschrank zwischen den Kleidern deiner Frau wenn selbst ist geschlossen Der Schrank ist geschlossen ist betretbar Beh lter fest Innenansicht ist eine Eigenschaft die ausgegeben wird wenn sich der Spieler in diesem Objekt befindet Wenn der Raum in dem dieses Objekt steht noch sichtbar ist weil das Objekt nicht geschlossen ist oder weil das Objekt transparent oder eine Ablage ist wird die Innenansicht an die Raumbeschreibung angeh ngt wenn das Obj
94. ebenheiten Diese Bibliothek ist so ausgelegt dass sie leicht verwendbar ist gleichzeitig aber problemlos an die W nsche des Autors angepasst werden kann Die Beschreibung dieser Bibliothek teilt sich in vier Kapitel auf Dieses Kapitel beschreibt die grundlegende Vorgehensweise der Bibliothek In den folgenden Kapiteln werden das Modell der Spielwelt die M glichkeiten zur Beschreibung von Objekten R umen und Listen und schlie lich die Fuktionsweise des Parsers erl utert Als Einstieg soll hier als Beispiel die Anfangsszene eines Klassikers betrachtet werden Die so genannten klassischen Spiele sind zwar etwas aus der Mode gekommen aber selbst avantgardistische Adventures halten sich an die Grundregeln aus der Fr hzeit des Genres Der folgende Code ist die erste Version eines mit der z Lib geschriebenen Adventures Konstante Story Das Gro e Unterweltreich Konstante Copyright Ein interaktives Plagiat datei zlib zin Routine Anfang aRaum Westlich_des_Hauses Raum Westlich_des_Hauses Name Westlich des Hauses Beschreibung Du stehst auf freiem Feld westlich eines kleinen wei en Hauses dessen T r mit Brettern zugenagelt ist Dies ist ein minimales Spiel Es enth lt nur einen Anfangstext einen Raum und keine weiteren Objekte Trotzdem kann man es kompilieren und sogar spielen Dadurch dass die Bibliothek die sich in der Datei zlib zin befindet eingebunden wird kennt das S
95. eht wird in nicht gefunden beschrieben x Ein wahrer Wert der globalen Variable au erdem bedeutet dass dieser Liste einzelne Objekte vorangestellt wurde weil sie eine Erst oder Immer Beschreibung haben Dies 88 7 Das Modell der Spielwelt kann man zum Anpassen der Inhaltsangabe verwenden x Mann kann auch selbst den Inhalt eines Objekts ausgeben mit zeige_Inhalt obj Umbruch Diese Routine zeiht den Inhalt des Objekts obj Diese Anzeige ist rekursiv so dass auch der Inhalt von Beh ltern oder Ablagen die in oder auf obj sind aufgelistet werden Diese Routine ber cksichtigt Erst und Immer das hei t die Liste wird ausgegeben als ob sie in einer Raumbeschreibung auftaucht Wenn Umbruch gleich wahr ist wird vor der Inhaltsliste ein Absatz geschrieben bei anderen wahren Werten von Umbruch beim ersten Mal ein Zeilenumbruch vor eventuell folgenden Listen ein Absatz geschrieben x Die Pr positionen die verwendet werden sind in und aus bei einem Beh lter auf und von bei einer Ablage Man kann also Objekte die eigentlich eine Ablage sind als Beh lter definieren wenn man die Pr position richtig ausgeben m chte zum Beispiel im Regal Die Bibliothek erkennt wenn ein Objekt in eine Ablage oder auf einen Beh lter gelegt werden soll und lenkt den Befehl passend um Objekte auf einer Ablage sind immer sichtbar Beh lter verhalten sich hier etwas anders sie k nnen geschlossen sein dann sind
96. eiben will so muss man sie innerhalb des Textes doppelt setzten damit ZETA wei dass es nicht das Ende des Textes sein soll Das sagt Holmes ist elementar mein lieber Watson Weiterhin gibt es einige besondere Zeichen die wie die Notationen f r den Zeilenumbruch und f r einen Absatz mit dem Backslash beginnen Diese sind haupts chlich dazu da um Zeichen mit Umlauten oder Akzenten auf Computern zu schreiben auf deren Tastatur diese 25 1 Grundlagen Buchstaben nicht vorhanden sind Zun chst gibt es Akzente die auf den nachfolgenden Buchstaben gesetzt werden Dabei sind nicht alle Kombinationen erlaubt anstatt der angegebenen k nnen auch die entsprechenden Gro buchstaben angegeben werden N Umlaut oder Trema avf a e i 0 u und y Nr Accent aigu auf a e i o u und y N Accent grave auf a e i o und u Ne Zirkumflex auf a e 1 o und u r Tilde auf a n und o Schlie lich gibt es noch besondere Zeichenkombinationen die spezielle Zeichen oder Ligaturen erzeugen ss scharfes aa AA schwedisches o O skandinavisches ae AE skandinavische E Ligatur oe OE franz sische E Ligatur EarNct Cedille et ET isl ndisches Eth th TH isl ndisches Thorn gt gt lt lt spitze Anf hrungszeichen BI NTR spanische Ausrufe und Fragezeichen LL Pfund Sterling Statt dieser Kombinationen k nnen immer die passenden Buchstaben direkt angegeben werden Wer also eine deutsche Tas
97. ein Wahrheitswert Der Wert falsch bedeutet dass die Bedingung falsch ist alle anderen Werte bedeuten dass die Bedingung wahr ist Die Angabe einer zweiten Anweisung nach sonst ist optional sonst bezieht sich immer auf das zuletzt definierte wenn wenn die Zugeh rigkeit nicht durch geschweifte Klammern eindeutig ist 145 Anhang A Spezifikation der Sprache Eine Kurzform von wenn in der lange wenn dann Konstrukte eine Variable gegen mehrere konstante Werte pr fen ist jenach jenach Ausdruck Bereiche sonst Anweisungen Bereiche haben hier die Form Bereich Anweisungen Ein Bereich sind konstante Werte die durch Kommas getrennt sind oder Bereiche von konstanten Werten in der Form von bis Der spezielle Bereich sonst deckt alle bisher nicht behandelten F lle ab und muss als letzter stehen Die Anweisungen sind eine beliebige Anzahl von Anweisungen auch keine die nicht mit geschweiften Klammern gruppiert werden Die Ausf hrung der Anweisungen wird mit der n chsten Bereichsdefinition beendet und nach der letzten geschweiften Klammer fortgesetzt Schleifen Die solange Schleife hat die Form solange Bedingung Anweisung F r Bedingung und Anweisung gilt das bei wenn Gesagte Die Anweisung wird solange wiederholt bis die Bedingung falsch ist Die Bedingung wird vor Ausf hrung der Anweisungen berpr ft so dass die Anweisungen nicht ausgef hrt werden wenn die Bedingung bei der ersten berpr fung falsc
98. eisung verschiebe Objekt nach Objekt2 kann Objekt im Objektbaum nach Objekt2 verschoben werden Objektl ist dann die lteste Tochter von Objekt2 Mit entferne Objekt kann man ein Objekt aus dem Baum entfernen so dass es die Mutter nichts hat Attribute in einem Objekt werden mit mache Objekt Attributliste gesetzt wobei beliebig viele Attribute angegeben werden k nnen Die Attribute k nnen auch durch ein oder nicht negiert werden dann werden sie gel scht Die Schleife alleObjekte Variable Anweisungen durchl uft alle Objekte nacheinander in der Reihenfolge wie sie im Quelltext definiert wurden Klassen 149 Anhang A Spezifikation der Sprache Objekte k nnen Eigenschaften und Attribute von einer Anzahl von Klassen erben in dem eine Liste von Klassen als Klassenliste angegeben wird Ein Objekt besitzt ein Attribut wenn es eine der Klassen besitzt Eigenschaften werden von links nach rechts in der Liste vererbt das hei t Eigenschaften von weiter rechts stehenden Klassen ersetzen eventuell bereits von anderen Klassen geerbte Eigenschaften Die zul tzt angegebene Klasse ist dominant Beim Vererben werden alle Eigenschaften ersetzt es sei denn es handelt sich um gemeine Eigenschaften die zuvor mit als erweiternd definiert wurden Klassen m ssen definiert werden bevor sie an andere Objekte vererben k nnen die Definition sieht folgenderma en aus Klasse Name Anzahl Klassenk rper Der Klassenk
99. ekt die Sichtgrenze ist wird nur die Innenansicht gezeigt Im gro en Kleiderschrank Du stehst in einem gro en Kleiderschrank zwischen den Kleidern deiner Frau Der Schrank ist geschlossen Giovanni der Nachbar ist hier Er friert 91 7 Das Modell der Spielwelt Au erdem siehst du hier eine Bauanleitung und eine kleine Schachtel x Oftistes einfacher ein betretbares Objekt als einen anderen Raum zu implementieren esonders dann wenn man die Objekte im Raum aus diesem Objekt heraus nicht sehen kann Objekte auf denen man sitzen oder liegen kann sind auch betretbar ZETA unterscheidet zwischen den Befehlen sitzen stehen und liegen f hrt sie aber alle auf betreten zur ck Wenn es wichtig ist in welcher Position man auf einem Objekt ist zum Beispiel bei einem Sofa auf dem man liegen sitzen oder seltener stehen kann muss dieses Objekt die Eigenschaft Sitzpositionen besitzen Diese Eigenschaft enth lt eine Liste der erlaubten Positionen die erste Position ist die die verwendet wird wenn die Position aus dem Befehl nicht eindeutig hervorgeht Ein Sofa auf dem man sitzen und liegen kann s he so aus Objekt gt Sofa Name rot e Ledersofa Genus n Adj rot teuer Subst sofa n ledersofa n couch f Beschreibung Sehr extravagant und sehr teuer Sitzpositionen liegen sitzen Immer Ein rotes Ledersofa steht unter dem Fenster ist fest betretbar Ablage Wenn der
100. ekt wie ein Eigenname behandelt wird also immer ohne Artikel ausgegeben wird Name Tamara Durango Genus f Eigenname Name Franks alt e Kaffeetasse Genus f Eigenname Wenn ein Objekt immer mit dem bestimmten Artikel anstelle des unbestimmten ausgegeben werden soll setzt man immer_bestimmt Name Smaragd der Ewigen Weisheit Genus m immer_bestimnt Mit einige oder etwas wird anstelle des unbestimmten Artikels einige f r Mehrzahlobjekte etwas f r nicht quantifizierbare Objekte in der Einzahl benutzt Name Kieselsteine Genus p einige Name Weihwasser Genus n etwas 115 8 Beschreibungen x Die Eigenschaften Name und Genus k nnen nat rlich eine Routine sein Die Kurzstrings und Sonderkonstanten gelten dann genau wie bei einem Text x In speziellen F llen muss man den Namen von Hand anpassen damit er in allen F llen korrekt ausgegeben wird Dann muss man auf einige globale Variablen zur ckgreifen die den momentanen Ausgabemodus enthalten Die Variable __Kasus beschreibt den Fall in dem der Name ausgegeben werden soll und enth lt einen der konstanten Werte Nominativ Genitiv Dativ oder Akkusativ Die Variable __Genus enth lt den Genus des Objekts ohne Sonderkonstanten das hei t reduziert auf p m f oder n __Artikel beschreibt ob das Objekt mit bestimmtem def_Art unbestimmtem indef_Art oder ohne Artikel ohne_Art ausgegeben werden soll Zur
101. ekte in Sichtweite e Vorher des ersten Objekts a0b 7 e Vorher von a0b 2 gepr ft auf den Pseudobefehl W hrend e Aktion des jeweiligen Befehls e Meldung des ersten Objekts a0b e Meldung von a0bj2 e Erfolg des Befehls wird bekannt gegeben Nachher e Nachher des ersten Objekts a0b e Nachher von a0bj2 e Nachreaktion aller Objekte in Sichtweite e Nachreaktion des momentanen Aufenthaltsraums e Nachher der Lib Objekte Die R ckgabe von wahr oder einem anderen von null verschiedenen Wert aus einer dieser Routinen bricht die Kette der Aktionen sofort ab Es wird davon ausgegangen dass der Grund des negativen Ergebnisses dem Spieler mitgeteilt wurde In jedem Fall werden nach Durchf hrung der Aktion die folgenden Dinge durchgef hrt e Die globale Variable Z ge wird aktualisiert e Stunden und Minuten werden aktualisiert e Alle D monen und Zeitz nder werden gehandhabt e Alle Jede_Runde Eigenschaften werden ausgef hrt e Objekte bekommen das Attribut bewegt e Die Punkte werden berpr ft und nderungen ausgegeben Meta Befehle werden direkt ausgef hrt ohne M glichkeit sie abzufangen da sie als nicht zur Spielwelt geh rend betrachtet werden Ein anderer Befehl kann ausgef hrt werden wenn die Routine Ausf hrung xBefehl xObj x0bj2 stumm aufgerufen wird Jedes der Objekte kann nichts sein Wenn stumm einen wahren wert hat wird der Erfolg des Befehls nicht bekannt gegeben Fehlschl ge des Befehls werden immer beka
102. elbst hat Nachbarr ume lokal n selbst Nachbarr ume solange n wenn selbst Nachbarraum n aRaum antworte wahr 170 L sungen der Aufgaben Vorher betreten gehen sonst stop Das ist Verbindung verborgen fest Zu jedem Raum gibt es dann nur ein Verbindungsobjekt das mit gibts_in in die Nachbarr ume verschoben wird die durch eine Objektliste in dessen Eigenschaft Nachbarr ume abgelegt werden Zum Beispiel Raumverbindung Name Flur Genus m Subst flur m gang m korridor m Nachbarr ume Wohnzimmer Esszimmer Bad G stetoilette K che Kinderzimmer Elternschlafzimmer G stezimmer Vorraum Die Himmelsrichtungen werden damit bedeutungslos wer sie gar nicht erst als Vokabel zulassen m chte kann die Richtungsobjekte ersetzen oder deren Definition in der Bibliothek mitkeine_Himmelsrichtungen unterbinden e7 F r die L sung definieren wir eine Klasse f r R ume bei der Schlucht dort kann dan die Planke abgelegt werden Die Eigenschaft andere _Seite enth lt den Raum auf der anderen Seite der Schucht per Default eine Absage Klasse Schluchtraum beerbt Raun andere_Seite Du kannst hier nicht ber die Schlucht gehen Objekt Planke Name Holzplanke Genus f Adj lang stabil Subst planke f holzplanke f brett n holzbrett n Beschreibung wenn selbst ist Verbindung stop Die Planke liegt quer ber der Schluch
103. eldbeutel ein 50 Zetmid St ck in seinen Geldbeutel bef rdern Analog dazu gibt es die Eigenschaft zerst ren die beim Zerst ren des Objekts aufgerufen wird Klasse Gigolo 16 Name erzeugen lokal r selbst Name Zufall Giovanni Luigi Carlo Luca Giuseppe Erangesco r r erzeuge Rose wenn r verschiebe Rose nach selbst zerst ren lokal x Tochter selbst y solange x y Schwester x wenn x beerbt Rose zerst re x x yi Wieviele Instanzen einer Klasse noch erzeugt werden k nnen kann man mit der Systemfunktion verbleibend k ermitteln Zu Beginn des Spiels w re verbleibend Gigolo sechzehn Wenn dieser wert null ist gibt ein weiteres erzeuge k anstelle eines Objekts nichts zur ck 47 3 Systemfunktionen und Besonderheiten 3 1 Eingabe von Text Ein Textadventure muss nat rlich die Eingabe von Text erm glichen um es spielbar zu machen und selbst einfachere Programme ben tigen ab und zu die Kommunikation mit dem Benutzer Die einfachste Art der Interaktion ist der einfache Tastendruck der mit der Funktion Taste abgefragt wird Diese Funktion wartet solange bis eine Taste gedr ckt wird und gibt den ZSCH Code der gedr ckten Taste zur ck Routine JaOderNein lokal t Bitte antworten Sie mit j a oder n ein schleife t Taste wenn t j antworte wahr wenn t n antworte falsch Die Funktion Taste schre
104. elder oder Objekte nach ihrer Adresse bergeben call by reference Das hei t dass eine Variable stets eine Kopie der Variable f r die jeweilige Routine ist die beim Aufruf angefertigt wird Innerhalb der Routine kann sie ver ndert werden aber dies hat f r die aufrufende Routine keine Konsequenzen Eintr ge von Feldern die bergeben werden bleiben auch nach Verlassen der Routine ver ndert Es wird keine lokale Kopie des Felds angelegt lediglich eine Kopie der Feldadresse Diese k nnte dann wieder ohne Konsequenzen f r andere Routinen ge ndert werden Folgendes Programm ersetzt daher zwar alle i durch andere Vokale zerst rt aber die einzige im Speicher vorhandene Kopie des Passworts Routine schreibeText String a lokal i solange ali wenn ali l i alir Zufall rap Felt E ot I char alit t Folgende Routine schreibt eine ver nderte Version des Passworts zerst rungsfrei Routine schreibeText String a lokal i solange a wenn Id i i i a 74 char Zufall a sonst char ali l i 5 Fehler suchen und beseitigen 75 Teil Il Die Adventure Bibliothek 6 Einf hrung in die Bibliothek 6 1 Aller Anfang Die Adventure Bibliothek oder kurz z Lib ist das Herzst ck eines Textadventures Sie enth lt den Parser die Regeln zur Ausgabe von Objekt und Raumbeschreibungen und viele vorgefertigte Konzepte f r h ufig in Adventures vorkommende Beg
105. en alias Synonym Symbol Das ist in der Regel nicht sehr n tzlich im Gegenteil Die Eindeutigkeit der Bezeichner geht dadurch verloren Einigen Leuten gefallen aber die deutschen Schl sselw rter von ZETA nicht die die Eleganz und Knappheit der aus anderen Programmiersprachen bekannten englischen Keywords entbehren Dies kann man mit alias ndern alias if wenn alias else sonst alias while solange alias switch jenach Hier werden keine Anf hrungszeichen gesetzt Das Synonym darf noch nicht verwendet worden sein und das Symbol zu dem ein Synonym definiert wird muss bekannt sein x Die alten Symbole werden nicht ersetzt ZETA versteht nun if und wenn und behandelt sie beide gleich als Anweisung f r eine Bedingung 64 4 Der Compiler und seine Optionen Der Z Code erlaubt es Text zu komprimieren indem h ufig wiederkehrende Textfragmente nur einmal abgelegt werden und im laufenden Text durch einen Platzhalter dargestellt werden Eine M glichkeit dies zu tun ist Kurzzstrings zu definieren eine weitere sind Abk rzungen die mit abk Textfragment definiert werden k nnen Bis zu 64 solcher Abk rzungen k nnen definiert werden bevor der erste Text in G nsef chen im Quelltext auftaucht Nur wenn die Option a gesetzt ist werden diese Abk rzungen jedoch benutzt Automatisch wird dann jeder Text auf die definierten Textfragmente hin untersucht die durch Platzhalter ersetzt werden Dies kann bis zu zehn Prozen
106. en Parser ur RR el 11 1 Definition von Objektvokabular u a 11 2 Grammatikdefinitionen aenesdts cken ae ei Anhang A Spezifikation der Sprache sccosssoonsesnsssnnnssnonssnnnsnnnnssnnnsssnsnsnnnnsnsnnsssnnssnnnene Anhang B berblick ber die Bibliothek 2 22220200202000020000202002020200002020000000200020 0000000000 Einleitung ZETA ist ein Entwicklungssystem f r Textadventures genauer gesagt f r Textadventures in deutscher Sprache Es basiert auf dem Z Code der von Infocom entworfen wurde und f r den es Interpreter auf einer gro en Anzahl von Plattformen gibt ZETA entstand aus dem Wunsch heraus ein System zu haben in dem umfangreiche Adventures auf Deutsch geschrieben werden k nnen Ich hatte zuvor den Text Adventure Generator T A G entwickelt der zwar einen zuverl ssigen Parser und gute Textausgabe bietet aber einige gro e Nachteile hat Der Interpreter ist nur f r MS DOS erh ltlich und oft instabil Au erdem schr nken die einfache Syntax und der fest verdrahtete Parser die M glichkeiten beim Entwerfen von Spielen ein Graham Nelsons Inform genau wie ZETA ein Compiler f r die virtuelle Z Maschine ist sehr flexibel und weit entwickelt Er wird von vielen benutzt und ist wohl das Standard Werkzeug zum Erstellen von Adventures zumidest im englischen Sprachraum Es gibt weiterhin eine ganze Anzahl von Interpretern f r das Z Format das klar spezifiziert ist so dass man mit Inform erzeugte Spie
107. en Text aus wenn sie ausgewertet werden Das passiert nur wenn sie alleine stehen Folgende Anweisung gibt keinen Text aus x Vincent van Gogh Das Komma als Operator zum Verketten von zwei Ausdr cken ist verschieden vom Komma das zum Abtrennen von Argumenten in einer Funktion verwendet wird Beim Verketten von Ausdr cken werden alle Ausdr cke von links nach rechts ausgewertet der Wert der Verkettung ist der Wert des rechten Ausdrucks Diese Verkettung ist vor allem in Schleifen oder Anweisungen zur Ausgabe von Text sinnvoll schleife i 0 J 107 J itty J7 ssa Du hast num selbst Anzahl Murmeln Funktionsaufrufe Ein Funktionsaufruf ist hat folgende Form Routine Argumente Routine ist der Bezeichner einer woanders im Quelltext definierten globalen Routine Die Argumente k nnen fehlen oder eine Anzahl von Werten sein die durch Kommas getrennt sind und die an die Routine bergeben werden Auch wenn die Argumente fehlen muss die Klammer angegeben werden Beim Aufruf der Routine werden zun chst die lokalen Variablen auf die Werte der bergebenen Argumente gesetzt dann werden die Anweisungen in der Routine abgearbeitet Der Wert des Aufrufs ist der R ckgabewert der Routine Globale Routinen werden mit Routine Name Argumentliste Anweisungen definiert Routinen m ssen nicht unbedingt vor ihrem Aufruf definiert werden Auswerten von Variablen Eine Variable kann mit einer hnlichen Syntax ausgewerte
108. en abweicht Klasse Nahrung Verzehr wenn Hunger stop Du bist satt Du isst den selbst wenn Hunger lt selbst N hrwert Hunger 0 und bist pappsatt sonst Hunger selbst N hrwert und f hlst dich weniger hungrig N hrwert 5 Nahrung Wei bier Verzehr wenn Stunde lt 16 stop Nicht vor vier Nahrung Verzehr 45 2 Objekte und Klassen Die Mitteilung Nahrung Verzehr bewirkt dass sich das Bier nach der berpr fung der Uhrzeit so verh lt als ob es die Eigenschaft Verzehr geerbt h tte Wenn viele Objekte die Eigenschaft Verzehr haben ist es aber wohl einfacher diese Eigenschaft als additive gemeinsame Eigenschaft zu deklarieren und das wird auch in der Bibliothek gemacht 2 8 Erzeugen und Vernichten von Objekten ZETA bietet die wenn auch eingeschr nkte M glichkeit Objekte w hrend des Spiels zu erzeugen Die Ressourcen der Z Maschine sind jedoch beschr nkt und man kann Objekte nicht beliebig generieren wie es in vielen objektorientierten Sprachen m glich ist Damit ein Objekt erzeugt werden kann muss das Objekt Instanz einer Klasse sein und ZETA muss wissen wieviele Objekte erzeugt werden k nnen Dazu gibt man die maximal erzeugbaren Instanzen einer Klasse nach dem Klassenbezeichner in runden Klammern an Klasse M nze 24 Name M nze Wert 1 Beschreibung Eine M nze im Wert von num selbst Wert Zetmid Nun werde
109. en nur die wichtigsten Merkmale Der Name wird ausgegeben wenn sich das Spiel auf die Objekte bezieht in einer Raumbeschreibung zum Beispiel Damit dieser Name mit einem passenden Artikel und gebeugten Adjektiven ausgegeben werden kann m ssen Objekte einen Genus haben der eine der Konstanten m Maskulinum Feminimum n Neutrum oder p Plural ist Das e in geschweiften Klammern wird bei der Ausgabe durch die passende Endung ersetzt Alle Details der Ausgabe von Objekten werden in Abschnitt 8 1 beschrieben Dann hat jedes Objekt Vokabular das der Spieler in seiner Eingabe verwenden kann Adjektive und Substantive Die Substantive m ssen ebenfalls mit einem Genus definiert werden Vokabeln also W rter die in der Eingabe und nicht in der Ausgabe werdendet werden werden in einfache Anf hrungszeichen gesetzt Au erdem hat jedes Objekt seinen Platz im Spiel in ZETA ist das die Lage im Objektbaum Die anf ngliche Position wird in der Kopfzeile der Objektdefinition entweder mit Pfeilen wie hier oder durch Angaben wie in Briefkasten angegeben wird Hier ist der Briefkasten das Tochterobjekt des Raums und das Flugblatt die Tochter des Briefkastens Der Briefkasten steht direkt im Raum das Flugblatt ist darin Trotzdem sieht man das Flugblatt zu Beginn nicht Der Briefkasten hat mehrere Attribute die mit ist definiert werden darunter geschlossen und Beh lter Das hei t der Spieler muss den Briefkasten erst ffnen bevor er an das F
110. en und setzt ein Bit des Ergebnisses wenn dieses Bit in beiden Zahlen gesetzt ist Das bitweise Oder setzt ein Bit wenn dieses Bit mindestens in einer der Zahlen gesetzt ist Das bitweise Exklusiv Oder setzt ein Bit wenn das Bit in nur einer der Zahlen gesetzt ist und das bitweise Nicht manchmal auch Einerkomplement genannt kehrt alle Bits in einer Zahl um Zum Beispiel sSs00100110 amp SS10010111 SS0000000000100110 ss00100110 SS10010111 SS0000000010110111 ss00100110 SS10010111 SS0000000010110001 10010111 S1111111101101000 Zwei weitere Operatoren lt lt und gt gt verschieben die Bits innerhalb einer Zahl a lt lt b verschiebt die Bits in a um b Stellen nach links a gt gt b nach rechts sS00100110 lt lt 2 SS10011000 SsS00100110 gt gt 2 SS00001001 1 Grundlagen Bits die ber den Rand hinausgeschoben werden verfallen Am anderen Rand werden immer nur Nullen eingef gt Das h chste Bit das Vorzeichenbit bleibt dabei nicht erhalten Eine Verschiebung um eine Stelle nach rechts entspricht einer Division durch zwei eine Verschiebung um eine Stelle nach links einer Multiplikation mit zwei wenn keine Bits hinausgeschoben werden Au erdem ist a lt lt b dasselbe wie a gt gt b Als Abk rzung k nnen die Operatoren amp lt lt und gt gt benutzt werden 1 5 Argumente von Routinen und R ckgabewerte Die lokalen Variablen k nnen nur innerhalb der Ro
111. enen die bevorzugten Optionen gesetzt werden Die Steuerdatei ist nur eine Alternative zur Angabe der Optionen auf der Kommandozeile des Betriebssystems 4 3 Steueranweisungen im Quelltext Einige Direktiven zur Steuerung des Kompilierungsvorgangs k nnen auch im Quelltext angegeben werden Diese Steueranweisungen beginnen mit einem Doppelkreuz und m ssen im Gegensatz zu allen anderen Anweisungen nicht mit einem Semikolon abgeschlossen werden Es schadet aber nicht ein Semikolon zu setzen Eine h ufig gebrauchte Steueranweisung ist das Einf gen von Dateien datei Dateiname Die angegebene Datei wird dann an dieser Stelle ge ffnet und eingelesen Das ist so als ob der Inhalt dieser Datei an dieser Stelle im Quelltext st nde Das Gliedern des Quelltextes in verschiedene Dateien macht ein Projekt aber bersichtlicher Und schlie lich wird auch die Adventure Bibliothek mit diesem Befehl in ein Spiel eingebunden Der angegebene Dateiname kann auch einen Pfad enthalten Wenn ein absoluter Pfad angegeben wird so wird diese Datei ge ffnet Ansonsten wird in den zuvor angegebenen Pfaden gesucht mindestens jedoch im momentanen Arbeitsverzeichnis Zus tzlich zur Definition von Pfaden mit Pfadname beim Aufruf kann man im Quelltext den Suchpfad noch erweitern mit pfad Pfadname 60 4 Der Compiler und seine Optionen Weiterhin gibt es eine Anzahl von Steuerdirektiven die es dem Programmierer erm glichen Teile des Que
112. enn der Spieler nun auf dem Skateboard steht und die normalen Befehle zur Fortbewegung eingibt wie raus oder gehe auf die Terrasse wird der Befehl fahren ausgef hrt a0b 7 ist dabei das Skateboard a06 j2 das Richtungs oder Verbindungsobjekt Die Fortbewegung erfolgt genau so als ob der Spieler zu Fu unterwegs w re Besonderheiten m ssen extra programmiert werden Wenn das Fahren erfolgreich ist befindet sich der Spieler immer noch auf dem Skateboard und dies befindet sich im Zielraum Manche Objekte sind zu schwer um sie aufzuheben sie K nnen aber herumgeschoben werden Auch dieses Verhalten wird durch das Attribut Fahrzeug beschrieben Ein Objekt das nicht fest und ein Fahrzeug ist kann mit dem Befehl verschieben_nach in einen anderen Raum verschoben werden genau wie bei fahren sind die Objekte hier das zu verschiebende Fahrzeug und das Ziel eine typische Eingabe w re rolle die Schneekugel nach Osten Hier eine Schubkarre Objekt gt Schubkarre Name Schubkarre Genus f Subst schubkarre f schubkarren m karre f karren m Vorher nehmen stop Die Schubkarre ist zu schwer um sie mit dir herumzuschleppen du kannst sie 93 7 Das Modell der Spielwelt aber von einem Ort zum anderen schieben Meldung verschieben_nach pUff Du setzt die Schubkarre wieder ab Erst Eine Schubkarre steht hier ist Beh lter Fahrzeug Die Meldung Uff wird
113. eratoren ist gleich b ist nicht gleich b ist gr er als b ist kleiner als b ist gr er als oder gleich b ist kleiner als oder gleich b Du AV oo 0 00 Au erdem gilt nur die Angabe einer Variable oder Konstante als Bedingung Flagge ist falsch wenn Flagge gleich null ist und ansonsten wahr Man kann mehrere Bedingungen zu einer verkn pfen indem man die Operatoren und oder und nicht benutzt wenn a 0 oder b 0 Golch wenn nicht x gt 6 oder x lt 0 Flubis Golch wird ausgegeben wenn eine der Variablen a oder b gleich null ist Flubis wenn x zwischen 1 und 6 liegt 1 Grundlagen Bedingungen die mit nicht verneint werden m ssen wieder in runden Klammern stehen und bindet st rker als oder aber wie bei den Rechenoperationen k nnen Klammern gesetzt werden um die Bindung anzugeben Anstelle von und oder und nicht kann man auch die in C blichen Operatoren amp amp und verwenden Diese Verkn pfungen werten unter Umst nden nur den linken Teil einer Bedingung aus Wenn im Beispiel oben a gleich null ist ist die Bedingung a 0 oder b 0 bereits erf llt und b 0 wird nicht mehr berpr ft Dies hat eine Bedeutung wenn im rechten Teil eine Routine steht wenn a 0 und sinnvoll a 1 Wenn a null ist wird sinnvoll nicht aufgerufen Dies ist wichtig wenn dort Text ausgegeben wird oder globale Variablen ge ndert werden Anstelle einer einzelnen Anweisung kann
114. ereFeld f n Dateiname speichert n Bytes des Feldes f auf eine externe Datei Dateiname speicherezug speichert den momentanen Spielstand im Speicher der Z Maschine um ihn sp ter mit ladeZug wiederherstellen zu k nnen splitte Textfeld Wortfeld max splittet das mit lese eingelesene Text feld in maximal max W rter auf die im Wortfeld abgelegt werden Gibt die Anzahl der gefundenen W rter zur ck Statusfenster 2 erzeugt ein Statusfenster am oberen Rand des Bildschirms das 2 Zeilen hoch ist das Fenster ist zun chst unsichtbar und muss zum Beschreiben erst mit aktivesFenster 1 aktiviert werden Text im Statusfenster wird nicht automatisch invers ausgegeben Text x gibt den Text x aus Taste wartet bis eine Taste gedr ckt wird und gibt dann den ZSCII Wert dieser Taste an 155 Anhang A Spezifikation der Sprache Textfarbe vg hg setzt die Hintergrundfarbe des nachfolgenden Textes auf hg und die Vordergrund das hei t die Textfarbe auf vg TextInFeld t f schreibt den Text t auf das Byte Feld und gibt die L nge des Texts zur ck Textumleitung f leitet die Textasusgabe vor bergehend auf das Feld um Wenn null ist wird die Umleitung ausgeschaltet Tochter gibt die Tochter des Objekts o an das auch nichts sein kann verbleibend k ermittelt wieviele Instanzen der Klasse k noch erzeugt werden k nnen vernichte o vernichtet das Objekt o wenn es noch im Spiel ist dabei wird
115. erschiebt x Die globale Variable aRaum bezeichnet den momentanen Aufenthaltsort des Spielers ein Objekt der Klasse Raum Spieler ist eine Variable die auf den Objekt zeigt durch das der Spieler handelt Wie wir in Abschnitt 7 12 sehen werden kann sich dieses Objekt ndern 6 2 Interaktion mit Objekten Fast alles im Spiel wird durch Objekte dargestellt die R ume in denen sich der Spieler aufh lt Gegenst nde die der Spieler mitnehmen kann oder nicht andere Personen im Spiel und sogar der Spieler selbst Im Quelltext unseres Plagiats taucht ein einziges Objekt auf der Raum mit dem Namen Westlich des Hauses Das gesamte Spiel hat bereits 21 Objekte zwanzig werden in der Bibliothek definiert wie zum Beispiel die Himmelsrichtungen und der Spieler Aber auch der Parser verwendet Objekte um Objektlisten und gruppen darzustellen Wen interessiert welche das sind kann das Spiel einmal mit den Optionen y1 kompilieren und sich die 78 6 Einf hrung in die Bibliothek Log Datei anschauen Um unser Beispiel etwas interaktiver zu gestalten f gen wir zwei neue Objekte ein Objekt gt Briefkasten Name klein e Briefkasten Genus m Adj klein Subst briefkasten m kasten m ist fest Beh lter schlie bar geschlossen Objekt gt gt Flugblatt Name Flugblatt Genus n Subst flugblatt n blatt n zettel m Diese Objekte sind sehr gew hnliche Objekte sie hab
116. ert werden Mit der Anweisung lib die als erste in einer eingebundenen Datei stehen sollte kann man diese Datei als Bibliotheksdatei deklarieren Damit unterdr ckt man alle Warnungen die in dieser Datei auftreten um zu vermeiden dass der Bildschirm mit Warnungen ber nicht benutzte Routinen oder Objekteigenschaften berquillt Fehler werden allerdings wie gewohnt angezeigt und f hren zum Abbruch Ein weiterer Effekt einer Bibliotheksdatei ist dass man Routinen Objekte Klassen und Befehle die in ihnen definiert sind ersetzen kann Dazu muss man die Steueranweisung ersetze Definitionstyp Bezeichner 63 4 Der Compiler und seine Optionen im Quelletxt platzieren und zwar vor dem Einbinden der Bibliothek die die zu ersetzenden Definition eth lt Damit weist man ZETA an die Definition in der Bibliothek zu ignorieren Nat rlich muss man diese Definition nachreichen dies kann man berall im Quelltext machen es muss nur nach ersetze erfolgen Um zum Beispiel Dunkelheit in einem m Spiel auszuschlie en kann man die Lib Routine Spendet_Licht ersetzen ersetze Routine Spendet_Licht datei zlib zin Routine Spendet_Licht obj antworte obj nichts M gliche Definitionstypen bei der Ersetzung sind Objekt Klasse Befehl und Routine Systemfunktionen k nnen bislang nicht ersetzt werden Mit alias kann man Symbolen das hei t Schl sselw rtern Operatoren und Bezeichnern in ZETA neue Synonyme vergeb
117. es der Spieler explizit bekannt gemacht hat x Die Regel dass anwesende Objekte st rker gewertet werden ist f r das Befragen von Personen gedacht bei dem dieselben Regeln angewandt werden Dies ist ein Sonderfall der bekannt Regel x Durch die starke Wertung des Attributs Stichpunkt k nnen gezielt Objekte hervorgehoben werden Wenn es im Spiel eine M nze mit dem Konterfei des K nigs gibt und einen K nig der Stichpunkt ist im Spiel selbst dem Spieler aber nie begegnet wird trotzdem der K nig nachgeschlagen x Nat rlich k nnen einzlne Objekte immer noch nachtr glich st rker gewichtet werden siehe dazu nicht gefunden e Aufgabe 10 Definiere einen Sternenatlas in dem man verschiedene Sterne nachschlagen kann 7 8 Andere Personen im Spiel Mit dem Attribut Person kann man ein Objekt als Mitmensch oder als anderes vernunftbegabtes Lebewesen definieren Diese Definition hat einigen Einfluss auf das Verhalten der Bibliothek aber im begrenztem Umfang auch auf das Verhalten des Parsers Eine Person ist ein zun chst ein Objekt wie alle anderen auch sie kann die Eigenschaften Vorher Nachher usw besitzen Man kann Personen allerdings nicht aufheben und in Raumbeschreibungen werden sie immer gesondert aufgef hrt entweder mit den Texten Erst oder Immer die in diesem Fall dieselbe Bedeutung haben oder mit dem generischen Text Ein Holzf ller ist hier Es gibt einige Befehle die besonders f r andere Personen im
118. es die Routine aufrufen soll wenn nach dem Namen der Routine Klammern stehen Eine Anweisung wie Taste erzeugt den Fehler Diese Anweisung bewirkt nichts da f r ZETA Taste nur ein Wert ist mit dem hier nichts gemacht wird n mlich die Adresse der Routine Gef hrlich sind falsche Aufrufe mit Zuweisung x Taste wenn x j Ja Hier wird nicht gewartet bis der Spieler eine Taste dr ckt da Taste nie aufgerufen wurde Stattdessen bekommt x den Wert einer Adresse im Z Code Auch wenn diese Syntax gef hrlich ist so hat sie doch ihren Sinn Man k nnte z B der Variablen x den Wert einer Funktion zuweisen und diese dann sp ter ber die Variable aufrufen x Taste y x Auf diese Weise k nnen Routinen auch an andere Routinen bergeben werden Felder Bei Feldern muss man aufpassen dass man nicht versucht au erhalb des definierten Bereichs zu lesen oder zu schreiben Ein Feld der Dimension n hat Eintr ge mit den Indizes 0 bis n 1 Die Eintr ge fangen nicht wie man versucht ist anzunehmen bei eins an Das folgende Programm Feld eins 10 Feld zwei 1 2 3 4 5 Hauptprogramm lokal i 1 i lt 10 i eins i 2 i schleife i num zwei 0 72 5 Fehler suchen und beseitigen gibt 20 aus nicht 1 Beim Deklarieren von Feldern wird im dynamischen Speicherbereich des Z Codes genau so viel Platz freigehalten wie f r n Eintr ge ben tigt wird Der Speicherpl
119. f hrungszeichen G nsef chen stehen und die zur Textausgabe gedacht sind Texte k nnen ber mehrere Zeilen gehen Innerhalb von Texten werden Zeilenumbr che wie ein einzelnes Leerzeichen betrachtet Leerzeilen in Texten werden als Absatz interpretiert Weiterhin gibt es folgende Sonderzeichen n Zeilenumbruch newline p Absatz paragraph gesch tztes Anf hrungszeichen gesch tztes Anf hrungszeichen alternativ gesch tzte Klammer auf gesch tzte Klammer zu gesch tztes Leerzeichen Backslash Weiterhin gibt es Sequenzen von Sonderzeichen die Zeichen mit Akzenten erzeugen siehe Anhang Texte k nnen auch Kurzstrings in geschweiften Klammern enthalten die mit der Direktive Kurzstring Name String deklariert werden und mit derselben Anweisung innerhalb von Routinen ge ndert werden k nnen Datenstrukturen Konstanten Konstanten sind Bezeichner f r Werte die sich nicht ndern k nnen Es k nnen beliebig viele 139 Anhang A Spezifikation der Sprache Konstanten definiert werden mit Konstante Name Name Wert Als Wert kann ein beliebiger Datentyp angegeben werden auch ein Ausdruck wenn dieser konstant ist Wird kein Wert angegeben so bekommt die Konstante einen Wert der von allen anderen Konstanten die ohne Wert definiert wurden verschieden ist Die Konstanten falsch nichts und null mit dem Wert null und wahr mit dem Wert eins sind bereits in ZETA vordefiniert Glo
120. f Objekt Tragehilfe 62 4 Der Compiler und seine Optionen sind also Abk rzungen f r wenn ndef max_Last Konstante max_Last 50 tende wenn ndef ist_schwer Routine ist_schwer antworte wahr ende wenn ndef Tragehilfe Objekt Tragehilfe ende Weiterhin kann man so genannte Prototypen definieren proto Definitionstyp Bezeichner Ein Prototyp macht in ZETA nichts anderes als dem Compiler zu sagen Der Bezeichner steht f r einen Definitionstyp der eine Routine ein Objekt ein Befehl oder eine Eigenschaft sein kann Normalerweise wei ZETA welchen Typ ein Bezeichner hat auch wenn dieser noch nicht definiert wurde Es macht eine Annahme aus dem Zusammenhang So steht f r ZETA ein unbekannter Bezeichner f r eine Eigenschaft wenn sie nach einem Punkt steht f r ein Objekt wenn er vor einem Punkt steht In manchen F llen besonders dann wenn man den Bezeichner ohne offensichtlichen Kontext als Argument an eine Routine bergeben will macht ZETA falsche Annahmen Eine M glichkeit dies zu umgehen ist die Definition zu dem betreffenden Bezeichner vor die mehrdeutige Stelle zu platzieren Dies kann aber manchmal umst ndlich sein Eine einfache M glichkeit dem Compiler den Typ des Bezeichners mitzuteilen ist am Anfang des Quelltexts einen Prototyp zu definieren Eigenschaften die mit einem Prototyp definiert werden sind immer individuelle Eigenschaften Gemeinsame Eigenschaften m ssen mit Eigenschaft defini
121. f die erzeugte Spieldatei Mit g kann man eine gro es Spiel erzeugen Anstelle einer z5 Datei wird eine Datei der Version z8 erzeugt die Platz f r doppelt so viele Daten bietet 512 anstatt 256 Kilobytes Der kritische Modus wird mit k aktiviert und bricht den Kompilerungsvorgang beim ersten Fehler ab Optionen sind entweder gesetzt oder nicht Die Angabe von Optionen beginnt mit einem Minus Zeichen gefolgt von beliebig vielen Zeichen zs1 schreibt also ein Logbuch und zeigt die Statistik und die Speichertabelle des erzeugten Spiels an Man kann Optionen auch wieder ausschalten indem man dem ihnen ein Ausrufezeichen voranstellt Diese Verneinung gilt immer nur f r die direkt folgende Option Mit a bc werden die Optionen a und c aktiviert die Option b wird ausgeschaltet Eine Liste der m glichen Optionen steht im Anhang Der Compiler belegt f r die verschiedenen Bereiche der zu erzeugenden Spieldatei Speicher auf der Maschine Alle Opcodes werden zum Beispiel auf ein gro es Feld gelegt alle Texte und alle Objektdaten genauso Aus diesen tempor ren Datenbl cken wird dann die Spieldatei assembliert Die Gr e einiger dieser Speicherbereiche ist variabel So kann man mit der Option Smaxcode 200000 den Speicherbereich f r die Opcodes also den eigentlichen Z Code auf 200 000 Bytes setzen Der Zusatz k erlaubt die Angabe des Speicherplatzes in Kilobyte Die Angabe Smaxcode 200k stellt 200 Kilobyte f r den Z Co
122. fehlschlug ladeFeld f n Dateiname l dt n Bytes von einer externen Datei Dateiname und schreibt sie auf das Feld f Gibt die Anzahl der erfolgreich gelesenen Bytes zur ck ladezug l dt einen zuvor im Speicher der Z Maschine abgelegten Spielstand Dies wird f r das R ckg ngigmachen von Spielz gen verwendet lese f max liest maximal max Zeichen auf das Bytefeld leseArg n liest den Wert des n ten an die Routine bergebenen Arguments leseEintrag b e ermittelt den Wert des Eintrags e im Befehl b l scheFeld f n setzt n Bytes des Feldes f auf null l scheFenster f l scht das Fenster f und setzt den Cursor in dessen obere linke Ecke Das Fenster f kann O0 f r das Textfenster 1 f r das Statusfenster oder 1 f r beide Fenster sein Im letzten Fall verschwindet das obere Fenster 154 Anhang A Spezifikation der Sprache Mutter o gibt das Mutterobjekt von o an das auch nichts sein kann num x gibt den Wert von x als Dezimalzahl aus schreibeArg n Wert belegt das n te an die Routine bergebene Argument mit dem Wert Schriftstil s setzt den Schriftstil f r den nachfolgenden Text auf s Der Stilkann fett kursiv monospace invers oder null f r normale Schrift sein Schwester o gibt die Schwester des Objekts o an die auch nichts sein kann speichere speichert den momentanen Spielstand auf eine externe Datei Die Antwort ist null wenn das Speichern fehlschlug speich
123. folge Anweisungen lokale Variablen Lokale Variablen werden wie folgt deklariert lokal Variablenliste Eine Variablenliste hat die Form Bezeichner Ausdruck Variablenliste Die Anweisung lokal muss stets die erste in einem Anweisungsblock sein oder einer anderen lokal Anweisung folgen Die G ltigkeit der lokalen Variable beschr nkt sich auf den Anweisungsblock in dem sie deklariert wurde Es k nnen maximal f nfzehn lokale Varaiblen definiert werden Ausdr cke Ausdr cke werden in ZETA in algebraischer Notation angegeben Ein Ausdruck hat die Form linker Operand Operator rechter Operand Die Operanden k nnen Datentypen oder wiederum Ausdr cke sein Nicht jeder Operator verlangt nach einem linken oder rechten Operanden Operatoren die beide Operanden verlangen hei en bin r Operatoren die nur auf einen Operanden wirken hei en un r Es folgt eine Liste der Operatoren in aufsteigender Reihenfolge ihrer Pr zedenz 141 w e Q Oo ov o od 2 8 vd m beerbt k b v o I vo DD 2 2 gt nn eo N 000000 nicht a a lt lt b a gt gt b a gt b a gt b a Anhang A Spezifikation der Sprache verkettet zwei Ausdr cke weist a den Wert von b zu wahr wenn a oder b wahr ist alternative Schreibweise vona b wahr wenn a und b wahr sind alternative Schreibweise vona amp amp b wahr wenn a gleich b ist wahr wenn a ungleich b ist wahr wenn a gr sser al
124. ge uuseensennenennnnnnnennnnnen 91 Ta Kleine anne 95 1 6 Objekte zum Ein und Ausschalten 222002222000002s0nssnnnnnssnnnnnsnnnnnsnnnnnnnenn 95 7 1 Lesen nd nachschlagen see 96 1 8 Andere Personen im Spiel asus 97 7 9 Kommunikation serr E E A a a e 98 7 10 Dunkelheit nein E AE E Ea 100 7 11 DIE SIND ee ee 102 2 12 Der Spiel ei anregen 103 7 13 Z itabh ngise Vorgang aA ee 107 7 14 Der Anfang und das Ende des Spiels _ 22002222ssssnesssnnenssnnnnennnnnnnnnnnn 109 7 15 DIE Statuszeile nur ee ee 112 Beschre ib ngen sssssscisessssssssscsocssisssnsscssosasusnssssssosscsanissisicssossossass sstsssossesssssissocieasssdsiste 114 8 1 Namen von Objekten und R umen u 2s0ssssssssnnessnnnnnsnnnnsennn nennen 114 8 2 Fasten Vom Objckien dene Bean Senat 119 8 3 Mehrere eleiche Objekte ass an Be 123 9 Der Parser ee ERBE RAR ee 125 9 1 Verben nenne 125 92 Verben sense e i ars AEE E E 126 9 3 SAlzmlsier ne rer 126 9 4 Oben E AEN E E A 126 9 5 Parser ROUNEN ee teures 126 9 6 G ltigkeit von Objekten zus sk eeee 126 ZETA Benutzerhandbuch Inhaltsverzeichnis Teil IV ZETA f r Fortgeschrittene seocoessssocesssoceccessscocesssooecesosccesessooesesosscsesssosesee 10 Weitere Funktionalit ten euere ineeieheseterkere 10 1 Routinen mit beliebig vielen Argumenten uussssesssssessnnnnensnnnennnnnn 10 2 Implizites Jenach an nee ernennen re 11 Daten fur d
125. gern Das macht das Kompilieren etwas langsamer da st ndig auf diese Dateien zugegriffen werden muss verbraucht aber weniger Speicher Vor allem die Texte ben tigen viel Speicherplatz Nicht alle Texte werden in den Speicherbereich f r Texte geschrieben etwas wie vorher nehmen schieben stop Keine Chance der Amboss ist einfach zu schwer wird direkt im Z Code Bereich abgelegt Der Z Code Bereich kann nicht auf tempor re Dateien ausgelagert werden aber mit der Option v kann man erzwingen dass solche Texte stets in den Bereich f r den statischen Text geschrieben werden so dass man mit vt den Speicherbedarf weiter minimieren kann Syntaktische Fehler Diese Fehler haben in der Regel die Form Hier wird ein Symboltyp erwartet und sind meistens Tippfehler wie Klammern oder Anf hrungszeichen die nicht geschlossen werden Codebl cke die nicht mit einer geschweiften Klammer beendet werden oder Anweisungen bei denen das Semikolon am Ende vergessen wurde Wenn dies passiert kann ZETA durcheinander kommen und erzeugt unter Umst nden viele Folgefehler Dann sollte man sich die erste Fehlermeldung ansehen und diesen Fehler korrigieren Da die Liste der Folgefehler sehr lang sein kann gibt es die Option k die jeden Fehler als kritisch betrachtet und beim ersten Fehler abbricht Ansonsten dient diese Fehlermeldung dazu falsche Operationen zu vermeiden Einige Operatoren verlangen Operanden eines bestimmten Typs Der Operato
126. gt Anweisungen an andere Personen Anweisungen an andere Personen werden in der Eigenschaft Anweisungen ber cksichtigt Dabei wird der Pseudobefehl nicht_verstanden verwendet wenn die Eingabe fehlerhaft war Mit der Eigenschaft neues_Verb k nnen alternative Verben wahrscheinlich unm gliche Verben die einen Punkt oder ein Komma enthalten benutzt werden Lichtverh ltnisse Helle R ume haben das Attribut hell Objekte die leuchten sind Lichtquellen ein Synonym f r dasselbe Attribut Der Spieler kann sehen wenn es im Raum Licht gibt d h wenn der Raum hell ist oder es eine sichtbare Lichtquelle gibt Die genauen Regeln sind wie in Inform Licht breitet sich durch transparente Objekte nicht geschlosene Beh lter und Ablagen aus Ein Objekt bekommt Licht wenn es selbst hell ist eines seiner Kinder Licht verbreitet oder es lichtdurchl ssig ist seine Mutter Licht bekommt 161 Anhang B berblick ber die Bibliothek Ein Objekt verbreitet Licht wenn es selbst hell ist es lichtdurchl sig ist und eines seiner Kinder Licht verbreitet oder wenn eines seiner Unterobjekte Licht verbreitet Der Spieler kann sehen wenn sein Mutterobjekt Licht bekommt D monen und Z nder Jedes Objekt kann die Eigenschaft D mon haben die eine Routine enth lt die am Ende jeden Zugs aufgerufen wird wenn der D mon aktiv ist Ob der D mon aktiv ist wird im Attribut D mon_Aktiv festgehalten Um einen D mon zu starten oder anzuhalten
127. h ist Die wiederhole bis Schleife hat die Form wiederhole Anweisung bis Bedingung Hier werden die Anweisungen wiederholt bis die Bedingung wahr ist Die berpr fung findet nach dem Ausf hren der Anweisungen statt so dass die Anweisungen mindestens einmal ausgef hrt werden Eine allgemeine Form der Schleife ist Schleife Schleife Init Bedingung Aktualisierung Anweisung 146 Anhang A Spezifikation der Sprache Schleife isteine Abk rzung f r Init solange Bedingung Anweisung Aktualisierung Jede der drei Angaben in der Klammer kann weggelassen werden Mit der Anweisung abbrechen springt man aus einer Schleife heraus mit weiter springt man zum n chsten Durchgang der Schleife wenn dieser noch durchgef hrt werden soll Weiter springt zur n chsten berpr fung der Bedingung bei Schleife zur Aktualisierung Sprunganweisungen Mit der Anweisung springe Sprungmarke kann man an eine Stelle in der momentanen Routine springen Diese Stelle muss mit Sprungmarke markiert werden Die Sprungmarke ist nur innerhalb der Routine zug nglich man kann nicht aus einer Routine herausspringen Objekte Objektbaum Jedes Objekt hat eine Lage im Objektbaum diese wird durch seine Mutter seine Schwester und durch seine Tochter gekennzeichnet die alle null sein K nnen Ein Objekt das keine Mutter hat hat auch keine Geschwister Die Definition eines Objekts sieht folgenderma en aus Objekt Pfeile Name in
128. her Raum Raum Die R ume k nnen untereinander verbunden werden indem man Richtungen angibt in die man von einem Raum in den anderen gelangen kann blicherweise werden in Textadventures die Himmelsrichtungen sowie hoch runter rein und raus dazu benutzt und standardm ig werden in der Bibliothek folgende Richtungen definiert Norden Nordosten hoch Osten S dosten runter S den S dwesten rein Westen Nordwesten raus Diese Richtungen sind Objekte der Klasse Himmelsrichtung die Kinder des Hilfsobjekts Windrose sind Wenn der Spieler gehe nach Norden oder nat rlich n sagt so wird der Befehl gehen mit dem Objekt Norden ausgef hrt ZETA sendet dann die Nachricht aRaum Ausg nge Norden Wenn die Antwort ein Raum ist so geht der Spieler dorthin Ist die Antwort wahr so passiert nichts da angenommen wird dass dem Spieler bereits gesagt wurde warum Danach wird die Nachricht aRaum Ausg nge nichts 83 7 Das Modell der Spielwelt gesendet um eine individuelle Absage schreiben zu k nnen Ist die Antwort hier ebenfalls falsch wird eine Standard Absage verwendet Da in der Eigenschaft Ausg nge mehrere F lle abgefragt werden kann man die Richtungsobjekte wie die Aktionen in Vorher usw mit einem Doppelpunkt den g ltigen Bl cken voranstellen Ausg nge Norden antworte Im_Dschungel S den S dwesten Westen stop Dort geht es steil die Klippe herunter r
129. hleife nitialisierung Bedingung Aktualisierung Das Beispiel oben k nnte also umgeschrieben werden zu x 0 schleife a 10 a gt 0 a x a num x Innerhalb der runden Klammer m ssen immer zwei Strichpunkte stehen auch wenn einzelne Angaben fehlen k nnen schleife a gt 0 a Hier wird a nicht initialisiert der momentane Wert von a wird benutzt schleife a 0 a Dies ist eine Endlosschleife schleife a 0 a lt n Hier wird nicht aktualisiert a muss seinen Wert also auf eine andere Art innerhalb des Anweisungsblocks ndern 1 Grundlagen Neben den Abbruchbedingungen gibt es zwei weitere M glichkeiten aus einer Schleife herauszukommen Mit ihnen kann man sogar aus einer Endlosschleife ausbrechen Die Anweisung abbrechen verl sst die Schleife sofort Die folgende Schleife schleife a 0 a lt s5 at wenn a 3 abbrechen num a 5 schreibt lediglich O 1 2 auf den Bildschirm da die Schleife abgebrochen wird bevor 3 geschrieben werden soll Die Anweisung weiter hingegen bricht nur den jetzigen Durchgang ab schleife a 0 a lt 5 a wenn a 3 weiter num a T Hier wird O 1 2 4 ausgegeben Lediglich der Durchgang in dem a den Wert 3 hat wird bersprungen x Zus tzlich zu diesen Anweisungen kann man Schleifen mit Hilfe benutzerdefinierter Sprungmarken oder Labels und der Anweisung springe steuern Eine Sprungmarke ist einfach ein Bezeichne
130. hlimmes Ende mit einem negativen bedacht wird Der Autor kann hier wenn er will zwischen mehreren m glichen Siegen und Niederlagen unterscheiden Anders als im richtigen Leben ist was nach dem Tod beziehungsweise nach dem Ende passiert genau gekl rt Zun chst wird der LibText Spielende 0 ausgegeben Per Default ist das nichts manche Spiele geben hier aber einen Abriss der erreichten Punkt aus Man kann hier auch die Variable Ende zur ck auf null setzen um den Spieler im letzten Moment dem Tod von der Schippe springen zu lassen Danach gibt das Spiel den LibText Spielende Ende aus und zwar einer alten Tradition folgend umrahmt von Sternchen und in Fettdruck Standardm ig wird bei einem positiven Wert von Ende Du hast gewonnen ausgegeben bei einem negativen Du hast verloren Genauere Meldungen zu den jeweiligen Werten von Ende m ssen durch Abfangen der Lib Texte implementiert werden Wer die Textauszeichnungen nicht haben m chte kann die Routine Ende_verk nden durch folgende ersetzen Routine Ende_verk nden p LibText Spielende Ende p 111 7 Das Modell der Spielwelt Schie lich erh lt der Spieler die M glichkeit das Spiel von vorn zu beginnen einen Spielstand zu laden den letzten Zug r ckg ngig zu machen oder das Spiel zu beenden x Die Eingabe des Spielers wird bei dieser Frage genau wie bei Ja_oder_Nein nur grob geparst und zwar so dass aBefehl den ersten Wert a
131. ht vorher definiert werden und sind in ihrer Anzahl unbegrenzt Eine individuelle Eigeschaft kann je Objekt bis zu 128 Eintr ge enthalten Wenn eine individuelle Eigenschaft von einem Objekt gelesen wird das sie nicht besitzt so ist der Wert null Eintr ge von Eigenschaften k nnen jeden Datentyp enthalten in Listen auch gemischt Als Wert einer Eigenschaft kann auch eine Routine in geschweiften Klammern angegeben werden dann k nnen keine weiteren Eintr ge folgen Obwohl die Eigenschaft durch Vererbung weitere Eintr ge erhalten kann Die Artributliste besteht aus durch Kommas getrennte Attributen die durch ein vorangestelltes nicht oder verneint werden k nnen Bevor ein Attribut angegeben werden kann muss es mit Attribut Name oder Name 148 Anhang A Spezifikation der Sprache definiert werden Ein Attribut ist eine vereinfachte Eigenschaft Ein Objekt hat ein Attribut oder hat es nicht Es k nnen bis zu 48 Attribute definiert werden Mitteilungen Objekte k nnen Mitteilungen erhalten die die Form Antwort Objekt Eigenschaft Argumente haben Die runden Klammern sind wie beim Funktionsaufruf zwingend Je nach Datentyp der Eigenschaft passiert folgendes Eine Routine wird mit den Argumenten aufgerufen die Antwort ist der R ckgabewert der Routine Ein Text wird ausgegeben die Antwort ist wahr Alle anderen Datentypen bewirken nichts und antworten mit ihrem Wert Spezielle Anweisungen f r Objekte Mit der Anw
132. i Untergruppen von Pluralobjekten wird die Anzahl aufsummiert es wird also etwas wie acht B lle f nf rote ein gelber und zwei blaue ausgegeben wenn man beim Pluralobjekt zahlenangabe definiert e Aufgabe 17 Implemenmitiere die verschiedenfarbigen B lle e Aufgabe 18 Implementiere eine Klasse f r Lampions die man an und ausmachen kann so dass leuchtende und dunkle Lampions getrennt gelistet werden e Aufgabe 19 Erweitere die Klasse so dass die Lampions verschiedene Farben haben wenn sie leuchten und nach Farben getrennt aufgelistet werden 124 9 Der Parser Als Parser bezeichnet man den Teil des Programms der den vom Spieler eingegebenen Text analysiert Die Bibliothek hat bereits umfangreiche Definitionen und Routinen um die Eingabe des Spielers zu interpretieren Dabei gibt es neben der rein grammatischen Ebene auch immer Verkn pfungen mit der Semantik wenn zum Beispiel zwischen mehreren Objekten ein sinnvolles ausgew hlt werden soll oder wenn andere Personen im Spiel angesprochen werden sollen deren Satzbau nicht den allgemein g ltigen Regeln gehorcht 9 1 Verben Die Konvention ist dass der Spieler Imperativs tze eingibt blicherweise in der zweiten Person Nimm das Schwert und untersuche es zum Beispiel Das bedeutet dass jeder g ltige Satz mit der Imperativform eines Verbs anf ngt Vom Standpunkt des Parsers betrachtet ist das angenehm Das erste Wort bestimmt welche Strukturen ein nachfolge
133. ibt nichts auf den Bildschirm das muss der Programmierer machen wenn er es w nscht Man kann auch ganze Textzeilen einlesen Dazu gibt es die Funktion lese Zeile max die die eingelesenen Zeichen der Zeile auf den String Zeile schreibt Der Spieler kann nicht mehr als max Zeichen eingeben Die Textzeile wird folgenderma en auf Zeile geschrieben In Zeile 0 steht die maximale Anzahl der gelesenen Zeichen dieser Wert wird von lese auf max gesetzt In Zeile 1 wird die Anzahl der tats chlich gelesenen Zeichen abgelegt Die ZSCI Codes der Zeichen stehen in den Feldeintr gen ab Zeile 2 Beim Einlesen werden alle Zeichen in Kleinbuchstaben umgewandelt Wenn der Spieler Karl n eingibt sehen die Eintr ge in Zeile so aus Zeile 0 max Zeile 5 1 Zeile l 7 zeile 6 zeile 2 k zeile 7 Zeile 3 a Zeile 8 n zeile 4 r Das Feld Zeile muss f r mindestens max 2 Bytes Platz haben besser noch f rmax 48 3 Systemfunktionen und Besonderheiten 3 da einige Interpreter eine Null an den eingegebenen Text anh ngen Der eingelesene Text kann dann in W rter aufgeteilt werden Die Funktion dazu ist splitte Zeile Wort max Der Text im Feld Zeile wird in maximal max W rter aufgesplittet die W rter werden auf dem Feld Wort abgelegt Wort gt 0 hat den Wert max Wort gt 1 enth lt die Anzahl der gefundenen W rter Danach kommen die Eintr ge zu jedem Wort vier Bytes Die
134. icht dass man aus diesem Raum in die entgegengesetzte Richtung wieder zur ck in den Ausgangsraum kommt Dies muss explizit im zweiten Raum definiert werden 84 7 Das Modell der Spielwelt x ZETA wei nicht welche Richtungen sich gegen berliegen die Richtungsobjekte haben eine Richtung aber keine Gegenrichtung Au erdem kann man so verbogene Verbindungen herstellen die nicht nur f r die ber chtigten Labyrinthe verwenden kann sondern auch zum Auflockern der Landkarte Ausg nge S dwesten Du gehst durch das Rosenspalier und folgst einem langen Gang der einen Bogen nach Westen schl gt p antworte Gartenanlage e Aufgabe 2 In Inform werden die Ausg nge aus einem Raum durch Objekteigenschaften beschrieben so dass man nicht araum Ausg nge Norden sondern aRaum nach_N aufruft Implementiere das e Aufgabe 3 Die Spiele von Magnetic Scrolls geben eine Liste der m glichen Ausg nge an in der Form Du kannst nicht nach Norden gehen nur nach Osten und S dwesten Implementiere das e Aufgabe 4 Definiere die Richtung zur ck so dass man mit gehe zur ck wieder in den Ausgangsraum gelangt 7 2 T ren und Verbindungen Mit dem System der Richtungen kann man R ume direkt miteinander verbinden Ein weiteres Konzept erlaubt es indirekte Verbindungen zwischen R umen zu schaffen Objekte die das Attribut Verbindung besitzen k nnen betreten werden Die Eigenschaft Zielraum gibt an wa
135. in einer Liste nebeneinander geschrieben Die Gruppierung der Objekte kann auch ein eigenes Format haben Wenn die Flagge l_ gruppieren im Listenstil gesetzt ist und die gemeinsame Listengruppe ein Objekt ist wird anstelle der einzelnen Objekte der Name dieses Gruppenobjekts ausgegeben So kann man aus ein Matchbox Auto einen Apfel eine Birne und ein paar Weintrauben folgendes machen ein Matchbox Auto und etwas Obst Nun wei der Spieler allerdings nicht welches Obst gemeint ist Die Liste der Objekte in dieser Gruppe wird durch das Objekt Unterliste repr sentiert das auch genau wie die Liste mit den g ngigen Ausgaberegeln ausgegeben werden kann Objekt Obstgruppe Name Obst es handelt sich um einen Unterliste Genus n etwas Im Normalfall m chte man die Unterliste im selben Fall und mit dem selben Artikel unbestimmt oder bestimmt ausgeben wie die Hauptliste Dies geschieht mit der Routine 121 8 Beschreibungen Gruppenliste Objekt Obstgruppe Name Obst Gruppenliste Genus n etwas F r Objekte die die Eigenschaft Anzah1 besitzen kann man im Genus die Konstante Zahlenangabe verwenden Wenn Anzahl gr er als eins ist wird dann das passende Zahlwort eingesetzt Zum Beispiel erzeugt Name Briefmarken Gruppenliste 9 Genus p Zahlenangabe Anzahl folgende Ausgabe drei Briefmarken die Blaue Mauritius die schwarz
136. ist es aber besser geschweifte Klammern zu setzen wenn a 0 wenn b 0 Klar sonst Auch klar Mit wenn kann man zwischen zwei F llen unterscheiden Vergleiche mit mehreren Werten sind eher umst ndlich Eine Struktur mit der man Variablen mit mehreren konstanten Werten vergleichen kann ist jenach Du hast Punkte Punkte du bist also ein jenach Punkte 50 1 Sm tje 2 Seer uberanw rter 3 Seer uber 4 Steuermann 5 richtiger Piratenkapit n sonst Deckschrubber Dies ist eine Abk rzung f r wenn Punkte 50 1 Smutje wenn Punkte 50 2 Seer uberanw rter Vor dem Doppelpunkt d rfen jedoch nur konstante Werte stehen auch Namen von Objekten und benutzerdefinierten Konstanten Nach jedem Doppelpunkt kommen die Anweisungen die f r diesen Fall gelten Sie stehen der bersichtlichkeit halber nicht in geschweiften Klammern auch nicht wenn es mehrere sind Die F lle k nnen in jeder Reihenfolge auftreten Nur der Fall sonst muss der letzte sein er muss aber nicht angegeben werden 1 Grundlagen Bei den Konstanten vor dem Doppelpunkt k nnen mehrere Angaben gemacht werden die mit Kommas abgetrennt werden Au erdem kann man Bereiche von Konstanten angeben z B 1 40 Dazu noch ein Beispiel Du w rfelst Augenzahl jenach Augenzahl 2 6 Die Bank gewinnt Geld Geld 5 11 12 Du gewinnst Geld Geld 10 sonst Nichts passier
137. ist negativ wenn der Dividend a negativ ist 7 3 2 7 3 2 7 3 7 3 1 73 3 1 7 3 1 Das Beispiel oben h tte auch als Position Spalte 8 Reihe geschrieben werden k nnen die Reihenfolge der Operatoren spielt keine Rolle das Ergebnis ist dasselbe In jedem Fall wird 8 Reihe zuerst ausgewertet Punktrechnung geht vor Strichrechnung und binden die Operanden st rker als und Um die Bindung der Operatoren zu ndern kann man runde Klammern setzen D w8 12 Sx g Die arithmetischen Operatoren mit der h chsten Bindung sind die un ren Operatoren und Un r bedeutet dass sie sich nur auf einen Operanden beziehen n mlich den Wert rechts von ihnen a bewirkt nichts a ndert das Vorzeichen von a und ist quivalentzu 0 a Da die Zahlen in ZETA nur in einem begrenzten Bereich liegen kann es zu so genannten berlauffehlern kommen 1024 100 liegt au erhalb des g ltigen Bereichs die Zahl wird abgeschnitten Darauf muss man besonders bei der Multiplikation achten Ein weiterer wichtiger Punkt ist die Division durch null oder die Restbildung einer solchen Division Sie ist nicht erlaubt und f hrt w hrend des Programmablaufs zu einem kritischen Fehler der die Ausf hrung sofort abbricht Diese Fehler hei en Laufzeitfehler Daher sollte der Programmierer darauf achten dass er solche F lle abf ngt Neben der Zuweisung mit gibt es die In und Dekrementoperatoren und
138. jektiv Konstante Diese Definition wird von ZETA umgewandelt so dass sie drei andere Eigenschaften die dem Autoren auf den ersten Blick nicht ersichtlich sind belegen Diese Eigenschaften sind f r jedes Objekt reserviert und werden wie folgt belegt __vok1l erster Teil der Vokabel __vok2 zweiter Teil der Vokabel __vokf Flaggen f r die Vokabel ZETA teilt die Vokabel in zwei Teile Jede Vokabel hat im Z Format die Aufl sung von neun Zeichen Sonderzeichen die keine Buchstaben sind wie Ziffern oder Satzzeichen belegen zwei Zwichen genauso wie die Umlaute und das scharfe s die in ae oe ueund ss umgewandlt werden Folgende W rter sind f r die Z Maschine gleich schwarzbraun gt schwarzbr schwarzbrot gt schwarzbr Li L Li Li schwarzbrenner gt schwarzbr 131 11 Daten f r den Parser F r Verben Pr positionen und Artikel ist diese Aufl sung in den meisten F llen ausreichend bei Substantiven die h ufig zusammengezsetzt sind und Adjektiven st t man hier schnell an die Grenzen Da das Objektvokabular auch zur Unterscheidung mehrerer Objekte herangezogen wird besteht ein Substantiv oder Adjektiv in Wirklichkeit aus zwei Z V okabeln Die zweite Vokabel kann den Wert null haben was bedeutet dass das Wort kurz genug ist um in eine Vokabel zu passen Die Flaggen auf __vokf sind die zur Vokabel angegebenen Konstanten plus einer Kennzeichnung 8000 f r Substantive 4000 f r Adjektive Ein Objekt
139. kann man die Library Routinen D mon_An Obj und D mon_Aus Obj benutzen Au erdem kann ein Objekt einen Zeitz nder besitzen der mit Setze_Z nder Obj zeit aktiviert wird und bei Ablaufen der Zeit gez ndet wird Die verbleibende Zeit wird in der Eigenschaft Rest zeit gespeichert die Eigenschaft die beim Z nden aufgerufen wird ist Z ndung Der Z nder kann vor Erreichen der Z ndung mit L sche_Z nder Obj deaktiviert werden Eine weitere Eigenschaft Jede_Runde wird immer dann aufgerufen wenn das betreffende Objekt in Sicht ist und kann f r Textausgaben genutzt werden Der Spieler Der Spieler wird durch das Objekt das in der Variable Spieler festgehalten wird repr sentiert normalerweise das Objekt Protagonist Initialisierung Jedes Objekt kann die Eigenschaft Init definieren die zu Beginn f r jedes Objekt einmal aufgerufen wird Dies geschieht bevor die Routine Anfang aufgerufen wird ndern der Standardmeldungen Die Standardmeldungen der Bibliothek k nnen im Bibiotheksobjekt Texte berschrieben werden F r Fehlermeldungen des Parsers gibt es die Rubrik nicht_verstanden Ablauf eines Zuges Nach der erfolgreichen Analyse der Eingabe durch den Parser werden folgende Stadien durchlaufen 162 Anhang B berblick ber die Bibliothek Nachparser e Die globale Routine Nachparser wird aufgerufen Vorher e Vorreaktion der Lib Objekte e Vorreaktion des momentanen Aufenthaltsraums e Vorreaktion aller Obj
140. kte mit dem Attribut Kleidung beim Anziehen bevorzugt werden und so weiter Ist immer noch keine eindeutige Wahl getroffen so kann die Eigenschaft Disambig der Objekte herangezogen werden die ebenfalls eine Wertung zur ckgibt Wenn ein Objekt gefunden wurde wird eine Annahme mit dem Brotmesser gedruckt und dieses Objekt benutzt Wenn hier keine eindeutige Entscheidung getroffen werden konnte fragt der Parser nach Die Ausgabe der Annahme kann durch Setzen der globalen Vaiable stumm unterdr ckt werden Wenn kein Objekt brig bleibt so wird das Objekt mit der h chsten Fehlernummer genommen Fehlermeldungen z hlen 1000 in dieser Betrachtung Wenn mehrere Objekte brigbleiben wird disambiguisiert wie oben beschrieben wenn kein Objekt hervorsticht fragt der Parser nach wenn die Fehlernummer gr er als eins ist Ansonsten wird ausgegeben Du siehst hier kein wobei der Wortlaut des Spielers verwendet werden sollte um nichts preiszugeben Hat ein Objekt eindeutig die h chste Fehlernummer so wird zun chst versucht den Fehler zu beheben Dies geschieht wenn die Fehlernummer gr er als eins ist und der Befehl den Eintrag implizit hat eine Routine die versucht das Objekt in die Reichweite des Spielers zu bringen z B ein Objekt aufzuheben Danach wird die Bedingung noch einmal gepr ft und wenn sie jetzt erf llt ist wird das Objekt genommen Ansonsten wird wie oben beschrieben eine Fehlermeldung f r die
141. l n Beschreibung Ein h lzernes Paddel 173 L sungen der Aufgaben Mit schreibeArg 255 a0bj2 wird das implizite jenach f r Kanu_Ausg nge erm glicht e 10 ZU In diesem Fall lassen wir nur Tochterobjekte des Hilfsobjekts Galaxis als Eintr ge Objekt Sternenatlas Name Sternenatlas Genus m Subst atlas m sternenatlas m sternatlas m sternkarte f karte f sternenkarte f Beschreibung Ein Sternenatlas zum Nachschlagen aller bekannten Sterne im westlichen Spiralarm der Galaxis Vorher nachschlagen wenn a0bj2 nichtin Galaxis stop ber diesen Stern findest du nichts Vielleicht ist es keiner LLES LES 1 a 1 n l Schriftstil kursiv a0bj2 Name Schriftstil 0 a0bj2 Beschreibung Objekt Galaxis Objekt gt Name Yewis III Subst yewis m iii m Beschreibung Die Unterwasserwelt von Yewis ist Stichwort Objekt gt Name Faghum II Subst faghum m ii m Beschreibung Faghum II ist die Hauptwelt der Allianz von Chalybes ist Stichwort 174 L sungen der Aufgaben e 11 Man k nnte die T r auch mit einem D mon implementieren hier verwenden wir einen Z nder Objekt Schiebet r Name Schiebet r Genus f Adj automatisch Subst t r f schiebet r f kartenschlitz m schlitz m codekartenschlitz m Z ndung wenn nicht_sichtb
142. le sowohl auf Gro rechnern als auch auf Organizern und Handhelds spielen kann Mit Inform kann man Adventures in anderen Sprachen au er Englisch schreiben die aber auf der relativ einfachen englischen Syntax aufbaut und in seinen vorgefertigten Satzmustern Grammatik und Semantik durcheinanderwirft Die M glichkeiten zum Anpassen des Inform Parsers sind daher meiner Meinung nach eingeschr nkt ber dieses Handbuch ZETA besteht aus dem Compiler der schlie lich die Spieldatei erzeugt und der Adventure Bibliothek bereits geschriebenem Code der das Schreiben von eigenen Adventures erm glicht Der erste Teil dieses Buchs befasst sich mit den Grundlagen von ZETA der Syntax den Elementen der Spieldatei und dem Compiler Die folgenden Teile des Handbuchs zeigen dann wie man ein Adventure schreibt und erkl ren die Einzelheiten der Bibliothek Wer sich nicht lange mit den Grundlagen aufhalten will kann mit Teil III beginnen und Teil I nur dann zu Rate ziehen wenn etwas unklar ist Die Syntax von Zeta ist nicht schwer zu verstehen sie lehnt sich ein wenig an C und Java an benutzt aber deutsche Schl sselw rter Die Teile des Buchs die sich mit der Bibliothek besch ftigen enthalten viele Code Beispiele die in Schreibmaschinenschrift gedruckt sind Um den Leser nicht mit Code zu erschlagen Einleitung werden neben den Beispielen auch Aufgaben gestellt deren L sungen den Leser hoffentlich etwas besch ftigen bevor er sie am Ende
143. lichen Ausg nge f r den Dieb enth lt Auf diese Weise kann man die Bewegungsfreiheit des Diebs einschr nken Objekt Dieb Name Dieb Genus m Subst dieb m Immer Ein Dieb lungert hier herum und be ugt dich kritisch D mon wenn selbst Wartezeit 0 lokal r Mutter Dieb n wenn r hat NPC_Ausg nge n r NPC_Ausg nge n r NPC_Ausg nge Zufall n 1 selbst Wartezeit Zufall 4 1 wenn Datentyp n Objekt antworte wenn r aRaum pDer Dieb schleicht weiter und betrachtet dich absch tzig als er den Raum verl sst verschiebe selbst nach n wenn n aRaum pEin verd chtig aussehender Herr hat sich gerade in den Raum geschlichen Er inspiziert dich und deine Besitzt mer sonst selbst Wartezeit Wartezeit 5 ist Person 13 Der Hauptd mon ist der einzige der in der Initialisierung regul r gestartet wird Er ruft dann in jeder Runde alle anderen aktiven D monen auf Diese D monen kann man von Anfang an aktivieren indem man ihnen das Attribut aktiv gibt Die Routine D mon_an sollte dann nicht mehr aufgerufen werden Aufpassen muss man dass sich der Hauptd mon nicht versehentlich selbst aufruft Attribut aktiv Objekt D mon lokal o alleObjekte o wenn o ist aktiv 176 L sungen der Aufgaben amp amp o selbst amp amp o hat D mon o D mon init D mon_an selbst Wenn hier neben den
144. lltextes nur unter bestimmten Bedingungen zu kompilieren Diese Anweisungen sind der wenn sonst Anweisung hnlich wenn def ndef Ausdruck Anweisungen sonst andere Anweisungen ende Die Angabe von sonst ist optional ende muss auf jeden Fall angegeben werden Drei verschiedene Bedingungen k nnen mit wenn benutzt werden wenn def Name ist wahr wenn im Quelltext etwas mit dem angegebenen Namen definiert wurde Dabei speilt es keine Rolle ob der Name ein Objekt eine Variable eine Routine oder etwas anderes bezeichnet er muss lediglich bereits bekannt sein Definitionen die weiter hinten im Quelltext stehen werden nicht ber cksichtigt wenn ndef Name ist wahr wenn der Name in Zeta noch nicht benutzt wurde wenn Ausdruck ist wahr wenn der Ausdruck wahr ist Der Ausdruck darf nur konstante Werte enthalten da er w hrend des Kompilierens ausgewertet werden muss Unbekannte Bezeichner d rfen hier ebenfalls nicht verwendet werden In den anderen beiden Bedingungen nat rlich schon Diese Direktiven k nnen auch innerhalb von Routinen oder Objektdefinitionen verwendet werden wenn def Debug Objekt Nr num o sonst o Name ende Mit diesen Steueranweisungen kann man auch ganze Bl cke im Quelltext deaktivieren ohne mit eventuell bereits existierenden Kommentaren in Konflikt zu geraten wenn def niemals ende 61 4 Der Compiler und seine Optionen Das funktioniert allerdings nur dann wenn
145. lugblatt gelangt Dass er den Briefkasten einfach ffnen und schlie en kann erm glicht das Attribut schlie bar Mehr ber Beh lter in Abschnitt 7 3 Schlie lich gibt das Attribut fest an dass man das Objekt nicht einfach mitnehmen kann Das Flugblatt hat au er Name und Vokaular keine weiteren Attribute was es im Moment noch zu einem etwas nichts sagenden Objekt macht wie ein Verlauf unseres Beispiels zeigt 79 6 Einf hrung in die Bibliothek Das Gro e Unterweltreich Ein interaktives Plagiat Release 1 Seriennr 050130 z Lib 0 0 prebeta Westlich des Hauses Du stehst auf freiem Feld westlich eines kleinen wei en Hauses dessen T r mit Brettern zugenagelt ist Hier ist ein kleiner Briefkasten gt untersuche den briefkasten Der kleine Briefkasten ist geschlossen gt ffne ihn Der kleine Briefkasten ist jetzt offen Im kleinen Briefkasten siehst du ein Flugblatt gt nimm das flugblatt Du nimmst das Flugblatt aus dem kleinen Briefkasten gt lies es Auf dem Flugblatt steht nichts gt untersuche es Du siehst nichts Besonderes an dem Flugblatt gt lege das flugblatt in den briefkasten Du hast das Flugblatt in den kleinen Briefkasten gelegt gt L Westlich des Hauses Du stehst auf freiem Feld westlich eines kleinen wei en Hauses dessen T r mit Brettern zugenagelt ist Hier ist ein kleiner Briefkasten Im kleinen Briefkasten siehst du ein Flugblatt Erweitern wir also die Definition des Flugblat
146. mfunktion Anhang A Vorrang von Operatoren 1 4 w Option 4 1 weiter Anweisung 1 7 wenn Anweisung 1 6 wenn Steueranweisung 4 3 Werte bergabe 1 5 white space 1 2 wiederhole Anweisung 1 7 Wortumbruch Systemfunktion Anhang A y Option 4 1 190 z Option 4 1 Zahlen in ZETA 1 3 Z Code 1 1 Zeilenumbruch mit n 1 9 zerst re Systemfunktion 2 8 Zufall Systemfunktion 1 5 Anhang A Zufallszahlen 1 5 Zusammenfassen mehrerer Anweisungen 1 6 Zuweisen von Werten 1 3 Index 191
147. mit der Definition Adj neu Subst geldschein m 20 euro schein m banknote f erh lt also in Wirklichkeit folgende Eigenschaften __vokl neu geldschei 20 eur banknote __vok2 0 TNE o schein 0 __vokf f 4000 8000 m 8000 m 8000 f Der 20 Euro Schein nutzt sogar die gesamte Aufl sung von 18 Zeichen aus da die vier Sonderzeichen doppelt z hlen 11 2 Grammatikdefinitionen Das Format der Grammatikdefinitionen ist nicht wie h ufig vermutet wird von der Z Maschine vorgegeben sondern wird von ZETA festgelegt Die folgenden Direktiven erzeugen die f r den Parser ben tigten Daten Befehl Pr position Synonym Befehlseintrag Satzbaustein Verb Nachfolgend wird die Struktur der Grammatikdaten beschrieben Diese Information ist nur interessant wenn man die Bibliothek ver ndern will oder wenn man eine eigenen Parser mit ZETA entwickeln will 132 11 Daten f r den Parser 1 Allgemeines Die Grammatikdefinitionen beginnen am unteren Ende des statischen Speicherbereichs Die Adresse in der sich der statische Speicherbereich befindet steht als 2 Bit Zahl in Bytes 14 und 15 im Dateikopf 0 gt 7 Die ersten vier Words der Grammatikdefinitionen enthalten die Adressen der Unterlisten 00 Befehlsliste 01 Verbliste 02 Synonymliste 03 Pr positionsliste 2 Befehle Befehle sind Zusammenschl sse von Daten die in Textadventures dazu benutzt werden Routinen und Variablen f r
148. n ZSCIH Zeichensatzes von 155 bis 251 Obwohl es vermutlich wenig n tzlich ist ist es m glich diese erweiterten Zeichen in Vokabeln zu benutzen Die Konstante a7 ist die Vokabel die nur aus dem Paragraphenzeichen besteht 30 2 Objekte und Klassen 2 1 Das Konzept der Objekte Objekte sind Datenstrukturen in denen Variablen und Routinen zusammengefasst sind Dies ist gerade in Adventures praktisch Jeder Gegenstand und jeder Raum wird in ZETA durch ein Objekt dargestellt Im Gro en und Ganzen sieht die Definition eines Objekts so aus Objekt Name Die genaue Definition eines Objekts wird sp ter beschrieben Alles was zwischen den geschweiften Klammern steht und hier mit drei Punkten abgek rzt wird sind die Daten die zu diesem Objekt geh ren Die Konstante nichts die den Wert null hat bedeutet kein Objekt Und tats chlich ist nichts kein Objekt Es hat keine Eigenschaften und es ist nicht erlaubt Daten von nichts zu lesen oder gar zu ndern 2 2 Der Objektbaum Genau wie die Gegenst nde im Spiel eine bestimmte Lage in Bezug auf andere Objekte haben sind auch die Objekte in ZETA einander zugeordnet Diese Zuordung hei t Objektbaum Dieser Objektbaum hnelt einem Stammbaum Jedes Objekt hat eine Mutter eine Tochter und eine Schwester die entweder ein anderes Objekt oder nichts sind Tochter hei t hier immer lteste Tochter Schwester bedeutet n chst ltere Schwester
149. n daher die Anweisung entferne Objekt verwenden Hier wird das Objekt mit seinen Kindern so verschoben dass es keine Mutter mehr hat Wieder ein Beispiel der Baum nach Entfernen des Rucksacks sieht so aus Zimmer Rucksack an gt Stuhl ER NEN E en u gt Schl ssel Man erh lt zwei voneinander unabh ngige B ume In einem typischen Spiel gibt es viele 33 2 Objekte und Klassen B ume deshalb ist es nicht ganz korrekt von dem Objektbaum zu sprechen I Mit verschiebe kann man den Baum in unm gliche Zust nde versetzen wenn man versucht ein Objekt in ein zweites zu verschieben das eine Tochter oder Enkelin oder Urenkelin des ersten ist etwa mit verschiebe Tisch nach Zeitung Solche Operationen sind zwar m glich hinterlassen aber einen besch digten Objektbaum und m ssen daher unbedingt vom Programmierer vermieden werden Schlie lich gibt es noch eine Bedingung mit der man pr fen kann ob ein Objekt eine Tochter eines anderen ist Objekt in Objekt Diese Bedingung ist wahr wenn das erste Objekt ein direktes Kind des zweiten ist x in y ist also nur eine bersichtlichere Schreibweise f r Mutter x y Die Verneinung dazu ist nichtin Das erste Objekt darf nicht nichts sein das zweite schon Rucksack in nichts pr ft ob der Rucksack vom Baum abgespalten wurde und die Wurzel eines eigenen Baums ist Es gibt eine Schleife die alle Objekte nacheinander durchl uft alleObjekte Variable
150. n vierundzwanzig Objekte reserviert die dem Spieler und dem Programmierer zun chst nicht zug nglich sind und die mit der Anweisungm erzeuge M nze erzeugt werden k nnen Diese Systemfunktion gibt ein erzeugtes Objekt zur ck oder nichts wenn keine Objekte mehr erzeugt werden konnten da bereits alle vierundzwanzig M nzen im Spiel sind Mit zerst re m kann man eine M nze wieder aus dem Spiel nehmen um sie dann eventuell sp ter wieder erzeugen zu k nnen Beim Erzeugen muss eine Klasse angegeben werden da nur Instanzen von Klassen erzeugt werden k nnen Beim Zerst ren muss ein Objekt angegeben werden da immer eine konkrete Instanz zerst re wird Man kann auch Objekte erzeugen die zu keiner Klasse geh ren Dann ist dieses Objekt f r immer verloren es kann nicht wieder erzeugt werden Nach dem Erzeugen befindet sich ein Objekt in nichts und es hat die Eigenschaften der Klasse Diese Eigenschaften k nnen nat rlich ge ndert werden wenn das Objekt erzeugt wurde x erzeuge M nze 46 2 Objekte und Klassen verschiebe x nach Spieler x Wert Zufall 1 2 5 10 Dies kann man eleganter beim Objekt selbst mit der Eigenschaft erzeugen angeben da das erzeugte Objekt die Mitteilung x erzeugen erh lt Diese Eigenschaft kann wie blich bis zu drei Argumente bergeben Klasse M nze 24 erzeugen lokal w 0 selbst Wert w verschiebe selbst nach o Nun kann man miterzeuge M nze 50 G
151. n werden sollen sind nicht im ZSCH Zeichensatz repr sentiert und k nnen nicht gelesen werden Wenn die erste Methode der Ausgabe verwendet wird ist das entsprechende Zeichen auch f r die Eingabe definiert auch wenn exotische Zeichen sich nicht eifach ber die Tastatur eingeben lassen x Das Eurozeichen ist aber auf den meisten Tastaturen vorhanden Der von Windows verwendete ASCI Code 128 entspricht brigens nicht dem Standard ISO 8859 1 so dass hier auf den korrekten Unicode 20ac zur ckgegriffen werden sollte Die Systemfunktion Unicode gibt wahr oder falsch zur ck je nachdem ob das Zeichen existiert Wenn das zweite Argument eins ist wird in keinem Fall ein Zeichen ausgegeben 29 1 Grundlagen man kann also die Verf gbarkeit von Unicode Zeichen testen wenn Unicode S20ac 1 kKurzst fing Euro 20ac sonst Kurzstring Euro Euro Wenn diese Sequenz in einer Initialisierungroutine angegeben wird kann innerhalb von Strings mit der Notation Euro je nach Interpreter oder Euro ausgegeben werden Wenn der Unicode existiert ist das Eurozeichen auch f r die Eingabe definiert x Wenn man ein Unicode Zeichen als einzigen Eintrag in Hochkommas benutzt gibt man damit eine ZSCIH Konstante an Genau wie a der ZSCH Wert des Buchstabens ist ist Sa9 der ZSCH Wert des Copyright Zeichens Dieser Wert ist allerdings verschieden von a9 oder 169 er liegt im Bereich des erweiterte
152. nder Satz haben kann Und so ist auch die Arbeitsweise des Parsers von ZETA Wenn ein Verb gefunden wurde geht er m gliche Satzmuster durch bis eins auf den eingegebenen Satz passt Letzten Endes wird jeder g ltige Satz in einen Befehl umgewandelt mit dem das Weltmodell dann arbeitet Die Eingabe Zwerg gib dem Troll die kleine Axt wird nach erfolgreicher Analyse umgewandelt in folgende Variablen Akteur Zwerg aBefehl geben a0Obj Troll a0bj2 kleine_Axt Und so ist x Es w re sch n wenn der Parser auch S tze wie die T r aufschlie en verst nde bei denen das Verb als Infinitiv hinten anh ngt Im Moment kann die ZETA Bibliothek dies allerdings nicht 125 9 2 9 3 9 4 9 5 9 6 9 Der Parser Verben Satzmuster Objekte Parser Routinen G ltigkeit von Objekten 126 Teil IV ZETA f r Fortgeschrittene 127 10 Weitere Funktionalit ten 10 1 Routinen mit beliebig vielen Argumenten In der Z Maschine ist die Anzahl der Argumente die beim Aufruf einer Routine bergeben werden nicht festgelegt Wird eine Routine mit weniger Argumenten aufgerufen als angegeben so bekommen die restlichen Argumente den Wert 0 Werden mehr Argumente angegeben als lokale Variablen vorhanden sind so verfallen sie Funktionsaufrufe wie und 0 sind also gleich Vielleicht m chte man sie aber unterscheiden Dazu gibt es die Systemfunktion Argumente die die Anzahl der bergebe
153. nen Argumente in der jeweiligen Routine angibt Dieser Wert w re null f r und eins f r 0 ZETA erlaubt es bei der Deklaration der Routine eine variable Anzahl von Argumenten anzugeben Dazu setzt man als letztes Argument anstelle eines Bezeichners drei Punkte als Auslassungszeichen Routine istGleich x wirkliches Auslassungszeichen Die an die Routine bergebenen Argumente haben keine Bezeichner deshalb muss man sie mit den beiden Systemfunktionen Wert leseArg n schreibeArg n Wert ansprechen n ist hier der Index aller Argumente und es wird bei eins angefangen zu z hlen In der Routine istGleich w re leseArg 1 gleich dem Wert von x Maximal k nnen sieben Argumente an eine Funktion bergeben werden Das Zugreifen auf Argumente ber deren Index erlaubt einiges flexibles Programmieren zum Beispiel das Pr fen auf Gleichheit f r mehrere Werte Routine ist_gleich x lokal n Argumente solange n gt 1 wenn leseArg n x antworte wahr antworte falsch 128 10 Weitere Funktionalit ten Oder das Folgende Routine max lokal n Argumente m wenn n m leseArg n solange n wenn leseArg n gt m m leseArg n antworte m Hier wird das Maximum ber alle angegebenen Werte gebildet Es k nnen nat rlich in der Routine weitere lokale Variablen mit Lokal definiert werden x Mit den Funktionen leseArg und schrei
154. ng wie Text abgetrennt werden m sste Die meisten Fehlermeldungen f r Syntax Fehler sollten jedoch selbsterkl rend sein Nicht definierte Symbole Der Fehler Dieser Bezeichner ist unbekannt ist in der Regel leicht zu beseitigen Entweder wurde der Bezeichner falsch geschrieben oder er wurde in einem Ausdruck benutzt bevor er deklariert wurde so dass ZETA nicht wei welchen Datentyp er bezeichnet Eine Fehlermeldung wie 70 5 Fehler suchen und beseitigen Das Objekt maxAnzahl wurde nicht definiert kann dagegen etwas irref hrend sein Der Grund daf r ist dass alle Bezeichner deklariert werden m ssen bevor sie benutzt werden Die Ausnahme sind Routinen und Objekte um die Reihenfolge im Quelltext nicht zwingend festzulegen oder um Kreisreferenzen erzeugen zu k nnen Der Aufruf einer Routine kann also erfolgen bevor die Routine im Quelltext definiert wurde ZETA merkt sich dann den Namen wei dass es sich um eine Routine handelt und erwartet dass diese Routine sp ter im Quelltext definiert wird Ist dies nicht der Fall gibt es einen Fehler da irgendwo im Code der Aufruf einer unbekannten Funktion steht Entweder wurde vergessen die Routine zu definieren oder die passende Datei einzubinden in der diese Routine steht oder aber der Bezeichner wurde falsch geschrieben Die Syntax f r einen Funktionsaufruf ist durch die runden Klammern die auch dann angegeben werden m ssen wenn keine Argumente bergeben werden eindeu
155. ngen die in der Routine Hallo stehen aus und mache dann mit der n chsten Anweisung weiter Man sagt die Routine Hallo wird aufgerufen Die beiden Klammern sind hier wichtig auch wenn sie leer sind Nur wenn sie angegeben werden wei ZETA dass die Routine aufgerufen werden soll Dieses Programm bewirkt dasselbe wie unser erstes Programm das nur aus dem Hauptprogramm bestand Routinen sind immer dann n tzlich wenn Anweisungen h ufig ben tigt werden in unserem Fall wenn man oft Hallo Welt ausgeben muss In anderen Programmiersprachen hei en Routinen auch Subroutinen Funktionen oder Prozeduren Es handelt sich dabei aber immer um dasselbe Konzept 1 3 Zahlen und Variablen Bis jetzt haben wir nur Texte ausgegeben Um unser Programm etwas komplexer zu machen f hren wir nun Zahlen ein 1 Grundlagen Hauptprogramm num 1972 Dieses Programm gibt nur die Zahl 1972 aus mehr nicht Die Systemfunktion num schreibt einen numerischen Wert Zahlen in ZETA bestehen aus einer Folge von arabischen Ziffern denen ein Minuszeichen vorangehen kann Sie sind immer ganzzahlig und liegen im Bereich von 32 768 bis 32 767 Neben dieser Dezimalschreibweise kann man Zahlen auch in Hexadezimal und Bin rschreibweise angeben dazu stellt man ihnen ein oder zwei Dollarzeichen voran bzw Dann kann allerdings kein negatives Vorzeichen angegeben werden negative Zahlen x werden als 65536 x betrachtet Folgende An
156. nn Dabei werden am K rper getragene Objekte die das Attribut angezogen besitzen nicht mitgez hlt Die Kapazit t des Spielers ist standardm ig 64 der Spieler kann beinahe beliebig viele Gegenst nde mit sich herumschleppen Die Eigenschaft Kapazit t kann aber beliebig ge ndert werden sie muss ein positiver Wert sein oder eine Routine die einen solchen Wert zur ckgibt Null und negative Werte sind auch m glich dann kann der Spieler aber nichts mit sich herumtragen ihm sind quasi die H nde gebunden Das Inventar des Spielers ndert sich st ndig meist dadurch dass der Spieler Dinge aufhebt oder wieder ablegt Der Befehl zum Aufheben von Gegenst nden hei t berraschung aufheben Wenn dieser Gegenstand auf einer Ablage oder in einem Beh lter liegt wird dieser Befehl umgewandelt in herunternehmen oder herausnehmen so dass Beh lter und Ablagen mit den passenden Pseudobefehlen reagieren k nnen In jedem Fall wird das Aufheben in den Befehl nehmen umgewandelt Hier wird gepr ft ob der Spieler ausreichend Tragekapazit t hat und ob der Gegenstand berhaupt aufgehoben werden kann Um das Aufheben eines Gegenstands zu unterbinden sollte man das nehmen abfangen Analog dazu wird beim Ablegen eines Gegenstands in einen Raum einen Beh lter oder auf eine Ablage der Befehl hergeben aufgerufen Dieser Befehl macht normalerweise nichts aber hier kann man das Ablegen eines Gegenstands verhindern wenn man m chte und zwar
157. nn nicht Ablage und Beh lter gleichzeitig sein Die Befehle f r Beh lter sindhereinlegen und herausmehmen bei einer Ablage lauten diese Befehle darauflegen und herunternehmen Zu jedem dieser Befehle kann der Beh lter oder die Ablage als a0b 2 reagieren x Jede Ablage und jeder Beh lter k nnen nur eine beschr nkte Anzahl von Objekte aufnehmen die in ihrer Eigenschaft Kapazit t festgelegt ist Diese ist per Default 255 was in der Praxis Platz f r beliebig viele Objekte bietet Die Kapazit t kann nat rlich auch eine Routine sein In Raumbeschreibungen im Inventar des Spieler oder beim Untersuchen wird der Inhalt von Beh ltern und Ablagen angezeigt Es wird ein Satz wie Auf dem B cherbord siehst du eine Streichholzschachtel einen kleinen Drachenbaum und einen Almanach ausgegeben Diesen generischen Satz kann man aber f r jedes Beh lter oder Ablagenobjekt anpassen Inhalt Du siehst einen Liste auf dem B cherbord Das Hilfsobjekt Liste repr sentiert die passenden Objekte in Listenform Mit ein wird diese Liste ausgegeben mehr dazu in Abschnitt 8 1 x Es gibt auch eine Eigenschaft kein_Inhalt die ausgegeben wird wenn der Beh lter oder die Ablage keine Tochterobjekte haben Dann w rde Das B cherbord ist leer auch in Raumbeschreibungen ausgegeben x Auch R ume k nnen die Eigenschaft Inhalt haben um den Standardsatz Hier ist ein zu ersetzen Wie eine Raumbeschreinung genau aussi
158. nnimmt den es aufgrund des ersten Worts haben k nnte alle weiteren W rter bleiben unber cksichtigt Das ist f r die Meta Befehle die ja meist nur aus einem Wort bestehen gut genug x Wenn aBefehl keiner der vier oben genannten Meta Befehle ist wird der LibText verschiedenes 4 ausgegeben Wer will kann hier zus tzliche Optionen nach Spielende einbauen e Aufgabe 15 Manche Spiele bieten dem Spieler ein Nachwort an meist um auf lustige Dinge hinzuweisen die der Spieler eingeben kann Implementiere das 7 15 Die Statuszeile blicherweise befindet sich oben am Bildschirm ein Bereich der invers gedruckt ist und der allgemeine Informationen ber das Spiel enth lt die so genannte Statuszeile Wenn nichts anderes angegeben wird ist die Statuszeile eine Zeile hoch und in der linken oberen Ecke steht einfach der Name des Aufenthaltsraums eventuell gefolgt von einem anderen Objekt in oder auf dem sich der Spieler gerade befindet Das Aussehen der Statuszeile kann aber ver ndert werden dazu gibt es zwei M glichkeiten Die einfachere ist die H he der Statuszeile mit der Variable Statuszeilen festzulegen und den Inhalt der Statuszeile in den Lib Texten zum Pseudobefehl Status mit den Nummern eins bis drei Der erste Text wird linksb ndig geschrieben der zweite zentriert und der dritte rechtsb ndig Zeilenumbr che in den Texten sind m glch wenn es aber mehr Zeilen als Statuszeilen gibt wird der Text entsprechend gek rzt
159. nnt gegeben Die Antwort von Ausf ist falsch 163 Anhang B berblick ber die Bibliothek wenn der Befehl nicht abgebrochen wurde wahr sonst Der Parser berpr fen ob ein Wort der Eingabe entspricht Bevor der Text analysiert wird steht die Variable zur Markierung des n chsten Worts der Wortz hler wn auf dem ersten zu analysierenden Wort Danach wird f r alle Objekte die Eigenschaft Parser aufgerufen die die nachfolgenden W rter analysieren kann und einen der folgenden Werte zur ckgibt falsch um das Wort nicht zu ber cksichtigen oder einen anderen Wert um das Wort in die Liste aufzunehmen 1 f hrt mit der Analyse fort um die normalen Regeln anzuwenden 2 bricht die Analyse ab und 3 nimmt das Wort auf und markiert es als einen Plural entspricht pp Der Wortz hler muss auf dem ersten Wort das nicht zum gefundenen Objekt geh rt stehen gelassen werden wenn ein Treffer vorliegt Danach werden die Eigenschaften Parser der Bibliotheksobjekte f r jedes Objekt ausgef hrt mit den selben R ckgabem glichkeiten Schlie lich wird jedes Objekt anhand seiner Eigenschaften Adj und Subst analysiert berpr fen ob ein Objekt in Frage kommt Wenn der Befehl aBe fehl eindeutig bestimmt ist und ein Objekt gefunden wurde wird berpr ft ob dieses Objekt benutzt werden kann In der Regel wird gepr ft ob es sichtbar oder ber hrbar ist Dazu wird der Eintrag ung ltig des Befehls betrachtet eine Routine die entweder
160. nster Der Bildschirm der Z Maschine teilt sich in zwei Bereiche Das untere oder Textfenster und das obere oder Statusfenster Das Textfenster wird immer dargestellt das Statusfenster kann ein und ausgeblendet werden Dies geschieht mit der Systemfunktion Statusfenster Z Wenn Z null ist wird das Statusfenster ausgeblendet ein positives Z blendet ein Statusfenster am oberen Rand ein das Z Zeilen hoch ist Das Statusfenster wird zwar eingeblendet ist aber erst sichtbar wenn etwas in das Fenster geschrieben wird Vor allem wird das Fenster nicht automatisch invers d h mit umgekehrten Farben dargestellt wie man es aus den meisten Adventures gewohnt ist Mit der Funktion aktivesFenster F kann man das Textfenster F 0 oder das Statusfenster F 1 f r die Ausgabe von Text ausw hlen Das Statusfenster ist dem Textfenster berlagert An Stellen an denen im Statusfenster kein Text steht sieht man das was im Textfenster steht Damit das Textfenster nicht durchscheint wird das Statusfenster daher vor dem Beschreiben mit inversen Leerzeichen gef llt Im Statusfenster wird nicht gescrollt es ist nicht erlaubt in Zeilen zu schreiben au erhalb des mit Status fenster definierten Bereichs liegen Der Text im Statusfenster wird immer in einer Schreibmaschinenschrift geschrieben deren Zeichen dieselbe Breite haben Wenn man die Gr e dieser Zeichen als Einheit benutzt sind die Abma e des gesamten Bildschirms 52 3
161. olette_Lampions antworte rote_Lampions Meldung ausschalten stop Du l schst den selbst Farbe en Lampion einschalten stop Du z ndest den Lampion an der nun selbst Farbe leuchtet w rter Adjektive wenn selbst ist eingeschaltet wenn ist_Adjektiv selbst Farbwort stop wenn ist_Adjektiv hell stop wenn ist_Adjektiv leuchtend stop sonst 181 L sungen der Aufgaben wenn ist_Adjektiv erloschen stop wenn ist_Adjektiv dunkel stop ist schaltbar Objekt heller_Lampion Name leuchtend e Lampions Plural p Zahlenangabe Objekt dunker_Lampion Name erloschen e Lampions Plural p Zahlenangabe Die Lampions haben hier individuelle Farben die sie einmal zu einem Plural zusammengefasst aufgeben das ist nicht ganz sch n weil der Spieler nun nicht mehr wei welche Farben genau die Lampions haben 182 Index Anf hrungszeichen im Flie text 1 9 gt Feldzuweisung 1 8 gt bei der Objektdefinition 2 2 Dekrement 1 4 gt Feldzuweisung 1 8 Kennzeichnung f r Hexadezimalzahlen 1 3 Option beim Aufruf 4 1 Kennzeichnung f r Bin rzahlen 1 3 additive Eigenschaft 2 5 Option beim Aufruf 4 1 Inkrement 1 4 Anzahl der Eintr ge einer Eigenschaft 2 4 amp Eigenschaftsfeld 2 4 Zugriff auf Eigenschaften 2 4 Bereichsdefinition 1 6
162. outine Spielbanner lang kann man das Spielbanner auch sp ter ausgeben lassen Nur wenn lang gesetzt ist werden die Zusatztexte zu Untertitel wie zu Beginn des Spiels ausgegeben Der Befehl meta__Version zeigt nur das kurze Spielbanner also Story Copyright und technische Daten an Nach dem Aufruf von Anfang muss die Bibliothek wissen wo der Spieler sein Abenteuer beginnen soll Dazu muss entweder die Variable aRaum auf den Anfangsraum gesetzt werden oder das Objekt Spieler muss in das passende Mutterobjekt verschonen werden Welche Methode man benutzt ist letztendlich egal nur sollte man nur eine dieser Methoden verwenden 110 7 Das Modell der Spielwelt x Der Anfangsort des Spielers muss nicht unbedingt ein Raum sein manche Spiele lassen den Spieler in seinem Bett aucfwachen in diesem Fall w rde man den Spieler ins Bett verschieben und die Sitzposition auf Liegen setzen Es ist auch m glich den Spieler im Dunkeln das hei t in einem dunklen Raum anfangen zu lassen Irgendwann kommt das Ende des Spiels Der Spieler erreicht sein Ziel und bringt die Geschichte zu einem guten Ende Oder was weitaus h ufiger passiert er scheitert was in so genannten klassischen Spielen soviel hei t wie er stirbt Wann stirbt oder gewinnt der Spieler Genau dann wenn die globale Variable Ende einen wahren also von null verschiedenen Wert hat Die Konvention in ZETA ist dass ein erfolgreiches Ende mit einen postiven Wert von Ende ein sc
163. piel die g ngigen Befehle auch wenn die meisten durch die sp rlichen Voraussetzungen eher nutzlos sind 77 6 Einf hrung in die Bibliothek Die beiden Konstanten Story und Copyright m ssen immer definiert werden bevor die Bibliothek eingebunden wird Sie enthalten den Titel des Spiels und die Information ber Autor und Copyright des Werks Diese Angaben werden im Spielbanner zu Beginn des Spiels angezeigt aber auch wenn der Spieler Version eingibt Der Hauptteil des Spiels wird allerdings nach dem Einbinden der Bibliothek definiert Ein Raun ist eine Objektklasse die in der Bibliothek vordefiniert ist Jedes Spiel muss mindestens einen Raum enthalten und jeder Raum muss Name und Beschreibung haben Die Routine Anfang ist ebenfalls verpflichtend f r ein Spiel in ihr kann ein Anfangstext geschrieben werden und der Spieler muss an seinen Anfangsort gebracht werden x Die Bibliothek enth lt auch das Hauptprogramm so dass ein Adventure das diese Bibliothek nutzt kein Hauptprogramm definieren muss x Die Bibliothek besteht nicht nur aus einer sondern aus etwa zehn Dateien die verschiedene Bereiche der Bibliothek enthalten Diese Dateien werden aber alle aus zlib zin heraus aufgerufen so dass der Autor eines Spiels nur diese Datei einbinden muss Eben wurde gesagt dass die Routine Anfang den Anfangsort des Spielers festlegen muss Das geschieht indem man die Variable aRaum setzt oder das Objekt Spieler an den Startpunkt v
164. r muss links ein Objekt rechts eine Eigenschaft stehen haben Ausdr cke wie 12 8 sind im Quelltext unzul ssig Obwohl ZETA alle Datentypen in Zahlen umwandelt Diese Art der berpr fung ist nicht ganz vollst ndig denn wenn anstelle von falschen Datentypen komplexere Ausdr cke oder Aufrufe von Routinen stehen wird angenommen dass aus diesem Ausdruck der korrekte Datentyp resultiert Der Programmierer muss also 69 5 Fehler suchen und beseitigen sicherstellen dass z B eine Routine ein Objekt zur ckgibt wenn er einen Aufruf anstelle eines Objekts verwendet Eine weitere M glichkeit die berpr fung zu umgehen ist Variablen zu verwenden W hrend eine Zeile wie wenn 15 in 0 vom Compiler moniert wird ist a 15 b 0 wenn a in b syntaktisch korrekt und erzeugt Code wenn auch nicht unbedingt sinnvollen Ein Fehler der nicht unbedingt auf den ersten Blick ersichtlich ist taucht oft im Zusammenhang mit Bedingungen in runden Klammern auf Die Zeile while x lt 24 num alx n erzeugt den Fehler Hier wird ein Semikolon erwartet nach der runden Klammer Der Bezeichner while ist kein g ltiges ZETA Schl sselwort und er bezeichnet in anderen Sprachen eine Schleife mit solange so dass Programmierer die an C oder Java gew nht sind an dieser Anweisung nichts Ungew hnliches finden Der erste Teil wird hier aber als Aufruf der noch nicht bekannten Routine while angesehen von der eine Anweisu
165. r der hinter einem Punkt angegeben wird Sie erzeugt keinen Code sondern markiert nur eine Stelle im Programm Der Bezeichner kann dann mit springe benutzt werden Diese Anweisung springt einfach an den Punkt der durch die passende Sprungmarke gekennzeichnet ist Als primitives Beispiel wird hier eine Endlosschleife erzeugt i 0 dahin num i Durchgang n springe dahin Intern werden Schleifen und Bedingungen in ZETA mit Sprungmarken verwirklicht die dem Programmierer nicht zug nglich sind Im Allgemeinen ist es besser die regul ren Anweisungen f r Schleifen zu benutzen da viele Sprungmarken den Quelltext un bersichtlich machen 20 1 Grundlagen In manchen F llen k nnen Sprungmarken aber n tzlich sein Zum Beispiel um gr ere Codebl cke zu berspringen oder um abbrechen und weiter f r verschachtelte Schleifen zu implementieren schleife i 1 i lt imax i schleife j 1 j lt jmax j wenn i j 8 springe ganzWeiter num i ur num j mon F num i j n wenn i j 25 springe ganzAbbrechen ganzWeiter ganzAbbrechen Sprungmarken sind immer lokal d h man kann nicht aus einer Routine heraus springen Obwohl die Spezifikation der Z Maschine dies erlaubt x Mit der Anweisung beenden kann man den Interpreter verlassen so als ob das Ende des Hauptprogramms erreicht w re Diese Anweisung sollte allerdings nur als letzter Ausweg in verfahrenen Situationen benutzt wer
166. r eventuell indirekt aufh lt Sitzt der Spieler also auf einem Stuhl der auf einem Podest im Konferenzzimmer steht ist aRaum das Konferenzzimmer obwohl das direkte Mutterobjekt des Spielers der Stuhl ist 103 7 Das Modell der Spielwelt x Es gibt F lle in denen aRaum nicht sichtbar ist zum Beispiel wenn der Spieler in einer geschlossenen Kiste aus nicht durchsichtigem Material ist F r solche F lle gibt es die Variable Sichtgrenze die das am n chsten oberhalb des Spielers im Objektbaum befindliche Objekt beschreibt das nicht durchsichtig also ein geschlossener Beh lter der nicht transparent ist bezeichnet Dies ist in der Regel identisch mit aRaum in Sonderf llen aber nicht Es wird immer die Raumbeschreibung der Sichtgrenze ausgegeben x Die Dunkelheit ist kein eigener Raum Wenn sich der Spieler in einem dunklen Raum befindet ist aRaum dieser Raum Die Sichtgrenze ist dann allerdings der Spieler selbst Die Variablen aRaum und Sichtgrenze sollten von Autoren nie explizit ge ndert werden dies bernimmt die Bibliothek Deshalb solte man den Spieler auch nie einfach nur im Objektbaum verschieben Man kann nat rlich Aktionen wie Ausf gehen Nord_Objekt Ausf betreten Tempel ausl sen um den Spieler in einen benachbarten Raum zu bewegen Um den Spieler an einen beliebigen Ort zu bringen ruft man am besten die Routine gehe_zu obj b auf die den Spieler in das Objekt obj bringt und die Variablen aRaum und
167. r manipulieren Die Eigenschaft Inhalt kann eine Routine beinhalten die eine Liste des Inhalts des Objekts ausdruckt wie sie in der Raumbeschreibung oder beim Untersuchen des Objekts auftaucht Hat ein Beh lter eine Ablage oder eine Person diese Eigenschaft nicht wird die Standardmeldung etwas wie In auf dem Schrank siehst du ausgegeben Die Eigenschaft kein_Inhalt erlaubt es einen Text auszugeben wenn das Objekt keine Kinder hat also leer oder frei ist Fehlt diese Eigenschaft wird nichts ausgegeben Zus tzlich k nnen Objekte Unterobjekte besitzen die in der Eigenschaft Unterobjekte als Liste angegeben werden Diese sind sichtbar und ber hrbar wie die Hauptobjekte jedoch nicht ihre Kinder im Objektbaum Diese Objekte werden auch nicht bei der Inhaltsangabe der Objekte ber cksichtigt T ren 159 Anhang B berblick ber die Bibliothek Objekte mit dem Attribut T r verbinden zwei R ume Eine T r im Sinne von Zeta muss nicht unbedingt eine T r sein es kann sich auch um eine Br cke oder einen Pfad handeln Damit man durch eine T r gehen kann darf sie nicht geschlossen sein Eine T r hat einen Zielraum eine Eigenschaft die beschreibt wohin diese T r f hrt Um das Gehen in eine Richtung abzufangen kann eine T r auch die Eigenschaft Richtung besitzen Der Ausgang des Raums muss dann auf die T r verweisen Die Befehle zum ffen und Schlie en von T ren und Beh ltern oder anderen Objekten die das
168. r Pfeile gibt die Verschachtelungstiefe der Objekte an ist sie gr er als null so ist das zuletzt mit einem Pfeil weniger definierte Objekt die Mutter Alle hintereinander mit gleichviel Pfeilen definierten Objekte sind Schwestern Die Alternative hierzu ist die Mutter mit in anzugeben Objekt Zimmer Objekt Tisch in Zimmer Objekt Stuhl in Zimmer Objekt Zeitung in Tisch 32 2 Objekte und Klassen Bei dieser Variante ist die Reihenfolge der Definitionen egal Man kann beide Varianten gemischt einsetzen aber es ist besser wenn man sich f r eine der beiden Arten der Objektdefinition entscheidet Bei der zweiten Variante ist zu beachten dass die Mutter nur hinter in angegeben werden kann Man ist immer versucht etwas wie auf Tisch oder im Zimmer zu schreiben Nat rlich kann die Position eines Objekts innerhalb des Baums nachtr glich ge ndert werden etwa wenn der Spieler sich in einem Adventure in einen anderen Raum begibt oder Dinge aufhebt und hinlegt Dazu gibt es zwei Anweisungen verschiebe Objekt nach Objekt verschiebt das erste Objekt im Baum so dass es nun die Tochter des zweiten ist Dabei werden alle Kinder des ersten Objekts mit verschoben Nach Verschieben des Spielers auf den Stuhl s he unser Baum so aus Zimmer A gt Stuhl PE E PE O gt Rucksack gt Schl ssel E Beim Verschieben darf keins der Objekte nichts sein Um ein Objekt aus dem Baum herauszunehmen muss ma
169. rben beliebig eingeschr nkt oder erweitert werden auch f r den Spieler selbst Dies geschieht mit der Eigenschaft Verben die in Abschnitt 9 2 erkl rt wird 7 10 Dunkelheit Manche Spiele insbesondere die klassischen haben dunkle R ume in denen man nichts sehen kann solange man keine geeignete Lichtquelle bei sich tr gt 100 7 Das Modell der Spielwelt Das Attribut Lichtquelle oder hell markiert ein Objekt als leuchtend Der Spieler hat genug Licht um sehen zu k nnen wenn eine Lichtquelle in Sichtweite ist x Abgesehen von Sonderf llen wenn der Spieler etwa in einem verschlossenen Beh lter eingesperrt ist ist der momentane Aufenthaltsraum aRaum immer in Sichtweite R ume sind standardm ig hell so dass berall Licht ist wenn nichts anderes angegeben wird Um einen Raum dunkel zu machen muss man ihm das Attribut hell explizit mit nicht abnehmen Raum Tunnel Name Tunnel Ausg nge Westen antworte Tunnelausgang S den antworte Tunneleingang Beschreibung Dies ist ein pechschwarzer Tunnel der hier eine Kurve macht und von S den nach Westen l uft ist nicht hell x hellund Lichtquelle sind Synonyme f r dasselbe Attribut Ob es dunkel ist oder nicht wird in der Variable dunkel beschrieben Diese Variable wird am Ende jedes Zuges automatisch aktualisiert Wenn also etwas passiert wie mache Fackel nicht Lichtquelle entferne Streichholz mache Lampenschirm nicht transparent
170. reFeld Systemfunktion Anhang A 1 Option 4 1 Labels 1 7 lade Systemfunktion Anhang A ladeFeld Systemfunktion Anhang A ladeZug Systemfunktion Anhang A Laufzeitfehler 1 4 Lese Systemfunktion 3 1 Anhang A leseArg Systemfunktion Anhang A leseEintrag Systemfunktion 11 2 Anhang A lib Steueranweisung 4 3 logische Operatoren nicht 16 oder 1 6 und 1 6 lokal 1 3 lokale Bezeichner Anhang A lokale Variablen Anhang A l scheFeld Systemfunktion Anhang A l scheFenster Systemfunktion Anhang A mache Anweisung 2 3 Mehrfachvererbung 2 5 messages 2 7 Mitteilungen 2 7 Mitteilungen an Objekte Anhang A Morgenstern Christian 1 9 Mutter Systemfunktion 2 2 Anhang A num Systemfunktion 1 3 Anhang A 186 o Option 4 1 Objekt Datentyp 2 6 Objektbaum 2 2 Anhang A Objekte 2 1 Objektklassen 2 5 Operatoren Anhang A Operatoren artihmetische 1 4 Operatoren bitweise 1 4 Dekrement 1 4 Inkrement 1 4 Liste Anhang A logische 1 6 Vergleichs 1 6 Vorrang 1 4 Optionen 4 1 Optionen g gro e Spieldatei 41 h Hilfe 41 k kritischer Modus 41 1 Logbuch 41 s Statistik 41 w Warnungen unterdr cken 41 y Liste der globalen Symbole 41 o Objekte listen 41 Speichertabelle 41 Pfad f r einzubindende Dateien 4 1 proto Steueranweisung 4 3 Punktrechnung 1 4 Quelltext 1 1 Anhang A release Steueranweisung 4 3 Release der Spieldatei 4 3 Ro
171. rer Eigenschaft Name benannt die zusammen mit der Eigenschaft Genus an den jeweiligen Fall angepasst ausgegeben wird Der Genus enth lt nicht nur das grammatische Geschlecht sondern auch Informationen etwa ob es sich um einen Eigennamen handelt oder ob immer der bestimmte Artikel benutzt werden soll Beim Untersuchen eines Gegenstands wird die Eigenschaft Beschreibung ausgegeben eventuell gefolgt von einer Inhaltsangabe Wird nichts ausgegeben so erscheint bei schlie baren Objekten Es ist auf zu beischaltbaren Es ist an aus oder einfach Du siehst nichts Besonderes In Listen wie dem Inventar oder in Raumbeschreinungen kann man Objekte mit Zus tzen wie halbvoll versehen oder den Namen des Objekts ndern Dazu kann man die Eigenschaften Vor_Liste undNach_Liste benutzen Ein wahrer R ckgabewert bricht die Ausgabe des Namens hier ab Zum Schluss kann man allgemein g ltige Angaben im Einh nger Zusatzinfo machen Das Inventar wird in zwei Formaten angeboten hoch als Liste und quer als Satz Aufheben von Gegenst nden Alle Objekte die nicht eines der Attribute fest oder Person besitzen oder zu einer der Klassen Raum oder Deko geh ren lassen sich vom Spieler aufheben und mit sich herumtragen Die Befehle hierzu hei en nehmen und ablegen F r eine realistischere Spielwelt stehen die Eigenschaften Gewicht und Volumen zur Verf gung die der Spieler verwenden kann oder nicht Die Maximalwerte sind diejenigen
172. rt hat Folgende Definition Objekt Apfel ist essbar N hrwert 4 Objekt Braten ist essbar N hrwert 20 erzeugt zwei Objekte die einen unterschiedlichen N hrwert haben Eine Eigenschaft wird mit ihrem Namen eventuell gefolgt von einem Wert nach einem Gleichzeichen definiert Bevor sie benutzt werden kann muss sie mit Figenschaft N hrwert 36 2 Objekte und Klassen definiert werden Man kann sich mit der Notation Apfel N hrwert auf den Wert der Eigenschaft beziehen der deutlich verschieden ist von Braten N hrwert Nicht jedes Objekt hat jede Eigenschaft Das Objekt Objekt Mistgabel zum Beispiel kommt ohne Angabe des N hrwerts aus Trotzdem kann die Eigenschaft Mistgabel N hrwert gelesen werden sie hat den Wert null Mit Eigenschaft N hrwert 1 k nnten wir allen Objekten die keinen N hrwert haben oder bei denen in der Definition des N hrwerts kein Wert mit zugewiesen wurde automatisch einen von 1 geben Beim Zuweisen von Eigenschaften die ein Objekt nicht besitzt gibt es jedoch Probleme Mistgabel N hrwert 5 f hrt zu einem Laufzeitfehler Deshalb kann man mit der folgenden Bedingung pr fen ob ein Objekt eine bestimmte Eigenschaft besitzt Objekt hat Eigenschaft Eigenschaften von Objekten k nnen nicht nur Zahlen sein sondern auch Routinen Zeichenketten andere Objekte oder Felder Ein typisches Objekt s he etwa so aus Objekt M hre Name M hre Vok
173. rten Manche Interpreter stellen kursive Schrift unterstrichen und Fettdruck in einer hervorgehobenen Farbe dar Am besten werden Textauszeichnungen sparsam verwendet und Kombinationen von Schriftstilen vermieden Eine Regel die im brigen auch f r gedruckten Text gilt Einige Interpreter k nnen farbigen Text darstellen Dann kann man mit der Funktion Textfarbe VG HG die Vorder und Hintergrundfarbe des Texts ndern Folgende Farben stehen zur Verf gung momentan benutzte Farbe standardm ig benutzte Farbe schwarz dunkelrot gr n gelb oder braun dunkelblau violett t rkis wei oder hellgrau vooa 0V PB wMN Hm 51 3 Systemfunktionen und Besonderheiten Bevor man diese Funktion aufruft sollte man sicherstellen dass der Interpreter ber die M glichkeit die Textfarbe zu ndern verf gt und dass der Spieler die Option farbiger Text nicht ausgeschaltet hat Wenn der Interpreter Farbe darstellen kann wird ein Bit im Header im Kopf der Spieldatei gesetzt und folgende Bedingung ist wahr 0 gt 1 amp 1 0 Die Farbangabe 0 bereitet bei einigen Interpretern z B Zip Probleme deshalb sollte man sie nicht verwenden Farbiger Text ist nicht jedermanns Sache und man sollte dem Spieler die M glichkeit geben ihn abzustellen 3 4 Der Bildschirm Der Bildschirm ist der Darstellungsbereich des Interpreters der meistens nicht der physikalische Bildschirm ist sondern ein Anwendungsfe
174. ruck einfach als die Adresse im Speicher an der die Eigenschaft Computer berechne steht Der Empf nger also der Computer muss die Eigenschaft berechne besitzen Sie k nnte z B so aussehen Objekt Computer berechne x y antworte x y Dann w rde die Mitteilung oben die Routine berechne aufrufen und den Wert 2 Nummer in x ablegen Mitteilungen werden meistens an Eigenschaften vom Datentyp Routine gesendet sie k nnen aber an beliebige Eigenschaften geschickt werden Je nach Datentyp passiert folgendes Eine Routine wird mit den angegebenen Argumenten aufgerufen die Antwort ist der R ckgabewert der Routine Ein Textstring wird ausgegeben die Antwort ist wahr Bei den Datentypen Objekt Klasse oder nichts passiert nichts die Antwort ist die Nummer des Objekts oder der Klasse bzw der Wert der Eigenschaft Die bergabe von Argumenten hat nur bei Routinen eine Bedeutung Argumente k nnen auch an Eigenschaften von anderen Datentypen bergeben werden aber sie werden nicht beachtet Dass verschiedene Datentypen Mitteilungen erhalten k nnen ist f r die Adventure Bibliothek von Vorteil da Eigenschaften nicht immer vom selben Typ sein m ssen Objekt L ufer Beschreibung Der L ufer ist sch n gewebt Objekt Vase Beschreibung Wenn selbst ist kaputt Stop Was fr her eine wertvolle Vase war ist nun ein Haufen Scherben Stop Eine sch ne Ming Vase 44 2 Objekte und Klassen Im Z
175. rum Dateien einbinden Das rekursive Einbinden von Dateien ist legal aber in der Tiefe auf zw lf beschr nkt Hier wurde wahrscheinlich ein Teufelskreis von eingebundenen Dateien gebildet z B wenn eine Datei sich selbst einbindet Die Anzahl der Dateien die nacheinander eingebunden werden k nnen ist unbegrenzt Erreichen der Speichergrenzen Dies kann bei gr eren Projekten passieren wenn der Speicherplatz f r bestimmte tempor re Daten die w hrend des Kompilierens ben tigt werden nicht ausreicht Es wird in der Fehlermeldung meist gesagt welchen Speicherparameter man vergr ern kann um mehr Platz zu sachaffen Manchmal ist auch der verf gbare Speicher erreicht Dann muss man den wert einiger Speicherparameter verringern damit andere Speicherbl cke Platz haben Mit der Option c dem so genannten Trockenlauf kann man sich die Speichereinstellungen anzeigen lassen ohne das Spiel zu kompilieren x Im Trockenlauf wird auch gesagt wieviel Speicher insgesamt zur Verf gung steht Dies ist aber nur ein Anhaltspunkt zur Auslagung der Speicherparameter Zu den erw hnten Bl cken muss ZETA noch Speicher f r seine interne Organisation allokieren Dieser Speicher wird dynamisch verwaltet wieviel ben tigt wird h ngt davon ab wie gro das Spiel ist 68 5 Fehler suchen und beseitigen Wenn alles nichts hilft kann man durch Setzen der Option t einige tempor re Daten wie z B die erzeugten Texte auf Dateien ausla
176. s b ist wahr wenn a kleiner als b ist wahr wenn a gr sser als oder gleich b ist wahr wenn a kleiner als oder gleich b ist wahr wenn o das Attribut a besitzt wahr wenn o die Eigenschaft p definiert hat wahr wenn Objekt a ein Kind von Objekt b ist wahr wenn o eine Instanz der Klasse k ist addiert aund b subtrahiert aund b multipliziert amit b dividiert adurch b ganzzahlig Rest der Ganzzahlendivision von a durch b bitweise Und Verkn pfung von a und b bitweise Oder Verkn pfung von a und b bitweise Exklusiv Oder Verkn pfung von aund b arithmetische Negation von a logische Negation von a alternative Schreibweise von a bitweise Umkehrung von a Einerkomplement Bit Verschiebung in a um b Stellen nach links Bit Verschiebung in a um b Stellen nach rechts Eintrag b aus a als Wort lesen Eintrag b aus a als Byte lesen a lesen dann um eins erh hen 142 Anhang A Spezifikation der Sprache a a lesen dann um eins verringern a a um eins erh hen dann lesen a a um eins verringern dann lesen o p Eigenschaft p von Objekt o o p Anzahl der Eintr ge von p in o Oo amp p Feldadresse der Eigenschaft p von o a i i ten Eintrag des Feldes alesen al Auswerten von a eventuell mit Argumenten Alure Aufruf der Funktion a eventuell mit Argumenten Operatoren mit h herer Pr zedenz binden ihre Operanden st rker so dass a b cals a b c interpretiert wird Die Pr zedenz kann durch die Angabe von run
177. s beim Betreten der Verbindung passiert Genau wie bei den Richtungen von R umen kann die Antwort hier wahr Das Betreten scheitert und es wurde gesagt warum falsch Das Objekt f hrt nirgendwohin oder ein Objekt sein der Raum der durch diese Verbindung betreten wird Das Betreten einer Verbindung scheitert wenn diese geschlossen ist Daher kann man T ren gut als Verbindung implementieren Au erdem k nnen die Richtungen eines Raums anstatt auf einen anderen Raum auch auf eine Verbindung zeigen die dann wiederum mit ihrem Zielraum auf einen anderen Raum 85 7 Das Modell der Spielwelt verweist Raum Besenkammer Name Besenkammer Subst kammer f besenkamnmner f Ausg nge Osten raus antworte Kammert r kein_Weg Der einzige Ausgang ist im Osten Beschreibung Diese Besenkammer hat keine besonderen Merkmale Objekt Kammert r Name dunkle T r Genus f Subst t r f kammert r f Immer wenn selbst ist geschlossen Eine geschlossene T r sonst Eine T r die offen steht f hrt im Osten heraus zielraum Flur ist Verbindung geschlossen schlie bar In diesem Fall wird Ausf gehen Osten umgewandelt in Ausf betreten Kammert r Wenn man Sonderregelungen zum Verlassen der Kammer nach Osten schreiben will sollte man also das Betreten der T r abfangen um beide F lle gehe nach Osten und gehe durch T r zu ber
178. sel zur T r ist dann ein Objekt dessen Eigenschaft Schl ssel_f r die T r enth lt x Schl ssel_f r kann auch eine Liste von Objekten enthalten die mit dem Schl ssel aufgeschlossen werden Ist Schl ssel_f r ein Text so wird das Aufschlie en mit diesem Text abgebrochen der Schl ssel passt auf kein Schloss Es kann auch eine Routine angegeben werden die das aufzuschlie ende Objekt als Argument nimmt Eine wahre Antwort l sst das Aufschlie en zu eine falsche Antwort unterbindet es x Auch Schl ssel die auf kein Objekt im Spiel passen sollten die Eigenschaft Schl ssel_f r definieren da sie ein Objekt als Schl ssel kennzeichnet Dann enth lt diese Eigenschaft den Wert nichts x Ein Objekt das abgeschlossen aber nicht abschlie bar ist kann nicht mit einem Schl ssel aufgeschlossen werden Andere Mechanismen etwa Codekarten oder Fernverriegelungen m ssen dann extra programmiert werden e Aufgabe 8 Zum Testen eines Spiels mit vielen T ren kann ein Generalschl ssel der auf jede T r passt n tzlich sein Erzeuge einen 87 7 Das Modell der Spielwelt 7 3 Beh lter Ablagen und Unterobjekte Die meisten Objekte liegen nicht einfach auf dem Boden herum sondern befinden sich auf anderen Objekten Auf Tischen in Regalen in Schr nken und Kisten Wenn ein Objekt eine Ablage ist kann man andere Objekte darauf ablegen und in Objekte mit dem Attribut Beh lter k nnen andere Objekte hineingelegt werden Ein Objekt ka
179. ses Objekt ausgegeben Die Variable st umm kann gesetzt werden um die Meldung beim Disambiguisieren den roten Fisch oder die Erfolgsmeldung bei einigen implizit aufgerufenen Befehlen zu unterdr cken 165 Anhang B berblick ber die Bibliothek Unterscheiden der Objekte Alle Befehlseintr ge die a0b j2 statt a0b j behandeln haben eine 2 angeh ngt ung ltig2 Priorit t2 usw Dasselbe gilt f r Pseudobefehle herausnehmen2 fragen2 166 L sungen der Aufgaben e1 Man definiert einfach zus tzliche Objekte der Klasse Himmelsrichtung als T chter des Objekts Windrose Um die Richtungen an Land und an Bord zu unterscheiden markieren wir die neuen Richtungen mit dem Attribut an_Bord Attribut an_Bord Himmelsrichtung Steuerbord in Windrose Name Steuerbord Genus n Subst steuerbord n sb n stb ist an_Bord Um die Fehlermeldung etwas anzupassen k nnen wir den Standardtext Du kannst nicht in diese Richtung gehen ndern LibObjekt in Zetalib Texte n gehen wenn n 1 wenn a0bj raus a0bj rein a0Obj hoch a0Obj runter antworte wenn aRaum ist an_Bord amp amp a0bj ist an_Bord stop Hier an Bord verwendet man die Richtungen Steuerbord Backbord voraus und achtern du Landratte wenn aRaum ist an_Bord amp amp a0Obj ist an_Bord stop Hast du wieder am Rum genascht Zu Land gibt s kein_Objekt a0bj Akkusativ benutze die
180. sieht etwas ungew hnlich aus Wozu ist die Null am Anfang und das Addieren von 64 notwendig Dieses Format ist das Format der Eigenschaften von Objekten in der Z Maschine Da Befehle keine Objekte sind weder im Sinne von ZETA noch im Sinne der Z Maschine kann man auf die Eintr ge nicht mit der Notation nicht wie auf Eigenschaften von Objekte zugreifen und ihnen auch keine Mitteilungen senden Mit einem schmutzigen Trick geht dies jedoch Der Trick soll hier verschwiegen werden er wird in der Systemfunktion leseEintrag b e angewandt die den Eintrag e eines Befehlsb zur ckgibt 3 Verben Die Verbliste enth lt alle als Verb definierten Vokabeln sowie die Satzmuster f r jedes Verb Die Definition von Verben wird in Abschnitt 9 2 beschrieben Das erste Wort der Verbliste enth lt die Anzahl der Verben F r jedes Verb wird nun ein Block aus drei W rtern angegeben der die regelm ssige Form die unregelm ssige Form oder null und die Adresse des Satzmusters enth lt Verben die eine regelm ige und eine unregelm ige Form haben werden mit einem Gleichzeichen definiert Verb trete tritt stosse Hier w rde trete im ersten Wort tritt im zweiten abgelegt stosse ist ein neues Verb das aber auf dasselbe Satzmuster verweist Satzmuster sind Ketten von beliebig vielen Satzbausteinen die jeweils einem Befehl zugeordnet werden Jedes Satzmuster beginnt mit einem Wort das den Befehl enth lt oder eine Null um
181. st eine Routine und sollte in der Regel keine Text ausgeben Hier kann man Voraussetzungen f r das neue Spiel festlegen zum Beispiel k nnte man einen Sto Karten mischen oder die Kombination f r einen Safe festlegen init selbst Kombination Zufall 999 109 7 Das Modell der Spielwelt Dies k nnte man nat rlich auch in der Routine Anfang machen aber direkt beim Objekt ist es bersichtlicher Vor den init Routinen der einzelnen Objekte wird init f r alle Lib Objekte ausgef hrt Nachdem der Anfangstext ausgegeben wurde wird das Spielbanner gedruckt Es enth lt den Titel des Spiels wie er in der Konstante Story definiert wurde und den Untertitel das Copyright Es folgt eine Zeile die Seriennummer Release und die verwendete Version der z Lib anzeigt Vor und nach diesen technischen Daten k nnen optional die Lib Texte Untertitel eins und zwei ausgegeben werden Folgende Definition Konstante Story Den Tod im Nacken Konstante Copyright Eine interaktive Hetzjagd C 2004 Isabelle Levasseur LibObjekt in Zetalib Texte lokal n Untertitel wenn n 2 stop p Wer nicht weiter wei sagt HILFE Wer keine Lust mehr hat sagt ENDE gibt also zu Beginn des Spiels folgendes Spielbanner aus Den Tod im Nacken Eine interaktive Hetzjagd C 2004 Isabelle Levasseur Release 1 Seriennr 040628 z Lib 1 0 Wer nicht weiter wei sagt HILFE Wer keine Lust mehr hat sagt ENDE x Mitder R
182. t sonst Lang und stabil 171 L sungen der Aufgaben zielraum antworte aRaum andere_Seite Vorher nehmen mache selbst nicht Verbindung sonst wenn selbst in aRaum amp amp aRaum beerbt Schluchtraum mache selbst Verbindung Meldung hinlegen wenn aRaum beerbt Schluchtraum antworte falsch mache selbst Verbindung stop Du legst die Planke ber die Schlucht so dass sie jetzt beide Seiten miteinander verbindet Die Planke muss vor dem Betreten noch einmal explizit das Attribut Verbindung bekommen weil ein gescheitertes Nehmen vielleicht weil der Spieler bereits die H nde voll hatte die Planke ohne dieses Attribut herumliegen lassen k nnte Das h tte man auch mit einem D monen oder hnlichem machen k nnen aber diese werden erst sp ter behandelt 8 Man k nnte in Vorher das Auf und Abschlie en beim Schl ssel abfangen und die Eigenschaft Schl ssel_f r mit dem jeweiligen Objekt berschreiben Objekt General Name Generalschl ssel Genus m Adj klein silbern Subst schl ssel m generalschl ssel m general m Beschreibung Dieser kleine silberne Schl ssel ist eines der Insignien deiner Macht als Hausmeister Schl ssel_f r nichts Vorher hinlegen stop Niemals aufschlie en2 abschlie en 2 selbst Schl ssel_f r a0bj Wichtig ist hier nicht st op zu verwenden sondern die Routine mit einer falschen Antwort
183. t 1 7 Schleifen Mit Hilfe von Schleifen kann man einen Anweisungsblock mehrmals ausf hren Die einfachste Schleifenanweisung ist solange solange Bedingung Anweisung Hier wird die Bedingung gepr ft Ist sie wahr so wird die Anweisung ausgef hrt Dies wird solange wiederholt bis die Bedingung falsch ist Ist die Bedingung bereits beim ersten Mal falsch so wird der Block nie ausgef hrt a 10 x 0 solange a gt 0 x xXx a a 7y num x In diesem Beispiel werden alle Zahlen von 1 bis 10 summiert wobei allerdings bei 10 angefangen wird zu z hlen Eine weitere Schleife pr ft die Bedingung erst nach dem Durchlaufen des Anweisungsblocks wiederhole Anweisung bis Bedingung Hier wird der Block mindestens einmal durchlaufen auch wenn beim ersten Mal die Bedingung wahr ist Bei Schleifen muss man aufpassen dass die Bedingung man spricht hier von einer Abbruchbedingung irgendwann einmal erf llt ist W rde z B die Anweisung a im 1 Grundlagen Beispiel oben fehlen w re a immer gr er als null und Schleife wiederholte sich ununterbrochen Dies darf nicht passieren und man spricht hier von einer Endlosschleife Zwei elementare Endlosschleifen sind solange wahr wiederhole bis falsch Die Anweisung Schleife ist eine Abk rzung f r solange Schleifen die besonders oft ben tigt werden Initialisierung solange Bedingung Aktualisierung kann abgek rzt werden zu Sc
184. t Ebenso ist alles was auf beliebig vielen Zeilen zwischen der Anfangsmarke und der Endmarke steht ein Kommentar 137 Anhang A Spezifikation der Sprache Bezeichner Bezeichner k nnen bis zu 32 Zeichen lang sein und lateinische Buchstaben Ziffern und den Unterstrich enthalten Gro und Kleinschreibung wird nicht unterschieden Bezeichner k nnen die deutschen Umlaute und das scharfe s enthalten diese werde jedoch als quivalent zu ae oe ue und ss betrachtet Das erste Zeichen eines Bezeichners darf keine Ziffer sein Bezeichner k nnen lokal oder global sein Die meisten Bezeichner etwa f r Routinen Eigenschaften oder Objekte sind global Alle globalen Bezeichner m ssen voneinander verschieden sein Dazu z hlen die Bezeichner der Systemfunktionen und die Schl sselw rter von ZETA Alles was innerhalb von Routinen oder Anweisungsbl cken mit geschweiften Klammern definiert wird ist lokal Alle lokalen Bezeichner m ssen voneinander verschieden sein Lokale und globale Bezeichner d rfen dieselben Namen haben Im G ltigkeitsbereich der lokalen Bezeichner sind dann die entsprechenden globalen Bezeichner nicht zug nglich Datentypen Zahlen Zahlen sind Folgen von Ziffern Normalerweise werden Zahlen als ganze Dezimalzahlen betrachtet die Zahlen in ZETA k nnen keine Br che oder Nachkommastellen haben Zahlen in ZETA k nnen Werte von 32768 bis 32767 annehmen Zahlen k nnen in hexadezimaler Form angegeben werden
185. t an Die erzeugte Spieldatei hei t ganymed z5 Die vollst ndige Syntax f r das Erzeugen von Spieldateien mit ZETA ist zeta Optionen Quelltext zet Spieldatei z5 Die Angaben in geschweiften Klammern sind optional 4 1 Optionen beim Aufruf des Compilers Es gibt verschiedene M glichkeiten das Verhalten des Compilers ZETA zu beeinflussen Die gebr uchlichste ist ZETA mit einigen Optionen zu starten Zum Beispiel schreibt zeta s smaug eine kurze Statistik der erzeugten Spieldatei wenn sie erfolgreich erstellt wurde Viele Optionen dienen nur dazu die Ausgabe w hrend des Kompilierens zu steuern 1 legt ein Logbuch des Compiler Outputs an Alles was auf dem Bildschirm ausgegeben wird wird zus tzlich in der Datei smaug Log mitprotokolliert Das ist n tzlich um Fehlermeldungen nachlesen zu k nnen z gibt eine Speichertabelle der erzeugten Datei aus die n tzlich sein kann wenn man an die Grenzen der erlaubten Gr en st t sonst wohl aber eher akademisch ist Wer es gerne sehr ausf hrlich mag kann sich mit y eine Liste aller Symbole das hei t aller globalen Bezeichner im Quelltext ausgeben lassen Mit w wird die Ausgabe von Warnungen unterdr ckt und 0 listet die Objekte auf wenn sie kompiliert werden Die Option h schlie lich gibt eine Liste der m glichen Optionen aus ohne ein Spiel zu generieren 57 4 Der Compiler und seine Optionen Andere Optionen haben gr eren Einfluss au
186. t um welchen Typ von Feld es sich handelt Es nimmt immer an dass es ein Word Feld ist es sei denn das Feld hat einen Feldbezeichner dem ZETA klar einen String zuordnen kann Bei lokalen Variablen die Felder beschreiben kann man einen Typ String oder Feld mitgeben so dass ZETA wei auf welche Art auf dieses Feld zugegriffen werden soll Die Routine zum Ausgeben von Textstrings s he also so aus Routine schreibeText String a lokal i 73 5 Fehler suchen und beseitigen solange ali char ali t t Mit den Operatoren gt und gt greift man auf Felder zu als ob sie Strings oder Word Felder w ren ungeachtet dessen welchen Typ sie tats chlich haben Auch hier muss man wieder auf die Dimensionen des Felds aufpassen Feld w 16 String 32 Diese Felder belegen beide 32 Bytes Je nachdem mit welchem Operator man diese Felder liest haben sie Eintr ge von gt 0 bis gt 31 oder gt 0 bis gt 15 Man kann auch Mischfelder erzeugen indem man mit verschiedenen Operatoren auf sie zugreift Die Z Maschine macht dies z B beim Aufteilen von Eingabezeilen in W rter Diese Methode ist aber sehr un bersichtlich und wird besser vermieden Besser ist es mehere Felder zu definieren so dass gleiche Indizes immer auch zusammengeh rige Daten referenzieren Felder k nnen wie oben gesehen an Routinen bergeben werden W hrend Variablen nach Wert bergeben werden call by value werden Datenstrukturen wie F
187. t wird der Befehl in fahre mit dem Fahrzeug in diese Richtung umgewandelt Ein Reittier w rde auch als Fahrzeug definiert Fahrzeuge k nnen von einem Raum in einen anderen verschoben werden Dann wird der Befehl schieben ausgef hrt der wie fahren generell alles das erlaubt was der Spieler auch zu Fu darf Ausnahmen m ssen vom Autor ber cksichtigt werden Ein Fahrzeug muss nicht unbedingt betretbar sein 160 Anhang B berblick ber die Bibliothek Schaltbare Objekte Objekte die das Attribut schaltbar besitzen k nnen ein und ausgeschaltet werden Wenn sie eingeschaltet sind besitzen sie das Attribut eingeschaltet Die Befehle dazu lauten einschalten und ausschalten Was mit den eingeschalteten Objekten passiert muss der Autor selbst definieren Kleidung Objekte die der Spieler anziehen kann werden mit dem Attribut Kleidung versehen Wenn der Spieler ein Kleidungsst ck angezogen hat bekommt es das Attribut angezogen Die passenden Befehle lauten anziehen und ausziehen Gespr chsthemen und Stichpunkte Mit den Befehlen fragen und erz hlen kann man Personen ber bestimmte Themen befragen mit nachschlagen kann man Stichpunkte in Notizb chern oder Lexika nachsehen Das Thema ist dabei ein beliebiges Objekt das nicht unbedingt in Sicht sein muss Es kann jedes Thema sein obwohl Objekte die das Attribut Stichpunkt besitzen bevorzugt werden Objekte mit dem Attribut bekannt werden unter den Stichpunkten bevorzu
188. t Speicher einsparen und wird meist nur benutzt wenn die Gr e der Spieldatei an ihre Grenzen st t Vielleicht ist es aber auch keine schlechte Idee ein Spiel vor seiner Ver ffentlichung zu komprimieren x Text wird im Z Code in so genannten Z Zeichen gespeichert so dass Dreiergruppen jeweils zwei Bytes belegen Das Leerzeichen sowie die Kleinbuchstaben ohne Umlaute belegen je ein Z Zeichen Gro buchstaben der Zeilenumbruch die Ziffern und die meisten Interpunktionen belegen je zwei Z Zeichen und alle anderen Zeichen darunter auch die deutschen Umlaute und das Eszett ben tigen vier Z Zeichen Der Platzhalter f r eine Abk rzung belegt zwei Z Zeichen Abk rzungen wie er oder D k rzen also nichts ab und werden vom Compiler mit einer Warnung ignoriert Die Abk rzung hingegen spart zwei Zeichen pro Ersetzung Gute Beispiele f r Abk rzungen sind kurze oft auftretende Fragmente wie Endungen und Vorsilben en ver Konjunktionen Artikel und Pr positionen und Der Kombinationen von Konsonanten und Umlauten schw Be und Leer und Satzzeichen sowie Kombinationen daraus dass Der Bibliothek liegt eine Liste guter Abk rzungen bei Die Effizienz der gew hlten Abk rzungen wird ausgegeben wenn man zus tzlich zur Option a die Statistik Option s benutzt Schlie lich gibt es noch zwei Steueranweisungen mit denen man die Seriennummer der Spieldatei
189. t aus springt aus der Routine und gibt den Wert wahr zur ck Damit ist in diesem Fall das Standardverhalten berschrieben worden Man kann nat rlich auch Text ausgeben und die Aktion weiterlaufen lassen Vorher lesen Eigenartig Nun erf hrt der Spieler beim Lesen Eigenartig Auf dem Flugblatt steht nichts x Die Syntax f r die Befehle in Vorher und in einigen anderen Eigenschaften wie wir sehen werden ist die die Bereichsangabe in jenach Es ist in der Tat ein implizites jenach bei dem aus der Bibliothek ein Wert vorgegeben wird hier der momentane Befehl 81 6 3 Aktionen und Befehle 6 4 Erweiterungen der Bibliothek 6 Einf hrung in die Bibliothek 82 7 Das Modell der Spielwelt F r viele h ufig vorkommende Begebenheiten in Textadventures hat die Bibliothek bereits vorgefertigte Attribute Eigenschaften und Befehle Dieses Kapitel stellt diese Konzepte der Spielwelt vor 7 1 R ume und Richtungen R ume sind die Grundelemente der Spielwelt In und zwischen ihnen kann sich der Spieler in der so genannten Spiellandschaft bewegen Alles was sich nicht in einem der R ume befindet ist dem Spieler nicht zug nglich Das Konzept der R ume dient also nicht nur dazu die Spielwelt zu definieren es schr nkt sie also auch ein R ume sind Objekte der Klasse Raum die miteinander verbunden sein k nnen R ume haben kein Mutterobjekt jeder Raum ist die Wurzel eines Objektbaums Hier ist ein solc
190. t oder eine Datei nicht ge ffnet werden kann Fehler sind weniger gravierend und ZETA f hrt mit der Analyse des Quelltexts fort Es wird aber keine Spieldatei erzeugt da der Code korrupt w re Wenn zu viele Fehler auftreten bricht ZETA seine Arbeit mit einem fatalen Fehler ab Eine Warnung zeigt dem Autor lediglich Ungereimtheiten im Quelltext an die aber formal richtig und vielleicht sogar beabsichtigt sind Die Spieldatei wird trotzdem generiert Mit der Option w kann man Warnungen unterdr cken Man sollte sie vor der Ver ffentlichung eines Spiels aber trotzdem einmal beachten Fehler die beim Kompilieren auftreten sind meistens syntaktische Fehler im Quelltext Grob eingeteilt gibt es folgende Gruppen von Fehlern 67 5 Fehler suchen und beseitigen Ein und Ausgabefehler Diese Fehler oft O Fehler von engl Input Output genannt treten auf wenn ZETA nicht auf eine Datei zugreifen kann Die Datei nihil zet kann nicht ge ffnet werden Hier ist sehr wahrscheinlich der Dateiname in einer datei Anweisung falsch geschrieben Auf manchen Systemen wird eine Datei auch blockiert wenn sie momentan benutzt wird Auf die Spieldatei kann z B nicht geschrieben werden wenn sie gerade in einem Interpreter zum Testen ge ffnet ist Ein weiterer O Fehler betrifft eingebundene Dateien Die maximale Verschachtelungstiefe 12 ist erreicht Das bedeutet dass mehr als zw lf Dateien eingebunden wurden die ihrerseits wiede
191. t oder nicht Attribute werden in der Objektdefinition mit ist vergeben Objekt Apfel ist essbar Attribute die nicht angegeben wurden besitzt ein Objekt zu Beginn des Spiels auch nicht Es k nnen mehrere Attribute angegeben werden die mit Kommas getrennt sind Mit einem vorangestellten nicht oder kann ein Attribut als nicht gesetzt definiert werden Dies kann bei der Definition von Klassen n tig sein um bereits vergebene Attribute wieder zu l schen hat aber bei normalen Objekten keine Wirkung Objekt Truhe ist verschlie bar zum ffnen nicht offen 35 2 Objekte und Klassen Sp ter kann man die Attribute eines Objekts mit mache ndern mache Stahlt r offen mache Stahlt r nicht offen machen die Stahlt r auf und zu Auch hier k nnen wieder mehrere Attribute verneint oder nicht und durch Kommas getrennt angegeben werden mache Apfel essbar verfault vergiftet Um zu pr fen ob ein Objekt ein Attribut hat gibt es die Bedingung Objekt ist Attribut So kann man mit Apfel ist essbar die Tauglichkeit des Apfels zum Verzehr testen Eine Alternative hierzu w re die Verneinung Apfel istnicht essbar 2 4 Eigenschaften von Objekten Au er den Attributen besitzen Objekte so genannte Eigenschaften die komplexer sind als das blo e Vorhandensein von Attributen Eine Eigenschaft ist eine Variable die f r alle Objekte bei denen sie definiert ist denselben Namen aber nicht unbedingt denselben We
192. t wei ob zum Schluss ein Komma steht oder nicht Man kann zwar folgendes pr fen Liste Anzahl Unterliste Startwert Unterliste Anzahl um zu sehen ob die Gruppe das letzte Element der Hauptliste ist aber selbst dann wei man nicht ob auf den Namen der Liste im Satz ein Satzzeichen etwa ein weiteres Komma oder gar ein Punkt folgt oder ob der Satz einfach weitergeht also ein Abschlusskomma in der Untergruppe gesetzt werden muss Deshalb ist es sicherer Klammern zu verwenden auch wenn Kommas oder Gedankenstriche sch ner w ren 8 3 Mehrere gleiche Objekte Gleiche Objekte die der Spieler einzeln handhaben kann k nnen in Listen zu einem Plural Objekt zusammengefasst werden Alle Objekte deren Eigenschaft Plural auf dasselbe Objekt verweisen werden in Listen durch dieses Objekt beschrieben Idealerweise benutzt man f r die gleichen Objekte eine Klasse und stellt dem Plural eine Zahlenangabe voran Klasse Murmel Name bunt e Murmel Genus f Plural Murmeln Objekt Murmeln Name Murmeln Genus p Zahlenangabe x Nat rlich m ssen die Objekte auch in der Merhzahl ansprechbar sein damit der Spieler etwas wie lege drei Murmeln hin eingeben kann Das wird in nicht gefunden beschrieben x Wenn Untergruppen von Pluralobjekten angelegt werden sollen muss die Eigenschaft Listengruppe bei den einzelnen Objekten und beim Pluralobjekt gesetzt werden 123 8 Beschreibungen x Be
193. t werden Variable Argumente 144 Anhang A Spezifikation der Sprache Die Argumente sind wieder optional Wenn die Variable auf eine Routine verweist wird diese mit den Argumenten aufgerufen das Ergenbis der Auswertung ist der R ckgabewert der Routine Wenn die Variable einen Text enth lt so wird dieser ausgegeben das Ergebnis ist wahr Ansonsten passiert nichts das Ergebnis ist der Wert der Variablen R ckgabe von Werten Eine Routine kann einen Wert an die aufrufende Funktion zur ckgeben die Syntax dazu ist antworte Ausdruck Die Routine wird sofort verlassen der Wert des Ausdrucks wird an die aufrufende Routine zur ckgegeben Fehlt der Ausdruck so wird falsch zur ckgegeben Die Anweisung Stop gibt den Wert wahr zur ck Stop kann auch in der Form Stop Ausdr cke angegeben werden dann werden erst die Ausdr cke ausgewertet meist Texte bevor die Routine mit dem Wert wahr verlassen wird Eine Routine die keine der Anweisungen Stop oder antworte enth lt gibt bei nach dem Ausf hren aller Anweisungen falsch oder null zur ck Bedingungen Manche Anweisungen werden nur unter bestimmten Bedingungen ausgef hrt Die allgemeine Form einer bedingten Anweisung ist wenn Bedingung Anweisung sonst Anweisung Anstelle der Anweisung kann eine einzelne Anweisung die mit einem Semikolon abgeschlossen wird oder eine Reihe beliebig vieler Anweisungen die mit und gruppiert werden stehen Eine Bedingung ist
194. tatur hat kann beruhigt anstelle von a schreiben Auch die meisten Zeichen mit Akzenten lassen sich mit der deutschen Tastatur erzeugen Es gibt auch einige Zeichen die sich nur darstellen lassen wenn man sie mit einem vorangestellten Backslash sch tzt da sie eine Bedeutung innerhalb von Texten haben A Backslash yT Anf hrungszeichen Alternative zu geschweifte Klammer auf geschweifte Klammer zu Backslash und Leerzeichen gesch tztes Leerzeichen Das gesch tzte Leerzeichen verhindert dass vor und nach einem Zeilenumbruch im Quelltext alle Leerzeichen bis zum ersten Zeichen das kein Leerzeichen ist ignoriert werden Wenn man Tabellen oder einfache Skizzen drucken m chte ist das oft unerw nscht und man kann 26 1 Grundlagen den Anfang oder das Ende einer Zeile mit markieren x So genannte Kurzstrings erlauben es ver nderliche Zeichenfolgen innerhalb von Texten auszugeben Man kann mit der Direktive Kurzstring Bezeichner Text Strings definieren die als Platzhalter fungieren Sie k nnen sp ter zwischen geschweiften Klammern in Texten angegeben werden Der definierte String wird dann dort bei der Ausgabe des Texts eingesetzt Das ist n tzlich um h ufig auftauchende Strings abzuk rzen oder sie flexibel zu halten Wenn z B der Spieler einen Begleiter hat der jenachdem ob er selbst ein Mann oder eine Frau ist Iwan oder Natascha hei t Dann kann man folgendes definieren
195. teht die M glichkeit den Inhalt von Feldern auf Dateien zu schreiben oder sie von Dateien zu laden Die Funktion e speicherefeld f n Dateiname schreibt n Bytes des Feldes f auf die Datei mit den Namen Dateiname e ist falsch wenn es Probleme beim Abspeichern gab Mit der Funktion e ladeFeld f n Dateiname werden von der Datei Dateiname n Bytes gelesen und auf das Feld geschrieben e ist die Anzahl der erfolgreich gelesenen Bytes Wenn e kleiner als n ist gab es Probleme beim Einlesen Die Dateil nge n wird immer in Bytes angegeben Normalerweise haben Feldeintr ge in ZETA die eine L nge von zwei Bytes so dass hier zweimal die L nge des Feldes angegeben 54 3 Systemfunktionen und Besonderheiten werden muss wenn das Feld kein String ist Der Dateiname ist ein Feld vom Typ String das den Namen unter dem die Daten gespeichert werden sollen enth lt Der Dateiname muss sich an das 8 3 Format halten Das hei t er darf h chstens acht Zeichen lang sein evetuell gefolgt von einem Punkt und einer Dateinamenerweiterung von maximal drei Zeichen Wird keine Erweiterung angegeben so ist die Erweiterung aux 55 Teil Il Arbeiten mit dem Compiler 4 Der Compiler und seine Optionen Der einfachste Weg um eine Spieldatei zu erzeugen ist der Aufruf von ZETA mit dem Namen des Quelltexts als einzigem Parameter zeta ganymed Wenn keine Dateiendung f r den Quelltext angegeben wird h ngt ZETA automatisch ze
196. ten beziehen sich meist auf das was man sieht und untersuche eines der meistbenutzten Verben in Textadventures ist ein Synonym f r schaue an Wenn ein Objekt untersucht wird dann wird seine Beschreibung ausgegeben Die Beschreibung ist in der Regel ein Text kann aber auch eine Routine sein Bei einem Beh lter oder einer Ablage wird zus tzlich der Inhalt gezeigt Wenn ein Objekt keine Beschreibung und keinen Inhalt hat so h ngt die Ausgabe von den Attributen des Objekts ab Es wird gesagt dass das Objekt offen geschlossen ein oder ausgeschaltet ist Ist bislang immer noch nichts ausgegeben worden so sieht der Spieler nichts Besonderes an diesem Objekt Das Untersuchen von Objekten schl gt fehl wenn es dunkel ist es sei denn ein anderes Verhalten wird in Vorher implementiert Wenn das Objekt der Aufenthaltsraum des Spielers ist wird die Raumbeschreibung mit Lage ausgegeben Die Beschreibungen von R umen werden in nicht gefunden n her erkl rt Aber auch die anderen Sinne sind mit den Verben riechen zuh ren schmecken und f hlen vertreten Jedes dieser Verben verlangt ein Objekt dabei wird vereinfachend angenommen dass Dinge die man schmecken und f hlen Kann erreichbar sein m ssen und 102 7 Das Modell der Spielwelt Dinge die man riechen und h ren kann in Sichtweite sind Auch hier werden die Sinne wieder auf die Sicht zur ckgef hrt Man kann die Regeln aber ndern siehe Abschnitt 9 6
197. tig Bei Objekten sieht dies etwas anders aus Wenn ZETA einen Bezeichner findet den es nicht kennt so vermutet es dass es ein Objekt ist wenn der Bezeichner a nach dem Schl sselwort in in einer Bedingung oder Objektdefinition steht b vor einem der Operatoren amp oder c ein allein stehender Bezeichner in einem Funktionsaufruf ist oder d als Wert in einem Feld oder einer Objekteigenschaft angegeben wurde Diese Vorgehensweise erlaubt einige Flexibilit t Kann aber auch zu falschen Fehlermeldungen f hren Wenn das bem ngelte Objekt nirgends im Quelltext auftauchen soll handelt es sich wahrscheinlich um einen Tippfehler im Zusammenhang mit einer der oben genannten Annahmen der schnell behoben sein d rfte 5 2 Logische Fehler im Programm Wesentlich schwieriger zu beheben sind so genannte logische Fehler bei denen legaler ZETA Code nicht das macht was er soll und den Interpreter in schwerwiegenden F llen sogar zum Absturz bringen kann ZETA hat keinen strikten Kompiliermodus der Laufzeitfehler abf ngt und eine geeignete Fehlermeldung ausgibt daher ist beim Programmieren einige Sorgfalt n tig um sp ter schwer zu analysierende Fehler zu vermeiden Nachfolgend werden einige Stolpersteine beim Programmieren mit ZETA aufgef hrt 71 5 Fehler suchen und beseitigen Routinen Ein h ufig gemachter Fehler bei Routinen die keine Argumente haben ist dass man die leeren Klammern wegl sst ZETA wei aber nur dass
198. tkanale n rnnt n T E ARA T A A 50 3 3 Schritt und Barbe seen na a 50 3 4 Der Bildschirm Sun ae ne eng dee and 52 3 5 Laden und Speichern tisaini e Rabe 53 Teil II Arbeiten mit dem Compiler seoesssooesssseoecessscooecssooecessssoceessoocecesssoceesssosesesssosesse 56 4 Der Compiler und seine Optionen sesesssoocecessscocesssocoecesosocecessoceeessococesssooeesssosecssssoosese 57 4 1 Optionen beim Aufruf des Compilers _ 22000222000ssssesssnnnssnnnnnsnnnnnsnnn nennen 57 4 2 Steuerdateien saroe aare A a E OEE E A E ETETE raae 59 4 3 Steueranweisungen im Quelltext m ses ask 60 ZETA Benutzerhandbuch Inhaltsverzeichnis 5 Fehler suchen und beseitigen sooessssooecssoocecesesccesssocoecssssccecessooecessocccsessoseesssosesssssosesee 67 5 1 Hehler beim Kompilieren ainiaan iiine a R E ae 67 5 2 Logische Fehler im Programm aan ke dern 71 Teil IH Die Adventure BibliotheK sesseessoessoossossossscsossoossosssossoossoossosssossoossoossoessossoossoo 76 6 Einf hrung in die Bibliothek usa anne 77 6 1 Aller Anfani ire i E A EE E A A AE 77 6 2 Interaktion mit Objekten unsere lenken 78 6 3 Aktionen und Befehle naar ke AEE aa 82 6 4 Erweiterungen der Bibliothek na 82 7 Das Modell der Spielwelt a ie ae nike 83 Tl Raumer ndRichtungen ana u een 83 12 T ren und Verbindungen yusa hsenn dchessheinesnhnstarhreriet 85 71 3 Beh lter Ablagen und Unterobjekte 4 ses a 88 7 4 Begehbare Objekte Sitze und Fahrzeu
199. ts 80 6 Einf hrung in die Bibliothek Objekt gt gt Flugblatt Name Flugblatt Genus n Adj farkig Subst flugblatt n blatt n zettel m papier n Beschreibung Ein farbiges Blatt Papier Auf einer Seite steht etwas Vorher lesen stop In gro en Lettern steht auf dem Zettel willkommen im Gro en Unterweltreich Darunter steht noch mehr aber es ist viel und klein gedruckt du hast keine Lust diese Bleiw ste durchzulesen Es sind zwei Eigenschaften hinzugekommen Die Beschreibung ist bei Objekten der Text der ausgegeben wird wenn der Spieler untersuche den Zettel eingibt Dies k nnte in einer Routine geschehen hier begn gen wir uns mit einem einfachen Text Interessanter ist die Eigenschaft Vorher Hier k nnen Aktionen abgefangen werden Das normale Verhalten der Bibliothek bei lies Objekt ist einfach Auf dem Objekt steht nichts zu sagen Das gilt gewiss f r die meisten Objekte f r ein Flugblatt ist es eher unangebracht Bevor dieses Standardverhalten zum Zuge kommt gibt die Bilbiothek dem Objekt die Chance ein eigenes Verhalten zu definieren Es fragt dazu die Eigenschaft Vorher des betreffenden Objekts ab die eine Routine ist Hier kann zu jedem Befehl etwas programmiert werden Wenn diese Routine einen wahren Wert zur ckgibt so wird die Aktion des Spielers abgebrochen Hier wird nur das Lesen abgefangen Die Anweisung st op gibt den nachfolgenden Tex
200. unter stop Besser nicht Nordwesten antworte Bei_einer_Ruine nichts stop Dort ist der Dschungel zu dicht Ein breiter Pfad f hrt nach Norden ein schmalerer entlang der Klippe nach Nordwesten x Nat rlich k nnte man auch anstatt nichts hier sonst verwenden Wenn es aber eine Raumklasse gibt die in Ausg nge eigene Regeln definiert w rden diese mit sonst vorzeiteig abgefangen daher verwendet man hier besser nichts x Die verwendeten Richtungen sind nicht endg ltig Jeder Autor kann eigene Richtungen als Objekte in der Windrose definieren Diese k nnen sich auf bereits vorhandene Eigenschaften oder auf vom Autor neu definierte beziehen x Dem Spieler stehen immer nur die Richtungsobjekte zur Verf gung die sich im Moment in der Windrose befinden Normalerweise ndert sich der Satz der g ltigen Richtungen nicht man kann aber Richtungen erlauben oder verbieten indem man die dazugeh rigen Objekte in die Windrose hinein oder aus ihr heraus verschiebt x Die Definitionen der acht Himmelsrichtungen und der dazugeh rigen Eigenschaften werden ignoriert wenn man vor dem Einbinden der Bibliothek die Konstante keine_Himmelsrichtungen definiert e Aufgabe 1 Definiere f r ein Abenteuer zu Lande und zur See die zus tzlichen Richtungen Backbord Steuerbord bugw rts und achtern Verbindungen zwischen R umen sind Einbahnstra en Nur weil es von einem Raum in eine bestimmte Richtung in einen andere geht hei t das n
201. urch Kommas getrennt werden Routine Farbe 1 Grundlagen lokal rot gr n lokal blau num rot num gr n num blau Diese Routine besitzt drei Variablen rot gr n und blau Alle drei haben zu Beginn den Wert null Man kann lokalen genau wie globalen Variablen einen Anfangswert geben Mehrere 1okal Anweisungen k nnen aufeinander folgen es m ssen nur die ersten Anweisungen in jeder Routine sein Routine Lokal 12 9 2 2 Ze 2 lokal Stadt Granada Lokale Variablen gelten nur innerhalb der Routine in der sie definiert wurden Folgendes Beispiel erzeugt einen Fehler Routine Unbekannt num a Hauptprogramm lokal a Unbekannt Die Variable a ist innerhalb von Unbekannt nicht bekannt Lokale Variablen k nnen Bezeichner haben die bereits vergeben wurden z B an eine globale Variable Dann bezieht sich der Bezeichner immer auf die lokale Variable auf die globale Variable kann in dieser Routine nicht zugegriffen werden Variable a 96 Routine Zweideutig lokal a 15 num a An Hauptprogramm Zweideutig num a Dieses Programm gibt 15 und 96 aus Die Zeichenkombination n in der letzten Zeile von Zweideutig bedeutet Schreibe einen Zeilenumbruch Der Wert der globalen Variable a 1 Grundlagen wird durch die Zuweisung in Zweideutig nicht beeintr chtigt Schlie lich gibt es noch die M glichkeit selbst Konstanten zu definieren Dazu benut
202. ursorY Systemfunktion Anhang A datei Steueranweisung 4 3 Datentyp Systemfunktion 2 6 Anhang A Datentypen 2 6 Dekrement 1 4 Division durch null 1 4 Eigenschaft Direktive 2 4 Eigenschaften 2 4 Anhang A Einbinden von Dateien 4 3 184 Eingabe von Text 3 1 Eingabekanal Systemfunktion Anhang A ende Steueranweisung 4 3 Endlosschleifen 1 7 entferne Anweisung 2 2 ersetze Steueranweisung 4 3 erweiternde Vererbung 2 5 erzeuge Systemfunktion 2 8 Anhang A Erzeugen von Objekten 2 8 Fallunterscheidung 1 6 Feld Direktive 1 8 Felder Anhang A Felder als Eigenschaften 2 4 Felder Definition 1 8 String 1 8 Funktionsaufrufe Anhang A g Option 4 1 geschweifte Klammern 1 2 globale Bezeichner Anhang A globale Variablen Anhang A Grammatikdefinitionen Anhang A Grundrechenarten 1 4 h Option 4 1 Hallo Welt 1 2 hat Bedingung 2 4 Hauptprogramm 1 2 Hexadezimalzahlen 1 3 Hochkommas 1 3 IDs identifiers 1 3 implizites jenach 10 2 in Bedingung 2 2 in bei der Objektdefinition 2 2 Inkrement 1 4 ist bei der Objektdefinition 2 3 jenach Anweisung 1 6 Index 185 Index k Option 4 1 Kinder Systemfunktion 2 2 Anhang A Klasse Datentyp 2 6 Klasse Direktive 2 5 Klassen Anhang A Klassen von Klassen 2 5 Klassen von Objekten 2 5 Kommentar 1 2 Kommentare Anhang A Kommunikation zwischen Objekten 2 7 Konstante Direktive 1 3 Konstanten 1 3 Anhang A kopie
203. usammenhang mit der Kommunikation zwischen Objekten sind zwei Variablen von Bedeutung selbst und Sender Wie schon bei den Klassen kurz beschrieben enth lt selbst das Objekt an das die Mitteilung geschickt wird Der Sender ist das Objekt das die Mitteilung gesendet hat Sender Kann null sein wenn die Mitteilung aus einer Routine die nicht zu einem Objekt geh rt z B dem Hauptprogramm abgeschickt wurde Wenn die Eigenschaft die die Mitteilung erh lt mehrere Eintr ge enth lt so werden diese der Reihe nach abgearbeitet solange der R ckgabewert null oder falsch ist Dies ist vor allem bei addtitiven Routinen die geerbt werden von Bedeutung Wenn die Routine der Instanz nicht eingreift also falsch zur ckgibt so wird die von der Klasse geerbte Routine aufgerufen wenn es sie gibt Die Antwort der Mitteilung ist immer die Antwort des zuletzt abgearbeiteten Eintrags Auch Klassen k nnen Mitteilungen erhalten Dies geht aber nur wenn sie von einer ihrer Instanzen gesendet werden Wenn selbst beim Senden der Mitteilung keine Instanz der Klasse an die die Mitteilung gesendet wird ist passiert nichts Wenn eine Klasse eine Mitteilung erh lt behalten die Variablen selbst und Sender ihre Werte so dass in einer Routine die zur Klasse geh rt selbst immer noch die Instanz und nicht die Klasse bedeutet Mitteilungen an Klassen werden h ufig verwendet wenn eine nicht additive Routine f r eine Instanz nur leicht von der geerbt
204. usgegebenen Zeichen beschr nkt Der ZSCIH Zeichensatz hat Raum f r 97 so genannte erweiterte Zeichen Normalerweise sind dies die lateinischen Buchstaben mit Akzenten sowie einige Sonderzeichen etwa das Eszett das Pfund Zeichen oder spitze Anf hrungszeichen Diese Zeichen sind vorbelegt und nehmen 69 Pl tze weg Die restlichen 28 Zeichen werden automatisch aufgef llt wenn sie ben tigt werden Wenn der Platz aufgebraucht ist gibt es eine Fehlermeldung Der erweiterte Zeichensatz kann optimiert werden mehr dazu in Abschnitt 4 3 Au erdem gibt es die Systemfunktion Unicode mit der man ein beliebiges Unicode Zeichen ausgeben kann Das macht 12 50 Unicode 20ac Euro t Der Text wird geschrieben wenn das Unicode Zeichen nicht ausgeben werden kann weil der Interpreter nicht dem Z Code Standard 1 0 entspricht oder weil dieses Zeichen nicht implementiert ist zum Beispiel bei einem Konsoleninterpreter Diese zweite Angabe kann auch ein Zeichen in Hochkommas sein etwa E Fehlt diese Angabe wird nichts geschrieben wenn der Unicode nicht verf gbar ist Die Benutzung dieser Funktion ist nicht beschr nkt es k nnen beliebig viele verschiedene Zeichen mit Unicode ausgegeben werden Zusammen mit der Kontrolle dar ber ob das Zeichen existiert oder nicht ist dies ein Vorteil f r l ngere Texte die in Russisch oder Griechisch oder in Tolkien schem Elbisch ausgegeben werden sollen Zeichen die mit Unicode ausgegebe
205. utine Datentyp 2 6 Routine Direktive 1 2 Routinen 1 2 Routinen Argumente 1 5 Aufrufen 1 2 1 5 Bezeichner 1 3 R ckgabewert 1 5 Index 187 Index R ckgabewerte 1 5 Anhang A s Option 4 1 Schleife Anweisung 1 7 Schleifen 1 7 Anhang A schmutzige Tricks implizites jenach 10 2 leseEintrag 11 2 schreibeArg Systemfunktion Anhang A Schreibweise von Zahlen 1 3 Schriftstil Systemfunktion Anhang A Schwester Systemfunktion 2 2 Anhang A selbst Systemvariable 2 7 Semikolon 1 2 Sender Systemvariable 2 7 seriennr Steueranweisung 4 3 Seriennummer der Spieldatei 4 3 solange Anweisung 1 7 Sonderzeichen 1 9 sonst Anweisung 1 6 sonst Bereich f r jenach 1 6 sonst Steueranweisung 4 3 Speicher f r den Compiler 4 1 speichere Systemfunktion Anhang A speichereFeld Systemfunktion Anhang A speichereZug Systemfunktion Anhang A Spieldatei 1 1 Splitte Systemfunktion 3 1 Anhang A springe 1 7 Sprungmarken 1 7 Statusfenster Systemfunktion Anhang A Steueranweisungen Anhang A stop Anweisung 1 5 1 9 Strichpunkt 1 2 Strichrechnung 1 4 String Direktive 1 8 Systemfunktionen 1 5 Systemfunktionen aktivesFenster Anhang A Argumente Anhang A Ausgabekanal Anhang A bsBreite Anhang A bsH he Anhang A 188 Char Anhang A CursorPos Anhang A CursorX Anhang A CursorY Anhang A Datentyp Anhang A Eingabekanal Anhang A erzeuge 2 8 Anhang A Kind 22 Kinder 2 2 Anh
206. utine ge ndert werden Es gibt aber eine M glichkeit ihnen Anfangswerte zu geben die von null verschieden sind Dazu muss man die lokalen Variablen in runden Klammern nach dem Bezeichner der Routine angeben au erhalb der geschweiften Klammern die die Anweisungen der Routine umschlie en Routine Quadrat x Das Quadrat von num x ist num x x An Dieser Routine kann nun beim Aufrufen ein Wert in runden Klammern bergeben werden Quadrat 5 bedeutet Rufe die Routine Quadrat auf und setze die erste lokale Variable auf den Wert 5 Bei diesem Aufruf wird Das Quadrat von 5 ist 25 ausgegeben Die Werte die an die Routine bergeben werden hei en Argumente Es k nnen bis zu sieben Argumente an eine Funktion bergeben werden die in der Klammer durch Kommas getrennt werden Werden weniger Argumente bergeben als die Routine Variablen hat so sind die restlichen Variablen wie gehabt zu Beginn gleich null Werden mehr Variablen bergeben als in einer Routine definiert sind verfallen die berz hligen Argumente Argumente k nnen auch Variablen oder Ausdr cke sein die folgenden Aufrufe sind alle erlaubt Quadrat zZ Quadrat 2 a 1 Farbe a b 1 x Der letzte Aufruf ist legal auch wenn in der Routine Farbe keine Argumente in runden Klammern sondern drei lokale Variablen mit Lokal definiert wurden ZETA macht keinen Unterschied zwischen lokalen Variablen und Argumenten Je Routine k nnen nur f
207. verwendet man die Eigenschaft gibt s_in wie bei den Schiebekulissen und macht aus Zielraum eine Routine die den passenden Raum ausgibt 169 L sungen der Aufgaben Objekt gt Wohnzimmert r Name Wohnzimmert r Subst t r f wohnzimmert r f gibts_in Wohnzimmer Diele zielraum wenn aRaum Diele antworte Wohnzimmer antworte Diele ist Verbindung schlie bar geschlossen F r ein Spiel mit vielen T ren bietet es sich an eine Klasse T r zu schreiben Klasse T r Subst t r f zielraum wenn aRaum selbst gibts_in 0 antworte selbst gibts_in 1 antworte selbst R ume 0 ist Verbindung schlie bar geschlossen Nun kann man bequem T ren definieren Die beiden R ume die sie verbindet stehen in der Eigenschaft gibts_in die immer zwei R ume enthalten sollte und die bewirkt dass die T r von beiden Seiten sichtbar ist Dieselbe Wohnzimmert r also nochmal T r gt Wohnzimmert r Name Wohnzimmert r Subst wohnzimmert r f gibts_in Wohnzimmer Diele 6 Man muss nur zu jedem benachbarten Raum eine Verbindung definieren die die Vokabeln des Nachbarraums versteht So kann man sich mit gehe ins Wohnzimmer oder betrete die Kirche zwischen den R umen fortbewegen Da das Definieren vieler Verbindungen m hselig ist hier ein Beispiel f r eine Objektklasse f r standardisierte Verbindungen Klasse Raumverbindung gibts_in wenn s
208. weisungen sind also v llig gleich und erzeugen denselben Z Code num 1972 num S07BA num SS11110110100 Im Bin rsystem mit der Basis 2 werden nur die Ziffern O und 1 benutzt Das Hexadezimalsystem arbeitet mit der Basis 16 und ben tigt Ziffern mit Werten von O bis 15 Die Ziffern mit Werten ber 9 werden durch die Buchstaben A bis F bzw a bis dargestellt Diese Zahlen sind konstant 1972 hat immer den Wert 1972 Weitere Konstanten sind z B Zeichenketten innerhalb doppelter Anf hrungszeichen wie 1972 oder Vokabeln in Hochkommas 1972 sie haben als Wert die Adresse an der sie abgespeichert sind Einzelne Zeichen in Hochkommas haben den Zahlenwert des Zeichens im von ZETA benutzten Zeichensatz z entspricht 122 x Um als Vokabeln einzelne Buchstaben anzugeben etwa i als Abk rzung f r Inventar muss man ihnen einen Backslash einen gegenl ufigen Schr gstrich anh ngen N Im Gegensatz dazu k nnen Variablen ihren Zahlenwert ndern Je nach dem Bereich ihrer G ltigkeit unterscheidet man zwischen globalen und lokalen Variablen Globale Variablen sind von berall im Programm her zug nglich lokale Variablen sind auf eine Routine beschr nkt Globale Variablen k nnen au erhalb von Routinen mit der Direktive Variable definiert werden 1 Grundlagen Variable x Hauptprogramm num x Hier wurde eine globale Variable mit dem Bezeichner x definiert Da kein Wert angegeben wurde
209. wenn man ihnen ein Dollarzeichen voranstellt Die Ziffern 10 bis 15 werden dann durch die Buchstaben A bis F dargestellt Bin rzahlen k nnen nach zwei einleitenden Dollarzeichen angegeben werden sie d rfen nur die Ziffern 0 und 1 enthalten Bin r und Hexadezimalzahlen k nnen im Bereich von 0000 bis FFFF liegen Routinen Routinen sind Folgen von Anweisungen die in einem Block zwischen geschweiften Klammern zusammengefasst sind Diese Anweisungen k nnen ausgef hrt werden wenn die Routine aufgerufen wird Beim Aufruf kann die Routine Argumente erhalten und einen Wert zur ckgeben ZSCII Zeichen Ein ZSCH Zeichen ist ein g ltiges Zeichen der Z Maschine Dies sind die Zeichen des 7 Bit ASCH Zeichensatz plus einige Sonderzeichen Ein ZSCH Zeichen wird als einzelner Buchstabe zwischen Hochkommas angegeben x 138 Anhang A Spezifikation der Sprache Vokabeln Vokabeln sind kurze Texte in einfachen Anf hrungszeichen die im internen W rterbuch einsortiert werden Vokabeln k nnen nur Kleinbuchstaben Ziffern und Satzzeichen enthalten Gro buchstaben und Umlaute werden umgewandelt Eine Vokabel kann h chstens neun Zeichen lang sein Eine Vokabel die nur einen Buchstaben enth lt muss als letztes Zeichen einen r ckl ufigen Schr gstrich den Backslash angeh ngt bekommen um sie von ZSCIH Zeichen zu unterscheiden Vokabeln dienen im Allgemeinen der Texteingabe Texte Texte sind Zeichenketten die zwischen doppelten An
210. z jenach n 8 0 3 num n 8 7 4 Bube 5 Dame 6i K nig 7 As Hauptprogramm lokal i KartenOrdnen KartenMischen 100 Die Karten sind nun in folgender Reihenfolge n schleife i 0 i lt 32 i Kartennanme Karten i n 22 1 Grundlagen I Etwas worauf man bei Feldern achten muss ist dass man nicht versucht ausserhalb der Feldgrenzen zu lesen oder noch schlimmer zu schreiben Wer einmal inKarten 32 oder Karten 1 nachschaut findet dort wahrscheinlich Werte mit denen er nichts anfangen kann Wer dorthin schreibt zerst rt Daten anderer Felder im schlimmsten Fall sogar die Spieldatei Ob ein Feldindex im erlaubten Bereich liegt wird von ZETA nicht berpr ft Es ist am Programmierer dies sicherzustellen Es gibt eine zweite M glichkeit Felder zu definieren Anstatt die Dimension anzugeben kann man eine Liste von Werten nach einem Gleichzeichen angeben mit denen die Feldeintr ge vorbelegt werden Die Dimension des Feldes ist dann gleich der Anzahl der Eintr ge Feld zweiHoch 01 02 04 08 S10 20 40 80 Dieses Feld hat die acht Eintr ge zweiHoch 0 bis zweiHoch 7 die die Werte der dazugeh rigen Zweierpotenzen haben Eine letzte M glichkeit ist eine Zeichenkette in Anf hrungszeichen anzugeben Dann ist die Dimension des Feldes gleich der Anzahl der Zeichen plus eins die Werte der Eintr ge entsprechen dem Wert der Zeichen im ZSCH Code
211. zt man die Direktive Konstante Konstante meinJahr 1972 Damit wird im gesamten Programm meinJahr als die Zahl 1972 interpretiert Anweisungen wiea meinJahr unda 1972 erzeugen denselben Code Eine Besonderheit gibt es bei Konstanten Wenn kein Wert mit zugewiesen wird erzeugt ZETA eine Konstante deren Wert sich von allen anderen ohne Wert definierten Konstanten unterscheidet Konstante Karo Herz Pik Kreuz erzeugt vier voneinander verschiedene Konstanten ohne dass der Programmierer wei welchen Wert sie genau haben Alle Variablen und Konstanten m ssen definiert werden bevor sie zum ersten Mal in einem Ausdruck verwendet werden 1 4 Rechenoperationen Au er dem Zuweisungsoperator gibt es in ZETA eine Anzahl weiterer insbesondere arithmetischer Operatoren so dass Zuweisungen wie Position 8 Reihe Spalte m glich sind Die arithmetischen Operatoren sind und f r Addition Subtraktion Multiplikation ganzzahlige Division und Rest einer ganzzahligen Division Ob zwischen Operatoren und Bezeichnern Leerzeichen stehen oder nicht ist egal Ganzzahlige Division bedeutet dass das Ergebnis einer Division immer ganzzahlig ist in ZETA ist 23 5 gleich 4 und 23 5 gleich 3 Es gilt a a b b a b x Die Division und die Bildung des Rests sind vorzeichenbehaftet Das Ergebnis der Division ist negativ wenn der Divedend a und der Divisor b verschiedene Vorzeichen haben 1 Grundlagen der Rest
Download Pdf Manuals
Related Search
Related Contents
EXAMEN THÉORlQUE commun DE PILOTE o*aEaonar Taylor 519 User's Manual User`s ManUal naVIGaTIOn sysTeM VeHIcles MAX250/MAX500 BIRCH STREET HELP MANUAL APC 9000 Power Supply User Manual Filter Core Series The SVF User's Guide EnGenius ESR600H Wi-Fi Ethernet LAN Black router Massive Ceiling light 30023/31/10 Delta Electronics Programmable Logic Controller DVP-SC User's Manual Copyright © All rights reserved.
Failed to retrieve file