________________________________________________________________________
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4. Befehle, Aktionen und Variablen
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4.1. BefehleDie Befehle sind Verben, die zu einer Aktion zusammengafaßt werden, und die schließlich irgendetwas bewirken. Sie werden folgendermaßen definiert: Bef Bef {*} Mit dem nachgestellten Sternchen wird der Befehl als Steuerbefehl (oder Meta-Befehl) definiert. Steuerbefehle dienen nur zur Kommunikation mit dem Programm, der Spielverlauf bleibt davon unberührt. Typische Steuerkommandos sind z.B. Speichern, Laden oder Ende. Zu den Befehlen können folgende Anweisungen angegeben werden:
Und wieder ein Beispiel: Bef putzen Name 'putzen' Verb 'putze' 'wasche' 'reinige' 'säubere' 'mache sauber' Syntax dasObj mit demObj (BeiMir evtl) Ausf [...] EndeAusf Es ist schön, wenn Ihr zu jedem Befehl möglichst viele Umschreibungen mit Verben zulaßt. Es gibt nämlich nichts Schlimmeres, als an einem bestimmten Verb zu suchen, wenn man ein Adventure spielt. Außer BINDE sollte der Parser z.B. auch KNOTE und BEFESTIGE verstehen. Außerdem solltet Ihr die Befehle so allgemein wie möglich halten. BEFESTIGE könnte außer festbinden noch andere Aktivitäten bedeuten, vielleicht einen Magneten anheften oder einen Zettel mit einer Nadel an eine Pinnwand stecken. In TAG sind bereits einige Befehle vorgegeben, die die wesentlichen Aktionen durchführen. Dies sind: gehen nehmen herausnehmen herunternehmen hinlegen hineinlegen darauflegen untersuchen lesen lage inventar öffnen schliessen aufschliessen abschliessen anmachen ausmachen anziehen ausziehen sitzen_auf liegen_auf stehen_auf steigen_auf betreten steigen_von aufstehen sagen sagen_zu hineinschauen daraufschauen schauen warten Dies sind nur die allereinfachsten Verben, die am häufigsten verwendet werden. Einige gehen auch in andere über, z.B. steigen_auf wird je nach angesprochenem Objekt zu sitzen_auf, liegen_auf oder stehen_auf. Eine Erläuterung der bereits vorgegebenen Verben findet sich im Anhang C. Außerdem sind die wichtigsten Steuerfunktionen bereits realisiert: #ende #neu #laden #speichern #knapp #ausführlich #meldungen #punkte #manuskript #rückgängig #fussnote Inklusive dieser Befehle können nur 255 Befehle definiert werden. Die von TAG vorgegebenen Befehle können noch erweitert werden. Dazu wird der Befehl angegeben wie ein neuer Befehl: Bef Bef Zu den TAG-Befehlen können folgende Anweisungen angegeben werden: Verb 'Verb1' {'Verb2' ...} Verb1 Die Liste von Verben, die der Parser dem vorhandenen TAG- Befehl zuordnen soll, kann hier erweitert werden. VorAusf In diesem Block wird eine Aktion definiert, die vor der Aktion des Verbs in TAG durchgeführt wird. Wird diese voraus- gehenden Aktion vorzeitig beendet, so wird die eigentliche Aktion des Verbs nicht ausgeführt. NachAusf ist eine Aktion, die nach der eigentlichen Aktion des Verbs durchgeführt wird, wenn diese nicht vorzeitig beendet wurde.Mit VorAusf unf NachAusf können die bestehenden Befehle also nach Bedarf ergänzt werden. Zu Befehlen, die zwei Objekte benötigen, kann man einen Pseudo-Befehl definieren, der in den Vor- und Nach-Ausführungen der Objekte (Kap. 6.5) benutzt wird: Pseudo PsBef Bef Die genaue Bedeutung dieses Pseudo-Befehls wird später bei den Ausführungs- blöcken der Objekte beschrieben. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4.2. Flaggen und VariablenAuch in TAG gibt es natürlich eine Menge von Variablen, um sich im Spielver- lauf Dinge zu merken. Da es in TAG verschiedene Datentypen gibt, gibt es auch verschiedene Arten von Variablen, die im folgenden vorgestellt werden sollen. 4.2.1. Flaggen und Integer-VariablenFlaggen werden benutzt, um sich bestimmte Sachverhalte zu merken. Generell gibt es zwei Arten von Flaggen in TAG: Flaggen, die nur zwischen den zwei Zuständen 'wahr' und 'falsch' unterscheiden und Flaggen, die einen Zahlenwert von 0 bis 255 repräsentieren, um kompliziertere Sachverhalte darzustellen. TAG unterscheidet nicht zwischen diesen beiden Typen. Die Flagge hat einen Zahlenwert und sie ist falsch, wenn ihr Wert 0 ist und wahr, wenn ihr Wert von Null verschieden ist. Wie die Flaggen verwendet werden, liegt auch hier im Ermessen des Programmierers. Definiert werden Flaggen mit: Flagge Flg {Wert} Manchmal benötigt man negative Zahlen oder Zahlen, die größer sind, als 255. Für diesen Fall gibt es die Integer-Zahlen. Sie entsprechen dem langen Ganz- zahlenformat und können Werte von ca. minus 2 Mrd. bis plus 2 Mrd. annehmen. Sie werden analog zu den Flaggen definiert mit: Integer Int {Wert} Es können 255 Flaggen und 32 Integer-Zahlen in TAG definiert werden. Es gibt einige Flaggen, die schon von TAG vorgegeben sind:
Nummer, Nummer2, Züge, PktZahl und PktBasis sind Integer-Zahlen, alle anderen Systemflaggen liegen im Bereich von 0 bis 255. 4.2.2. KonstantenManche Zahlen ändern sich nicht während eines Spiels. Dennoch werden sie häufig benutzt und so ist es sinnvoll sie als Konstanten zu definieren. Das geschieht wie folgt: Konst Konst Wert Konst Bezeichnung der Konstante in TAG Wert Wert der Konstante. Dieser Wert muß angegeben werden, da es keine Möglichkeit gibt, der Konstante währen des Spiels einen Wert zuzuweisen.Konstanten können nur Werte von 0 bis 255 annehmen. Folgende Konstanten sind automatisch von TAG belegt:
Diese Konstanten sind sinnvoll für Schleifen über alle Objekte oder über alle Räume. Die Objekte und Räume sind natürlich intern durchlaufend numeriert und zwar in der Reihenfolge ihres Auftretens im ADV-Datensatz. Mit einer Schleife von minObj bis maxObj durchläuft man also alle Objekte. Diese Konstanten sind jeweils vom Typ Objekt, Raum und Richtung. 4.2.3. FelderFür flexibles Programmieren steht dem fortgeschrittenen Text-Adventure-Autor die Möglichkeit zur Verfügung, Felder zu definieren. Insgesamt können folgen- dermaßen 32 Felder definiert werden: Feld Feld (Dim1 {Dim2} {Dim3}) Feld Bezeichner des Feldes in TAG Dim Dimension des Feldes. Es können bis zu drei Dimensionen eines Feldes angegeben werden. (Nicht angegebene Dimen- sionen sind automatisch eins.)Das Produkt der Dimensionen darf nicht größer sein als 256, da in jedem Feld maximal 256 Speicherplätze zur Verfügung stehen. Auch die Werte selbst können nur im Bereich von 0 bis 255 liegen. Der Anfangswert aller Elemente im Feld ist natürlich Null, ein Feld kann nur in einem Anweisungsblock belegt werden. Ein Wert in einem Feld wird angesprochen mit: Feld.Zahl oder Feld.FlgDabei können tatsächlich nur definierte Flaggen oder Zahlen angegeben werden. Zum Arbeiten sollte also eine Hilfsflagge definiert werden, so daß verschach- telte Poistionen auf einem Feld leichter angesprochen werden können. Die Feldbelegungen fangen immer bei 0 an. Das Feld Wald (9) hätte also die Einträge Wald.0, Wald.1, Wald.2, ... Wald.8 Die Einträge Wald.9 und darüber existieren nicht. (Sie können angesprochen werden, aber ihr Wert ist immer Null. Auf keinen Fall können sie mit Werten belegt werden.) Mehrdimensionale Felder haben Feldeinträge von 0 bis Dim1*Dim2*Dim3 - 1. Die Indizes der einzelnen Dimensionen gehen wieder von 0 bis Dim - 1. Das Feld wird intern als eindimensional behandelt und man kann die eindimensionale Position der Position (x, y, z) berechnen aus: Pos = (x*Dim1 + y)*Dim2 + z Da das Arbeiten mit Feldern in TAG nicht besonders leicht ist, gibt es ein paar Anweisungen, die dem Autor das Leben etwas erleichtern. Sie sind in Kap. 5.1.6. beschrieben. 4.2.4. RaumvariablenUm bestimmte Räume abspeichern zu können, bietet TAG die Möglichkeit, Raum- variablen zu definieren. Ähnlich, wie eine Variable einen Zahlenwert hat, so hat eine Raumvariable einen Raum als Wert. Definiert wird eine Raumvariable folgendermaßen: RaumVar RVar {Raum} RVar Bezeichner der Variablen in TAG Raum Hier kann ein Raum angegeben werden, auf den sich die Variable zu Beginn des Spiels bezieht. Wird keiner angegeben, so ist die Variable Null, sie bezieht sich also auf keinen Raum.Es gibt bereits zwei Variablen, die vordefiniert sind:
Insgesamt können bis zu 63 Raumvariablen definiert werden. 4.2.5. ObjektvariablenFür Objekte gib es natürlich auch die Möglichkeit, Variablen zu definieren. Hier können den Variablen nur ein bestehenden Objekt oder der Zahlenwert Null zugewiesen werden. Die Definition einer Objektvariable ist: ObjVar OVar {Obj} OVar Bezeichner der Variablen in TAG Obj Hier kann der Anfangswert der Variable angegeben werden, der natürlich ein definierts Objekt sein muß.Es gibt neun vordefinierte Objektvariablen:
Es können - diese Variablen mitgezählt - 63 Objektvariablen definiert werden. 4.2.6. Weitere VariablenTAG bietet auch die Möglichkeit, Zustände, Richtungen oder Befehle auf Variablen zu legen. Diese Variablen werden weitaus weniger benötigt, sind aber trotzdem hin und wieder sinnvoll. Richtungsvariablen definiert man wie folgt: RitgVar RiVar {Ritg} RiVar Bezeichner der Variablen Ritg Eventuell Vorbelegung mit einer RichtungEine vordefinierte Richtungsvariable in TAG ist: aRitg die Richtung, die im Befehl des Spielers verwendet wurde.Zustandsvariablen werden folgendermaßen definiert: ZustVar ZVar {Zust} ZVar Bezeichner der Variablen Zust Eventuell Vorbelegung mit einem ZustandEs gibt hier keine vordefinierten Variablen Und die Definition von Befehlsvariablen: BefVar BVar {Bef} BVar Bezeichner der Variablen Bef Vorbelegung mit einem BefehlVordefiniert ist hier: aBef der Befehl, der als Ergebnis der Textanalyse der Eingabe des Spielers bestimmt wurde. (Siehe Kapitel 2)Es können jeweils 63 Richtungs-, Zustands- und Befehlsvariablen definiert werden. 4.2.7. StringsStrings sind Textvariablen. Intern wird in TAG jeder Text als eine Position auf den Texblöcken dargestellt, und zwar in der Form Block Nr. Deshalb kann man auch Texte entweder explizit zwischen zwei Apostrophen oder implizit als Block- und Textkennung angeben. Ein String wird folgendermaßen definiert: String Strg {'Text'} Strg Bezeichner in TAG Text Text in einfachen Anführungszeichen. Wird kein Text angegeben, so ist der String leer (bzw. Block und Nr sind beide Null).Strings sind sehr praktisch zum variablen Definieren von Texten, die normalerweise statisch sind. In TAG gibt es nicht die Möglichkeit, Objekt- und Raumbeschreibungen oder -namen als Routinen anzugeben. Deshalb kann man Strings in diese Texte einbetten, um sie variabel zu machen. Ein String ist bereits vordefiniert: Statuszeile kann in der Statuszeile benutzt werden, wenn es in der Umgebung so definiert ist. (Siehe Kap. 8: einer der Parameter von Status muß den Wert 7 haben.)Es können 63 Strings definiert werden. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4.3. AktionenAktionen sind Folgen von Anweisungen zum Manipulieren von Objekten, Räumen und dem Spieler. Sie können definiert werden, um häufig wiederkehrende Passagen abzukürzen. Sie können von anderen Aktionen aufgerufen werden. Aktionen werden wie folgt definiert: Aktion Akt {*} Das Sternchen kann angegeben werden, wenn die Aktion in jedem Zug aufgerufen werden soll. Das kann für zeitabhängige Ereignisse sehr nützlich sein. Wenn eine Aktion für jeden Zug, also mit einem Sternchen, definiert wurde, braucht die Aktion keinen Namen zu besitzen. (Der Name dient natürlich zum Aufrufen der Aktion, und da Aktionen, die in jedem Zug aufgerufen werden, in der Regel sowieso nur dort aufgerufen werden und dies vom Programm automatisch bewerkstelligt wird, kann der Name hier entfallen.) Die Aktion wird zwischen Ausf und EndeAusf definiert. Wie man das macht, ist im nächsten Kapitel beschrieben. Eine genaue Übersicht über den Einsatz von Aktionen und über den Ablauf eines Spielzuges im nächsten Kapitel. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|