Forum moved to if-forum.org
Autor Nachricht
<  I6: Nicht offensichtliche Objekte...
Mischa
BeitragVerfasst am: Sa, 17 Aug 2013 - 12:13  Antworten mit Zitat
Abenteurer
Abenteurer


Anmeldungsdatum: 05.03.2008
Beiträge: 285
Wohnort: Wien

Wieder eine aktuelle Frage aus meinem Projekt:

Wie erstellt ihr nicht offensichtliche Objekte?

  1. Wenn man sie als scenery erstellt, kann man sie nicht mitnehmen.
  2. Wenn man sie mit dem Attribut concealed erstellt, muss man ihnen das entweder beim Aufheben oder beim erneuten Ablegen wegnehmen, da sie sonst in Raumbeschreibungen nicht vorkommen.
  3. Oder man nimmt den Objekten das concealed Attribut nicht weg und sieht in jeder Raumbeschreibung einen Absatz vor, der das Objekt beschreibt, falls es gerade im Raum liegt.

Irgendwie alles nicht optimal...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hannes
BeitragVerfasst am: So, 18 Aug 2013 - 12:45  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.03.2010
Beiträge: 660

Ich empfehle eine Kombination aus describe und moved:
Code:
Object secret
    describe [;
        if (secret hasnt moved)
            rtrue;
    ];
Object cover
    description [;
        print "Eine schoene Decke";
        if (secret hasnt moved)
            print ". Darunter entdeckst du das Geheimnis";
        ".";
    ];

Sobald es einmal aufgehoben wurde, bekommt es automatisch "moved" und wird dann regulaer gelistet, dafuer nicht mehr in der Beschreibung der Decke.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ChristianB
BeitragVerfasst am: So, 18 Aug 2013 - 13:08  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

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.

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.

Im Beispiel ist der Fernseher ein HiddenObject. Er wird in der Raumbeschreibung nicht erwähnt, solange er noch nicht bewegt wurde.

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.

Code:
Constant Story "Testspiel";
Constant Headline "^Ein interaktiver Probelauf^";

Include "Parser";

Class HiddenObject
    with initial [; rtrue; ];

Replace Locale;

Include "VerbLib";

[ Locale descin text1 text2 case    o k p j f2 flag;
    objectloop (o in descin) give o ~workflag;
    k=0;
    objectloop (o in descin)
        if (o hasnt concealed && NotSupportingThePlayer(o)) {
            #Ifndef MANUAL_PRONOUNS;
            PronounNotice(o);
            #Endif;
            if (o hasnt scenery) {
                give o workflag; k++;
                p = initial; f2 = 0;
                if ((o has door || o has container) && o has open && o provides when_open) {
                    p = when_open; f2 = 1; jump Prop_Chosen;
                }
                if ((o has door || o has container) && o hasnt open && o provides when_closed) {
                    p = when_closed; f2 = 1; jump Prop_Chosen;
                }
                if (o has switchable && o has on && o provides when_on) {
                    p = when_on; f2 = 1; jump Prop_Chosen;
                }
                if (o has switchable && o hasnt on && o provides when_off) {
                    p = when_off; f2 = 1;
                }

              .Prop_Chosen;

                if (o hasnt moved || o.&describe ~= 0 || f2 == 1) {
                    if (o.&describe ~= 0 && RunRoutines(o, describe) ~= 0) {
                        flag = 1;
                        give o ~workflag; k--;
                    }
                    else {
                      j = o.p;
                        if (j ~= 0) {
                            !!! Diese Abfrage ist neu!!!
                            if (o ofclass HiddenObject) {
                                print "";
                            } else {
                                new_line;
                                PrintOrRun(o, p);
                            }
                            flag = 1;
                            give o ~workflag; k--;
                            if (o has supporter && child(o) ~= 0) SayWhatsOn(o);
                        }
                    }
                }
            }
            else
                if (o has supporter && child(o) ~= 0) SayWhatsOn(o);
        }

    if (k == 0) return 0;

    if (text1 ~= 0) {
        new_line;
        if (flag == 1) text1 = text2;
        print (string) text1, " ";
        WriteListFrom(child(descin),
          ENGLISH_BIT + RECURSE_BIT + PARTINV_BIT + TERSE_BIT + CONCEAL_BIT
          + WORKFLAG_BIT, case);
        return k;
    }

    if (flag == 1) L__M(##Look, 5, descin);
    else           L__M(##Look, 6, descin);
];

Class Tasse
  with  name 'tasse' 'tassen//p' 'becher' 'm.',
        plural "Tassen",
   has  female
   ;
   
Object Testraum "Testraum"
  with 
    description "Hier wird getestet.",
  has light;

Object -> Bistrotisch "Bistrotisch"
  with  name 'bistrotisch' 'tisch' 'tischchen' 'n.' 'bistrotischchen' 'n.',
   has  male supporter;
   
Tasse ->-> "Tasse";
Tasse ->-> "Tasse";
Tasse ->-> "Tasse";

Tasse ->-> Espressotasse "Espressotasse"
  with  name 'espressotasse'
  ;
 
Object ->->-> Kaffee "Kaffee"
  with  name 'eklig' 'kaffee' 'espresso' 'bruehe' 'f.',
        article "etwas",
   has  male;
       
Object -> Fussboden "Fußboden"
  with  name 'fussboden' 'boden',
   has  male scenery;

HiddenObject -> Fernseher "Fernseher"
  with  name 'fernseher' 'tv',
        description "Ein neuer Fernseher ...",
        kanal 3,
   has  male switchable;

[ Initialise;
    location = Testraum;
    print "^^^";
];

Include "GermanG";


Das ist vielleicht etwas weniger fehleranfällig als das jonglieren mit concealed und scenery.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Alle Zeiten sind GMT + 1 Stunde (MEZ)

Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Seite 1 von 1
if-de :: Forum Foren-Übersicht  >  Inform & Glulx

Neues Thema eröffnen   Neue Antwort erstellen


 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.



Kontakt: Administrator

Powered by phpBB and NoseBleed v1.05