^3Ŀ ^3^0The Real Adok's Way to QBASIC^3 ^3^0 A new Method Step by Step ^3 ^3 ^3^4 ^3 ^3^4 ^3 ^3^4 ^3 ^3 Willkommen zum sechsten Teil von The Real Adok's Way to QBASIC! Diesmal geht es hauptschlich um das Erstellen einfacher Adventures. Wenn ihr alle brav mitgelernt habt, erfllt ihr jetzt schon alle Voraussetzungen, um kreativ zu sein! Wir werden zustzlich noch einige neue Techniken kennenlernen, die auch in anderen Programmieraufgaben ntzlich sein knnen. Wenn man ein ^4Adventure^5 erstellen will, sollte man sich zunchst vor der Codierung einen groben berblick ber die Story verschaffen. Normalerweise ist ein Adventure eine fortlaufende Geschichte, bei der man an einigen Stellen in die Handlung eingreifen kann. Bei professionellen Adventures sind aber die Eingriffsmglichkeiten so gro, da das Ganze zu einem Spiel wird. Programme mit weniger Eingriffsmglichkeiten nennen sich interaktive Filme. Die meisten von ihnen sind so primitiv, da man nur ab und zu eine Richtungstaste drcken und hoffen darf, da sie die richtige war! Unser erstes Spiel soll etwas mehr Eingriffsmglichkeiten als interaktive Filme, aber weniger als professionelle Adventures bieten. Oft werden in Adventures Gegenstnde benutzt. Diese knnen wir in Variablen speichern. Wenn die jeweilige Variable 1 ist, dann besitzt die Person den Gegenstand, wenn sie 0 ist, dann nicht. Man knnte auch noch andere Werte einsetzen, z.B. 2 - der Gegenstand ist bereits benutzt worden, befindet sich aber immer noch im Besitz des Spielers. Der Phantasie des Programmieres sind keine Grenzen gesetzt (hchstens die des Arbeitsspeichers)! Wie bereits im Beispiel aus der vorigen Folge gezeigt wurde, werden die Aus- wahlsmglichkeiten mit PRINT angezeigt. Danach wird die Wahl eingegeben und mit SELECT/CASE ausgewertet. Um die Eingabe wenigstens etwas komfortabler zu gestalten, ordnen wir jeder bis auf die letzte Auswahlsmglichkeit eine Zahl zu. Der Benutzer mu dann nur die Zahl, die der gewnschten Auswahlsmglich- keit zugeordnet ist, eingeben. Fr die letzte Auswahlsmglichkeit kann dann jede beliebige andere Zahl oder Zeichenkette eingegeben werden. Da LINE INPUT hier geradezu verschwenderisch als Eingabebefehl ist (immerhin mu nur ein Zeichen eingegeben werden), benutzen wir einen anderen, sehr praktischen Befehl. Eigentlich ist er kein Befehl, sondern eine Funktion. Den Unterschied zwischen Befehlen und Funktionen werden wir in Folge 10 genauer definieren. Hier sei nur gesagt, da Funktionen normalerweise wie Wert- zuweisungen behandelt werden. Man kann sie aber auch mit einem Befehl kombi- nieren, z.B. wre 'PRINT INKEY$' durchaus mglich. ^4INKEY$^5 ist eine Funktion, die abfragt, ob gerade eine Taste gedrckt wurde. Wenn ja, wird ihr ASCII- oder Scancode zurckgeliefert, ansonsten ein leerer String. Nher mchte ich nicht darauf eingehen, weil ohnehin schon drei Leute im Hugi etwas davon berichtet haben. (Scorpe im Hugi #1, Toxo im Hugi #3 im Artikel Fight, und in der Tips-Rubi des Hugi #5 stellt euch SteX einige Scancodes vor, die ihr brigens auch in der Online-Hilfe von QBasic findet). Die Funktion, die wir jetzt besprechen wollen, heit ^4INPUT$^5. Die Syntax lautet ^0Zeichenkettenvariable$ = INPUT$(AnzahlZeichen)^5 Da wir bei Adventures den An- wender immer nur ein Zeichen eingeben lassen, bentigen wir die Form ^0Eingabe$ = INPUT$(1)^5 Die Funktion INPUT$(1) wartet nun, bis der Benutzer eine Zahl oder ein Zeichen eingibt und speichert dieses danach in der Variablen Eingabe$. Praktischer Nebeneffekt: Im Gegensatz zu INPUT und LINE INPUT wird weder der Cursor noch die Eingabe auf dem Bildschirm angezeigt, auer, wenn es durch eine spezielle Variante des ^1LOCATE^5-Befehls eingestellt wurde (siehe Online-Hilfe). Deshalb eignet sich INPUT$(1) auch gut, wenn man den Benutzer auffordert, eine beliebige Taste zu drcken, um fortzusetzen (so, wie es QBasic am Ende jeder Programmausfhrung tut). Ein weiterer Befehl, der fr letztere Aufgabe geeignet ist, ist ^4SLEEP^5. Von diesem Befehl rate ich jedoch dezent ab, weil die Eingabe dann im Tastatur- puffer gespeichert und dann fr die nchste Eingabe bernommen wird. Auch die SLEEP-Warteschleifen sind mies, weil sich erstens nur ganze Sekunden angeben lassen und sie zweitens mit einem beliebigen Tastendruck abgebrochen werden knnen. Also beachtet diesen Befehl, den sich sicherlich schon einige aus der Online-Hilfe "herausgepickt" haben, nicht! Weiters mssen wir bei Adventures oft im Programm "springen". Wenn wir etwa ein Haus betreten und es spter wieder verlassen, mu zu der Stelle, wo wir vor dem Haus stehen, gesprungen werde. Am einfachsten sind solche Sprnge mit dem berhmt-berchtigten Befehl ^4GOTO^5 realisierbar. Dazu mu zuerst ein so- genanntes ^1Label^5 definiert werden, zu dem GOTO dann springen kann. Ein Label besteht aus einer Zeichenkette, diesmal aber ausnahmsweise nicht in An- fhrungszeichen eingeschlossen, und einem Doppelpunkt. Es mu in einer eigenen Zeile stehen. Nach GOTO mu als Parameter der Name des Labels angegeben werden, denn es lassen sich natrlich auch mehrere Labels benutzen. Allerdings mssen die dann auch verschiedene Namen haben! (Ich wei aus eigener Erfahrung, da vieles, was fr mich heute selbstverstndlich ist, fr Anfnger unntig kompliziert sein kann. Deshalb erklre ich lieber alles genauer als notwendig.) So, jetzt kennt ihr die Theorie. Nun wollen wir ein kleines Beispiel liefern. ^0'Die Reise zum Mond ^0'Stark gekrzte Version fr The Real Adok's Way to QBASIC ^0COLOR 14, 1 ^0CLS ^0'Vorspann ^0PRINT "Die Reise zum Mond - Das Gerhard-betriebene Raumschiff" ^0PRINT "Copyright (C) 1995-1996 by Adok Soft" ^0PRINT ^0PRINT "Stark gekrzte Version fr The Real Adok's Way to QBASIC" ^0a$ = INPUT$(1) ^0CLS ^0PRINT "Clausi, Stefan, Philipp, Franzi, Gerhard, Marius, Zahra und Nele "; ^0PRINT "wollen gemeinsam auf den Mond fliegen! "; ^0PRINT "Clausi, das Genie, baute kurzerhand ein" ^0PRINT "Raumschiff namens Astrein Shuttle und ernannte sich zum Kommandanten." ^0PRINT "Das besondere am Astrein Shuttle ist sicherlich nicht seine Geschwin-" ^0PRINT "digkeit, die mit einigen Megametern pro Sekunde nicht sehr schnell "; ^0PRINT "ist," ^0PRINT "sondern der Antrieb. "; ^0PRINT "Er funktioniert so: Gerhard hngt sich an das Raumschiff" ^0PRINT "an und lt sich von Zahra fttern. "; ^0PRINT "Je mehr er (fr)it, desto mehr - pardon -" ^0PRINT "Abgase lt er. Und diese Abgase treiben das Raumschiff an!" ^0a$ = INPUT$(1) ^0CLS ^0PRINT "Nochmals fr alle: Die Besatzung besteht aus" ^0PRINT ^0PRINT "Clausi.......... Kommandant" ^0PRINT "Franzi.......... 1. Offizier" ^0PRINT "Philipp......... 2. Offizier" ^0PRINT "Stefan.......... 3. Offizier" ^0PRINT "Marius.......... Oberbiologe und Klowart" ^0PRINT "Nele............ Navigatorin" ^0PRINT "Gerhard......... Treibstofferzeuger" ^0PRINT "Zahra........... Krankenschwester" ^0a$ = INPUT$(1) ^0CLS ^0PRINT "Du bernimmst die Rolle von Clausi, dem Kommandanten. "; ^0PRINT "Du und deine Besatzung" ^0PRINT "sind schon sehr lange (seit einer Minute!) im Weltraum mit dem "; ^0PRINT "Schiff unter - " ^0PRINT "wegs. "; ^0PRINT "Deine Aufgabe ist es, dich und deine Besatzung sicher zum Mond zu "; ^0PRINT "bringen. " ^0PRINT "Einfach? "; ^0PRINT "Ja, so klingt es. "; ^0PRINT "Ist es aber nicht..." ^0a$ = INPUT$(1) ^0'Das Spiel beginnt! ^0HaupthalleStart: ^0 CLS ^0 PRINT "Du bist nun in der Haupthalle des Astrein-Shuttles. Von hier aus kannst du" ^0 PRINT "alle Rume des Raumschiffs erreichen und das Raumschiff sogar verlassen." ^0 PRINT "Bevor du letzteres tust, rate ich dir, die notwendige" ^0 PRINT "Ausrstung zu holen..." ^0 GOSUB Eingabe ^0 CLS ^0 SELECT CASE eingab$ ^0 CASE "1" ^0 PRINT "Es ist niemand da, mit dem du sprechen knntest!" ^0 CASE "2" ^0HheRetry1: ^0 PRINT "Was willst du betrachten?" ^0 PRINT " (1) Die Tren" ^0 PRINT " (2) Den Raum" ^0 PRINT " (3) Die Luft" ^0 PRINT " (4) Das Schild" ^0 e1$ = INPUT$(1) ^0 CLS ^0 SELECT CASE e1$ ^0 CASE "1" ^0 PRINT "Es sind fnf groe Tren, die durch ein Laserfeld geschlossen "; ^0 PRINT "sind. Berhrt" ^0 PRINT "man das Laserfeld, so wird es automatisch deaktiviert." ^0 CASE "2" ^0 PRINT "Ein groer, leerer Raum, der Haupthalle genannt wird. An den "; ^0 PRINT "Wnden kleben" ^0 PRINT "alte Butterbrote, und die fnf Tren werden durch ein Laserfeld "; ^0 PRINT "geschlossen. " ^0 PRINT "Wenn man diesen Raum mit einem bestimmten Klassenraum des "; ^0 PRINT "Goethe-Gymnasiums vergleicht, so ist eine gewisse hnlichkeit "; ^0 PRINT "erkennbar. " ^0 CASE "3" ^0 PRINT "Das Sehorgan behauptet, sie wre ein transparentes Nichts. Das "; ^0 PRINT "Geruchs- und" ^0 PRINT "das Atmungsorgan wissen es allerdings besser." ^0 CASE "4" ^0 PRINT "Auf ihm steht 'EXIT'. Offensichtlich fhrt es zum Ausgang "; ^0 PRINT "dieses Raumschiffs." ^0 PRINT "Das solltest du, der Erbauer dieses Raumschiffs, eigentlich am "; ^0 PRINT "besten wissen!" ^0 CASE ELSE ^0 GOTO HheRetry1 ^0 END SELECT ^0 CASE "3" ^0HheRetry2: ^0 PRINT "Was willst du nehmen?" ^0 PRINT " (1) Laserfeld" ^0 PRINT " (2) Butterbrot" ^0 e1$ = INPUT$(1) ^0 CLS ^0 SELECT CASE e1$ ^0 CASE "1" ^0 PRINT "Bist du lebensmde oder was!? Wenn du so weitermachst, wirst du "; ^0 PRINT "das Spiel nie" ^0 PRINT "schaffen!" ^0 CASE "2" ^0 PRINT "Igitt! Dieses grausame, an der Wand klebende, mit Butter "; ^0 PRINT "verzierte Brot ist" ^0 PRINT "ekelerregend! La es lieber kleben!" ^0 CASE ELSE ^0 GOTO HheRetry2 ^0 END SELECT ^0 CASE "4" ^0HheRetry3: ^0 PRINT "Wohin willst du gehen?" ^0 PRINT " (1) Tr 1" ^0 PRINT " (2) Tr 2" ^0 PRINT " (3) Tr 3" ^0 PRINT " (4) Tr 4" ^0 PRINT " (5) Tr 5" ^0 e1$ = INPUT$(1) ^0 CLS ^0 SELECT CASE e1$ ^0 CASE "1", "2", "4" ^0 PRINT "Diesen Raum kannst du nur in der ungekrzten Fassung betreten!" ^0 CASE "3" ^0 GOTO KommandoraumStart ^0 CASE "5" ^0 GOTO OffizierszimmerStart ^0 CASE ELSE ^0 GOTO HheRetry3 ^0 END SELECT ^0 CASE ELSE ^0 GOTO HaupthalleStart ^0 END SELECT ^0 a$ = INPUT$(1) ^0 GOTO HaupthalleStart ^0KommandoraumStart: ^0 CLS ^0 PRINT "Dies ist der Kommandoraum des Astrein Shuttles. Vor dir ist ein "; ^0 PRINT "riesiges " ^0 PRINT "Steuerpult, neben dem Nele sitzt, die vergeblich versucht, es zu "; ^0 PRINT "bedienen. " ^0 PRINT "Dahinter befindet sich in diesem Raum ein riesiges Fenster." ^0 GOSUB Eingabe ^0 CLS ^0 SELECT CASE eingab$ ^0 CASE "1" ^0KreRetry1: ^0 PRINT "Mit wem willst du sprechen?" ^0 PRINT " (1) Nele" ^0 PRINT " (2) Autopilot" ^0 e1$ = INPUT$(1) ^0 CLS ^0 SELECT CASE e1$ ^0 CASE "1" ^0 SELECT CASE MitNeleGeredet ^0 CASE 1 ^0 PRINT "Nele: 'Konntest du den Autopiloten aktivieren?'" ^0 PRINT "Clausi: 'Ich bin gerade dabei!'" ^0 CASE 0 ^0 PRINT "Clausi: 'Gibt es Probleme?" ^0 PRINT "Nele: 'Ja, gewaltige! Wir sind vom Kurs abgekommen, und ich "; ^0 PRINT "kann den" ^0 PRINT " Autopiloten nicht mehr aktivieren!'" ^0 PRINT "Clausi: 'Dann siehe doch in der Bedienungsanleitung nach!'" ^0 PRINT "Nele: 'Ich habe sie verloren.'" ^0 PRINT "Clausi: 'Wunderbar! Letzten Endes mu ich doch immer alles "; ^0 PRINT "machen. La es" ^0 PRINT " mich probieren!'" ^0 MitNeleGeredet = 1 ^0 END SELECT ^0 CASE "2" ^0 PRINT "Clausi: 'Bitte, Herr Autopilot, fliegen Sie uns zum Mond!'" ^0 PRINT ^0 PRINT "............................" ^0 PRINT ^0 PRINT "Keine Antwort. Tja, so leicht geht es nicht!" ^0 CASE ELSE ^0 GOTO KreRetry1 ^0 END SELECT ^0 CASE "2" ^0KreRetry2: ^0 PRINT "Was willst du betrachten?" ^0 PRINT " (1) Nele" ^0 PRINT " (2) Steuerpult" ^0 PRINT " (3) Fenster" ^0 PRINT " (4) Teppich" ^0 e1$ = INPUT$(1) ^0 CLS ^0 SELECT CASE e1$ ^0 CASE "1" ^0 PRINT "Nele, die Navigatorin des Astrein-Shuttles, sitzt gemtlich auf "; ^0 PRINT "ihrem Sessel, " ^0 PRINT "hrt sich mit ihrem Discman eine neue CD an und versucht "; ^0 PRINT "herauszufinden, wie" ^0 PRINT "man den Autopiloten des Astrein-Shuttles aktiviert." ^0 CASE "2" ^0 IF MitNeleGeredet = 1 AND Joystick = 5 THEN ^0 PRINT "Du gibst den Code, den dir Franzi gesagt hat, ein." ^0 PRINT "Pltzlich ruft Nele: 'Hurra! Du hast es geschafft! Du hast den "; ^0 PRINT "Autopiloten " ^0 PRINT "aktiviert!'" ^0 a$ = INPUT$(1) ^0 CLS ^0 PRINT "Das war die gekrzte Version von 'Die Reise zum Mond' fr" ^0 PRINT "The Real Adok's Way to QBASIC. See you in the Full Version!" ^0 END ^0 ELSE ^0 PRINT "Das Steuerpult des Astrein-Shuttles besteht aus unzhligen "; ^0 PRINT "Knpfen, Hebeln," ^0 PRINT "Schaltern, Joysticks und Joypads. Sogar ein Computer mit "; ^0 PRINT "vielen Spielen" ^0 PRINT "ist eingebaut! Wozu, glaubt ihr, sollte man die Joysticks und "; ^0 PRINT "Joypads sonst" ^0 PRINT "brauchen, auer zur Unterhaltung der Besatzungsmitglieder?" ^0 END IF ^0 CASE "3" ^0 PRINT "Ein riesiges Fenster, das den Blick zu dem, was sich auerhalb "; ^0 PRINT "des Shuttles" ^0 PRINT "befindet, gewhrt! He, Moment mal! Da drauen sind auch Zahra "; ^0 PRINT "und Gerhard!" ^0 CASE "4" ^0 PRINT "DEN TEPPICH ANSCHAUEN? Wie geht das, wenn hier gar kein "; ^0 PRINT "Teppich ist?" ^0 CASE ELSE ^0 GOTO KreRetry2 ^0 END SELECT ^0 CASE "3" ^0KreRetry3: ^0 PRINT "Was willst du nehmen?" ^0 PRINT " (1) Teppich" ^0 PRINT " (2) Steuerpult" ^0 PRINT " (3) Joystick" ^0 e1$ = INPUT$(1) ^0 CLS ^0 SELECT CASE e1$ ^0 CASE "1" ^0 PRINT "DEN TEPPICH NEHMEN? Wie geht das, wenn hier gar kein Teppich ist?" ^0 CASE "2" ^0 PRINT "Ein bichen zu schwer, was? Ja, ein bichen viel zu schwer!" ^0 CASE "3" ^0 IF Joystick < 2 THEN ^0 PRINT "Du reit einen der vielen Joysticks aus dem Steuerpult heraus "; ^0 PRINT "und steckst ihn" ^0 PRINT "in die Tasche. Vielleicht kannst du ihn einmal brauchen?" ^0 Joystick = 2 ^0 ELSE ^0 PRINT "Du hast schon einen!" ^0 END IF ^0 CASE ELSE ^0 GOTO KreRetry3 ^0 END SELECT ^0 CASE "4" ^0KreRetry4: ^0 PRINT "Wohin willst du gehen?" ^0 PRINT " (1) Tr" ^0 e1$ = INPUT$(1) ^0 CLS ^0 IF e1$ <> "1" THEN ^0 GOTO KreRetry4 ^0 END IF ^0 GOTO HaupthalleStart ^0 CASE ELSE ^0 GOTO KommandoraumStart ^0 END SELECT ^0 a$ = INPUT$(1) ^0 GOTO KommandoraumStart ^0OffizierszimmerStart: ^0 CLS ^0 PRINT "Du befindest dich im Offizierskasino. Hier befinden sich die drei "; ^0 PRINT "Offiziere " ^0 PRINT "Franzi, Philipp und Stefan. Sie spielen gerade ein Schachspiel auf "; ^0 PRINT "ihrem " ^0 PRINT "Computer. (Knnen sie berhaupt Schach spielen!?)" ^0 GOSUB Eingabe ^0 CLS ^0 SELECT CASE eingab$ ^0 CASE "1" ^0OzeRetry1: ^0 PRINT "Mit wem willst du sprechen?" ^0 PRINT " (1) Stefan" ^0 PRINT " (2) Franzi" ^0 PRINT " (3) Philipp" ^0 e1$ = INPUT$(1) ^0 CLS ^0 SELECT CASE e1$ ^0 CASE "1" ^0 PRINT "Stefan: 'Hmmm, soll ich meinen Knig opfern, um die Dame zu "; ^0 PRINT "retten?'" ^0 CASE "2" ^0 IF Joystick = 0 THEN ^0 PRINT "Franzi: 'Stefan, Philipp, seid nicht so gemein! Lat mich "; ^0 PRINT "auch mitspielen!'" ^0 PRINT "Philipp: 'Dann bruchten wir aber noch einen dritten Joystick, "; ^0 PRINT "und den haben" ^0 PRINT " wir nicht!'" ^0 END IF ^0 IF Joystick = 5 THEN ^0 PRINT "Franzi: 'Bitte, gib mir die Tte!'" ^0 PRINT "Clausi: 'Die Tte gebe ich dir nicht!'" ^0 PRINT "Franzi: 'Wie ich schon sagte: Der Code heit oben, rechts, "; ^0 PRINT "unten, links, oben" ^0 PRINT " oder umgekehrt!'" ^0 END IF ^0 IF Joystick > 2 AND Joystick < 5 AND MitNeleGeredet <> 1 THEN ^0 PRINT "Franzi: 'Vielen Dank fr den Joystick, Clausi!'" ^0 PRINT "Clausi: 'Gern geschehen!'" ^0 END IF ^0 IF Joystick = 4 AND MitNeleGeredet = 1 THEN ^0 PRINT "Clausi: 'Hey, Fratzi, wie wre es mit dieser original "; ^0 PRINT "philippinischen " ^0 PRINT " Plastiktte? Sie ist von Philipps Bett "; ^0 PRINT "hinuntergefallen!'" ^0 PRINT "Franzi: 'Wirklich? Ein Gegenstand ist immer fr ein Gercht "; ^0 PRINT "gut! Gib her!'" ^0 PRINT "Clausi: 'Zuerst sagst du mir den Code!'" ^0 PRINT "Franzi: 'Na gut. Oben, rechts, unten, links, oben ... oder "; ^0 PRINT "umgekehrt?'" ^0 PRINT "Clausi: 'Du bist ja eine schne Hilfe! Dafr bekommst du die "; ^0 PRINT "Tte nicht!'" ^0 Joystick = 5 ^0 END IF ^0 IF Joystick > 2 AND Joystick < 5 AND MitNeleGeredet = 1 THEN ^0 PRINT "Clausi: 'Hey, Fratzi, weit du, wie man den Autopiloten "; ^0 PRINT "aktiviert?'" ^0 PRINT "Franzi: 'Nein! Aber ich habe die Bedienungsanleitung!'" ^0 PRINT "Clausi: 'Gib sie her!'" ^0 PRINT "Franzi: 'Hm... eigentlich sollte ich sie dir geben, denn du "; ^0 PRINT "bist erstens mein" ^0 PRINT " Kommandant und zweitens hattest du mir den Joystick "; ^0 PRINT "vorhin gegeben." ^0 PRINT " Trotzdem: Ich gebe dir die Anleitung nur, wenn du mir "; ^0 PRINT "noch ein" ^0 PRINT " Geschenk machst! Mache mich zum Kommandanten!'" ^0 PRINT "Clausi: 'Das mache ich nicht!'" ^0 PRINT "Franzi: 'Dann mache etwas anderes!'" ^0 Joystick = 4 ^0 END IF ^0 IF Joystick = 2 THEN ^0 PRINT "Franzi: 'Komm, Philipp, la mich endlich mitspielen!'" ^0 PRINT "Philipp: 'Wie oft soll ich es dir noch sagen: Dazu brauchen "; ^0 PRINT "wir einen dritten" ^0 PRINT " Joystick!'" ^0 PRINT "Clausi: 'Wie diesen hier, den ich in meiner Hand halte?'" ^0 PRINT "Philipp: 'Ja, genau einen wie den! Gib ihn her!'" ^0 PRINT "Clausi: 'Hier.'" ^0 PRINT "Franzi: 'Danke, Clausi! Du bist mein bester Freund!'" ^0 Joystick = 3 ^0 END IF ^0 CASE "3" ^0 PRINT "Philipp: 'Schach ist ein wahrhaft lustiges Spiel! Wenn ich es "; ^0 PRINT "blo spielen" ^0 PRINT " knnte...'" ^0 CASE ELSE ^0 GOTO OzeRetry1 ^0 END SELECT ^0 CASE "2" ^0OzeRetry2: ^0 PRINT "Was willst du betrachten?" ^0 PRINT " (1) Schachcomputer" ^0 PRINT " (2) Franzi" ^0 PRINT " (3) Philipp" ^0 PRINT " (4) Stefan" ^0 e1$ = INPUT$(1) ^0 CLS ^0 SELECT CASE e1$ ^0 CASE "1" ^0 PRINT "Ein riesengroer Computer, mit dem man nur Schach spielen "; ^0 PRINT "kann, dafr aber" ^0 PRINT "zu dritt!" ^0 CASE "2" ^0 PRINT "Dieser Junge nennt sich Franzi und ist erster Offizier. Seine "; ^0 PRINT "Spitznamen sind" ^0 PRINT "Fratzi, Intrigator und FBI. Letzteres bedeutet 'Flotter "; ^0 PRINT "blonder Insulaner'." ^0 PRINT "Naja, Marius, der diesen Spitznamen erfunden hatte, meinte mit "; ^0 PRINT "dem 'I' etwas" ^0 PRINT "anderes, aber wir wollen ja nicht frech sein." ^0 CASE "3" ^0 PRINT "Dieser Junge nennt sich Philipp und ist zweiter Offizier. Er "; ^0 PRINT "haut auf die" ^0 PRINT "Drums wie die anderen auf ihre lieben Mitschler." ^0 CASE "4" ^0 PRINT "Dieser Junge nennt sich Stefan und ist dritter Offizier. Wie "; ^0 PRINT "man es auch an" ^0 PRINT "einer zweiten Stelle in diesem Spiel erfahren kann, nennt sich "; ^0 PRINT "dieses Genie" ^0 PRINT "auch Stex Mel. Eine seiner berhmtesten, vielzitierten "; ^0 PRINT "Aussagen: 'Philosophie" ^0 PRINT "ist nichts anderes als eine Mischung aus Poesie und Dichtung.'" ^0 CASE ELSE ^0 GOTO OzeRetry2 ^0 END SELECT ^0 CASE "3" ^0OzeRetry3: ^0 PRINT "Was willst du nehmen?" ^0 PRINT " (1) Schachcomputer" ^0 PRINT " (2) Philipp's Joystick" ^0 PRINT " (3) Franzi" ^0 e1$ = INPUT$(1) ^0 CLS ^0 SELECT CASE e1$ ^0 CASE "1" ^0 PRINT "Du hast doch zu Hause selber einen 'rumstehen!" ^0 CASE "2" ^0 PRINT "Den gibt er nicht her!" ^0 CASE "3" ^0 PRINT "Clausi: 'Fratzi, la mich dich in meine Arme nehmen!'" ^0 PRINT "Franzi: 'Du willst mich wohl AUF den Arm nehmen!?'" ^0 CASE ELSE ^0 GOTO OzeRetry3 ^0 END SELECT ^0 CASE "4" ^0 PRINT "Wohin willst du gehen?" ^0 PRINT " (1) Tr" ^0OzeRetry4: ^0 e1$ = INPUT$(1) ^0 IF e1$ <> "1" THEN ^0 GOTO OzeRetry4 ^0 END IF ^0 GOTO HaupthalleStart ^0 CASE ELSE ^0 GOTO OffizierszimmerStart ^0 END SELECT ^0 a$ = INPUT$(1) ^0 GOTO OffizierszimmerStart ^0Eingabe: ^0 PRINT " (1) Sprich" ^0 PRINT " (2) Betrachte" ^0 PRINT " (3) Nimm" ^0 PRINT " (4) Gehe zu" ^0 PRINT " (5) Ende" ^0 eingab$ = INPUT$(1) ^0 IF eingab$ = "5" THEN ^0 END ^0 END IF ^0RETURN "Das soll ein kleines Beispiel sein?" wird sich so mancher jetzt fragen. Ja, mit seinen 443 Zeilen, die gut 14 KB Speicherplatz belegen, ist dieses Beispielprogramm schon sehr gro. Aber fr ein voll funktionsfhiges Adventure mit allem Drum und Dran bis auf Grafik, Maussteuerung und Sound ist es gerade- zu winzig! ^4(Anm. von "Adok heute": Professioneller, einfacher und WESENTLICH krzer ist ^4es, einen eigenen kleinen Interpreter fr Adventures zu coden. Fragt mal ^4Muffin, fr den habe ich eine Minimalform von so etwas schon einmal gemacht.) Zu dem Beispielprogramm noch einige Erluterungen: ^1- ^4Joystick, MitNeleGeredet etc^5. sind Variablen, in denen gespeichert wird, wie weit man im Spiel fortgeschritten ist, was man schon alles gemacht hat usw. Wenn ich schon frher gewut htte, da 'Die Reise zum Mond' in einem Kurs verffentlicht wird, htte ich es eindeutiger und bersichtlicher gemacht. ^1- ^5Der Befehl ^4GOSUB^5 entspricht von der Verwendung her im groen und ganzen GOTO, nur wird, wenn QBasic auf ^4RETURN^5 stt, zu der Zeile, in der GOSUB steht, zurckgesprungen. So, ich hoffe, da ihr eine Menge aus dieser Folge gelernt habt. ^0(Noch eine Anmerkung: Sodele, htte ich diesen Kurs heutzutage geschrieben, ^0htte ich nicht eine ganze Folge fr blde Adventures gewidmet. Deshalb habe ^0ich mich entschlossen, in diesem Hugi auch gleich die nchste Folge zu ver- ^0ffentlichen. Und da diese von Grafikprogrammierung handelt, sich also mit ^0Karma Sutra's Kurs berschneidet... :) gibt's gleich Folge 8 als Draufschlag.)