Adventure-Programmierung - Teil 1 ----------------------------------- von Tim-Philipp Müller Woraus bestehen Adventures eigentlich? 1. Die Story - Wann, wer, wo? 2. Die Karte und der Verlauf 3. Programmierung: - Raumbeschreibungen - evtl. Grafik - Parser - Interpreter Am Anfang steht die Story. Darauf kann man dann aufbauen. Der nächste Schritt ist erstmal eine Materialsammlung: - Welche Probleme müssen gelöst werden? - Wie sieht der Verlauf auf? Als nächstes ist eine Karte zu zeich- nen, auf der die Verbindung der einzel- nen Räume untereinander eingezeichnet sind und ob diese frei oder nur durch Bewältigen eines Hindernisses begehbar sind. Als 'Raum' gilt dabei jede Spielszene, sei es der Innenraum eines Schrankes, eine ganze Wüste oder ein Kaufmann. Weiterhin ist es nicht schlecht, wenn man eine Liste zur Hand hat, die über die statischen (nicht mitnehmbar) und dynamischen (mitnehmbar) Objekte eines jeden Raumes Aufschluss gibt. Nun aber zur Programmierung: Am besten wäre es natürlich, alles in Assembler zu programmieren, gerade wenn das Adventure ziemlich umfangreich werden soll, aber meistens reicht QUICK völlig aus (und ist auch einfacher zu programmieren). Zuerst könnte man ja zum Beispiel die Karte umsetzen. Jeder Raum hat eine eigene Nummer von 1-255, die Nummer 0 ist der Spieler selbst. Bewegungen führen normalerweise in sechs Richtungen (N,S,W,O,Hoch und Runter) bzw. zehn Richtungen ( + NW,NO, SW,SO). Da in QUICK keine Mehrfeld-Arrays wie in BASIC möglich sind, sondern nur ein- fache, definieren wir für jede Richtung ein Array. In jedem Feld speichern wir nun die Raumnummer des Raumes ab, in den man kommt, wenn man in die entsprechende Richtung geht. z.B. NORD(50)=51 SUED(51)=50 WEST(51)=0 d.h. Geht man von Raum 50 nordwärts, kommt man in Raum 51, geht man von 51 nach Süden, gelangt man natür- lich wieder in Raum 50. Man kann von Raum 51 aber nicht nach Westen gehen. Und so macht man das mit jeder Richtung und mit jedem Raum. Am besten ist es natürlich, wenn die Daten dann nachher auf Diskette vor- liegen, damit man sie bei Spielbeginn nur noch einlesen muß (das verkürzt das Programm außerdem erheblich). So kann man während des Spiels auch bestimmte Richtungen freimachen. Hat der Spieler in Raum 51 eine Geheimtür geöffnet, kann man den Wert in WEST(51) z.B. von 0 in 52 ändern, womit der Weg frei wäre.... Befindet sich unser Held nun in einem Raum, möchte er auch eine Raumbeschrei- bung haben. Die Texte tippt man am besten mit einer normalen Textverarbeitung, die ATASCII- Code speichert. Zwischen den Texten, die zu unterschiedlichen Räumen gehören läßt man entweder eine Zeile frei oder setzt ein Erkennungszeichen, z.B. #. Das Programm geht am Spielbeginn den Text durch und merkt sich, in welchem Sektor und bei welchem Byte der Text eines jeden Raumes anfängt (mittels der DOS-Befehle NOTE und POINT). So kann es nachher schnell und direkt auf den jeweiligen Text zugreifen. So, das soll es für diesmal gewesen sein. Auf der Disk befindet sich ein kleines Beispielprogramm (MINIADV.QIK), zu dem das Textfile RAUM.TXT und das Datenfile RAUM.DAT gehört. Die bereits compilierte Version liegt als File MINIADV.OBJ vor.