| Geschrieben um 13:13 am 17.08.2013 | Zitat | Editieren | Löschen | |
Mitglied Master Gumby Beiträge: 107 | Wieder eine aktuelle Frage aus meinem Projekt: Wie erstellt ihr nicht offensichtliche Objekte?
Irgendwie alles nicht optimal… |
| Geschrieben um 13:45 am 18.08.2013 | Zitat | Editieren | Löschen | |
Mitglied Retired Gumby Beiträge: 681 | <td valign="top"><div class="post"><p>Ich empfehle eine Kombination aus describe und moved:</p> <p>“`Object secret</p> <p> describe [;</p> <p> if (secret hasnt moved)</p> <p> rtrue;</p> <p> ];</p> <p>Object cover</p> <p> description [;</p> <p> print “Eine schoene Decke”;</p> <p> if (secret hasnt moved)</p> <p> print “. Darunter entdeckst du das Geheimnis”;</p> <p> “.”;</p> <p> ];“`</p> <p>Sobald es einmal aufgehoben wurde, bekommt es automatisch “moved” und wird dann regulaer gelistet, dafuer nicht mehr in der Beschreibung der Decke.</p> </div></td> |
| Geschrieben um 14:08 am 18.08.2013 | Zitat | Editieren | Löschen | |
Mitglied Retired Gumby Beiträge: 1062 | <td valign="top"><div class="post"><p>Ich habe nicht genau verstanden, was du erreichen möchtest. Ich vermute, es geht dir darum, ein Objekt, solange es noch nicht bewegt wurde, aus der Raumbeschreibung rauszuhalten, aber für den Parser sichtbar zu halten, ohne dass das Objekt die Attribute scenery oder concealed besitzt.</p> <p>Im folgenden Beispiel wird eine Klasse HiddenObject definiert, die sich von normalen Objekten lediglich dadurch unterscheidet, dass sie eine Dummy-Initial-Property besitzt. Zusätzlich habe ich die Routine Locale() ersetzt und dort die Behandlung der Ausgabe der Initial-Property für Objekte der Klasse HiddenObject angepasst.</p> <p>Im Beispiel ist der Fernseher ein HiddenObject. Er wird in der Raumbeschreibung nicht erwähnt, solange er noch nicht bewegt wurde.</p> <p>Das Beispiel sieht wuchtiger aus, als es ist, denn die ersetzte Routine Locale() ist so lang. Dabei geht es nur um wenige Zeilen, die geändert wurden.</p> <p>“`Constant Story “Testspiel”;</p> <p>Constant Headline “^Ein interaktiver Probelauf^”;</p> <p>Include “Parser”;</p> <p>Class HiddenObject</p> <p> with initial [; rtrue; ];</p> <p>Replace Locale;</p> <p>Include “VerbLib”;</p> <p>[ Locale descin text1 text2 case o k p j f2 flag;</p> <p> objectloop (o in descin) give o ~workflag;</p> <p> k=0;</p> <p> objectloop (o in descin)</p> <p> if (o hasnt concealed && NotSupportingThePlayer(o)) {</p> <p> #Ifndef MANUAL_PRONOUNS;</p> <p> PronounNotice(o);</p> <p> #Endif;</p> <p> if (o hasnt scenery) {</p> <p> give o workflag; k++;</p> <p> p = initial; f2 = 0;</p> <p> if ((o has door || o has container) && o has open && o provides when_open) {</p> <p> p = when<em>open; f2 = 1; jump Prop</em>Chosen;</p> <p> }</p> <p> if ((o has door || o has container) && o hasnt open && o provides when_closed) {</p> <p> p = when<em>closed; f2 = 1; jump Prop</em>Chosen;</p> <p> }</p> <p> if (o has switchable && o has on && o provides when_on) {</p> <p> p = when<em>on; f2 = 1; jump Prop</em>Chosen;</p> <p> }</p> <p> if (o has switchable && o hasnt on && o provides when_off) {</p> <p> p = when_off; f2 = 1;</p> <p> }</p> <p> .Prop_Chosen;</p> <p> if (o hasnt moved || o.&describe ~= 0 || f2 == 1) {</p> <p> if (o.&describe ~= 0 && RunRoutines(o, describe) ~= 0) {</p> <p> flag = 1;</p> <p> give o ~workflag; k—;</p> <p> }</p> <p> else {</p> <p> j = o.p;</p> <p> if (j ~= 0) {</p> <p> !!! Diese Abfrage ist neu!!!</p> <p> if (o ofclass HiddenObject) {</p> <p> print “”;</p> <p> } else {</p> <p> new_line;</p> <p> PrintOrRun(o, p);</p> <p> }</p> <p> flag = 1;</p> <p> give o ~workflag; k—;</p> <p> if (o has supporter && child(o) ~= 0) SayWhatsOn(o);</p> <p> }</p> <p> }</p> <p> }</p> <p> }</p> <p> else</p> <p> if (o has supporter && child(o) ~= 0) SayWhatsOn(o);</p> <p> }</p> <p> if (k == 0) return 0;</p> <p> if (text1 ~= 0) {</p> <p> new_line;</p> <p> if (flag == 1) text1 = text2;</p> <p> print (string) text1, ” “;</p> <p> WriteListFrom(child(descin),</p> <p> ENGLISH<em>BIT + RECURSE</em>BIT + PARTINV<em>BIT + TERSE</em>BIT + CONCEAL_BIT</p> <p> + WORKFLAG_BIT, case);</p> <p> return k;</p> <p> }</p> <p> if (flag == 1) L__M(##Look, 5, descin);</p> <p> else L__M(##Look, 6, descin);</p> <p>];</p> <p>Class Tasse</p> <p> with name ‘tasse’ ‘tassen//p’ ‘becher’ ‘m.’,</p> <p> plural “Tassen”,</p> <p> has female</p> <p> ;</p> <p> </p> <p>Object Testraum “Testraum”</p> <p> with </p> <p> description “Hier wird getestet.”,</p> <p> has light;</p> <p>Object -> Bistrotisch “Bistrotisch”</p> <p> with name ‘bistrotisch’ ‘tisch’ ‘tischchen’ ‘n.’ ‘bistrotischchen’ ‘n.’,</p> <p> has male supporter;</p> <p> </p> <p>Tasse ->-> “Tasse”;</p> <p>Tasse ->-> “Tasse”;</p> <p>Tasse ->-> “Tasse”;</p> <p>Tasse ->-> Espressotasse “Espressotasse”</p> <p> with name ‘espressotasse’</p> <p> ;</p> <p> </p> <p>Object ->->-> Kaffee “Kaffee”</p> <p> with name ‘eklig’ ‘kaffee’ ‘espresso’ ‘bruehe’ ‘f.’,</p> <p> article “etwas”,</p> <p> has male;</p> <p> </p> <p>Object -> Fussboden “Fußboden”</p> <p> with name ‘fussboden’ ‘boden’,</p> <p> has male scenery;</p> <p>HiddenObject -> Fernseher “Fernseher”</p> <p> with name ‘fernseher’ ‘tv’,</p> <p> description “Ein neuer Fernseher …”,</p> <p> kanal 3,</p> <p> has male switchable;</p> <p>[ Initialise;</p> <p> location = Testraum;</p> <p> print “^^^”;</p> <p>];</p> <p>Include “GermanG”;“`</p> <p>Das ist vielleicht etwas weniger fehleranfällig als das jonglieren mit concealed und scenery.</p> </div></td> |