/* ---------------------------------------------------------------- IF Guru des Monats #1 : ** ---------------------------------------------------------------- Dein Vater hat dich in den Keller eingesperrt, in dem es zu dunkel ist, um den Brief zu lesen, den dir deine Freundin geschrieben hat. Es sei denn, Du findest den kleinen Schlüssel zu der Truhe, in der die Taschenlampe versteckt ist. Die Truhe ist verschlossen und der Schlüssel ist dir runtergefallen, als dein Vater dich in den Keller geschubst hat. Da es dunkel ist, tastest Du den Boden nach dem Schlüssel ab... Es soll also ein Raum implementiert werden, in dem es zu dunkel ist, um einen Brief zu lesen, in dem man aber sehr wohl die 'normalen' Dinge tun kann. Nur kleine Dinge, wie der Schlüssel sind nicht zu sehen. Folgende Dinge müssen sich also im Raum befinden: Brief, Taschenlampe (in der Truhe), Truhe (verschlossen), kleiner Schlüssel. ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- Wichtig! Beim Programmieren dieser Lösung ist mir ein Fehler in der TAM aufgefallen, durch den Objekte, die außer Sicht sind in der Raumbeschreibung auftauchen. Das habe ich in der aktuellen TAM (11.08.2002) geändert, das heißt aber auch, dass diese Beispiel mit älteren TAM nicht funktioniert. Räume, in denen man nicht alles sehen kann, bekommen das Attribut 'halbdunkel', Gegenstände, die man in halbdunklen Räumen nicht sehen kann, sind 'klein'. Der 'Halbdunkelcheck' prüft, ob der Raum tatsächlich halbdunkel ist oder ob es eine Lichtquelle gibt. Da TAG keine Rückgebewerte kannt, muss hier die Systemvariable 'NullAkt' abgefragt werden. ---------------------------------------------------------------- */ #DAT 'normal.adv' RaumAttr halbdunkel ObjAttr klein Aktion Halbdunkelcheck Ausf lokal x loesche x wenn (aRaum halbdunkel) dann attrHin aRaum dunkel wenn /(Licht_in aRaum) setze x attrWeg aRaum dunkel Ende wenn (x) Stop EndeAusf Raum Keller Name 'Dunkler Keller' Besch 'Dieser ungemütliche dunkle Keller ist von den dir verhassten Räumen im Haus der, den du am meisten hasst. Nicht einmal elektrisches Licht hat er. Nur durch den Lichtschacht fällt trübes Licht hinein. Die Tür im Norden ist verschlossen.' Attr halbdunkel Obj Brief Name 'Brief' m Subst 'brief' m Besch 'Ein Brief von deiner Freundin.' Text '"Lieber [text "n" meinName], Du bist mir fremd geworden. Was ist aus dem lebenslustigen Jungen geworden, den ich geliebt habe? Seit einiger Zeit treibst Du dich nun in halbdunklen Kellern herum, suchst nach Taschenlampen und Schlüsseln, und ich glaube, der Brief, den Du gerade in Deinen Händen hältst, gehört auch nur zu diesem %Spiel%. Ich verstehe Dich nicht, und deshalb muss ich Dir in der einzigen Sprache, die du verstehst sagen: AttrWeg [text "n" meinName] geliebt[x] ObjAusserSicht [text "n" ihrName]"' Ort beimir VorAusf (lesen) Ausf Halbdunkelcheck Bed (NullAkt = 0) 'In diesem Halbdunkel kannst Du den Brief nicht lesen.' EndeAusf NachAusf (lesen) Puffer Text '[#]Eine Träne rollt dir über die Wange, als du dich niedergeschmettert auf der Truhe niederlässt. *** [f]Du hast verloren![n] ***' gestorben EndeAusf Obj Kl_Schlüssel Name 'klein^ Schlüssel' m Adj 'klein' Subst 'schlüssel' m Attr klein Schlüssel Öffnet Truhe Ort Keller VorAusf (suchen) Wenn /(selbst hier) und (selbst in aRaum) dann Ausf betasten Boden Stop Ende EndeAusf Obj Münze Name 'Münze' f Vor 'kronen' Subst 'münze' f 'krone' f 'geldstück' n Ort Keller Attr klein Text 'Eine Krone.' Obj Taschenbuch Name 'Taschenbuch' n Adj 'klein' Vor 'taschen' Subst 'buch' n 'büchlein' n Ort Keller Attr klein Text 'Frankz Kafka, "Die Verwandlung"' Obj Truhe Name 'Truhe' f Subst 'truhe' f Attr Behälter immobil Ort Keller Zust abgeschlossen Besch Ausf Text 'Eine hölzerne Truhe. Sie ist [selbst.Zust].' wenn (selbst abgeschlossen) und /(Kl_Schlüssel bewegt) Text 'Der Schlüssel zur Truhe ist dir auf den Boden gefallen, als dein Vater dich in den Keller gestossen hat.' EndeAusf Obj Taschenlampe Name 'Taschenlampe' f Vor 'taschen' Subst 'lampe' f Attr Licht Zust aus Ort in Truhe Deko Boden Name 'Boden' m Subst 'boden' m 'erde' f 'fussboden' m Ort besucht ! d.h. in jedem Raum Besch 'Du stehst drauf' VorAusf (betasten) Wenn (aRaum = Keller) dann lokale ObjVar xObj Ausf Halbdunkelcheck Bed /(NullAkt = 0) 'Wieso? Du siehst doch alles.' Schleife xObj (xObj in Keller) und (xObj klein) Text 'Du tastest den Boden ab und findest schliesslich [einen xObj].' ObjNach xObj beiMir Stop Ende Text 'Du tastest den Boden ab, findest aber nichts.' Ende EndeAusf Deko Kellertür Name 'Tür' f Vor 'keller' Subst 'tür' f Ort Keller Zust abgeschlossen Aktion Vorher Ausf lokal ObjVar xObj lokale RaumVar xRaum wenn (aRaum halbdunkel) dann Schleife xObj Ausf Halbdunkelcheck wenn (NullAkt = 1) dann Stammraum xRaum xObj wenn (xRaum = aRaum) und (xObj klein) dann ObjAußerSicht xObj Ende Ende Ende Ende lösche nullAkt EndeAusf Aktion SichtUndRW Ausf lokale RaumVar xRaum wenn (aRaum halbdunkel) dann Ausf Halbdunkelcheck wenn (NullAkt = 1) dann Stammraum xRaum iObj wenn (xRaum = aRaum) und (iObj klein) dann ObjAusserSicht iObj Ende Ende Ende EndeAusf Flagge meinName Flagge ihrName Aktion Anfang Ausf Text '[f]E I N G U R U I M K E L L E R[n] [x]Ein interaktiver Lösungsvorschlag, 2002 Martin Oehm The light is gone. It must be brought. You have a letter.[#]' GeheZu Keller Zufall meinName 1 8 Zufall ihrName 11 18 EndeAusf Bef suchen Name 'suchen' Verb 'suche' Syntax dasObj (Allg) Ausf Bed (aObj hier) 'Du hast keine Ahnung, wo [der aObj] sein [könnte/könnten] und wo du mit dem Suchen anfangen sollst.' Text '[Der aObj] [ist] hier.' EndeAusf Bef suchen_nach Name 'suchen' Verb 'suche' 'schaue' Syntax 'nach' demObj (Allg) Ausf suchen Bef betasten Name 'betasten' Verb 'taste' 'betaste' 'befühle' 'taste ab' 'fühle ab' Syntax dasObj Ausf Text 'Du fühlst nichts Unerwartetes.' EndeAusf Aktion PostMortem Ausf Text '[x][[Bitte die Leertaste drücken]]' Tastendruck ProgrammEnde EndeAusf Block "n" 1 'Martin/' 2 'Max/' 3 'Michael/' 4 'Matthias/' 5 'Markus/' 6 'Manfred/' 7 'Mario/' 8 'Marius/' 11 'Angelika/' 12 'Anna/' 13 'Annette/' 14 'Amalie/' 15 'Amanda/' 16 'Andrea/' 17 'Angela/' 18 'Alexandra/'