IF-Forum

» IF-Forum - Autorencafé - Schreiben! - Inhalt von Behaeltern NICHT in Raumbeschreibung anzeigen
AntwortenNeues ThemaNeue Umfrage

Inhalt von Behaeltern NICHT in Raumbeschreibung anzeigen

Geschrieben um 06:58 am 05.08.2006 | Zitat | Editieren | Löschen
RobinOsaka
Mitglied
Student Gumby
Beiträge: 28

Hatten wir das schon einmal? Ich habe das Forum durchsucht, aber nichts gefunden.

Ich moechte den Inhalt eines offenen Behaelters nicht in der Raumbeschreibung sehen. Zum Beispiel das Wasser in einer Blumenvase oder ein Portmonee in einer Hosentasche.

Man kann die Anzeige des Inhalts unterdruecken, in dem man den Behaelter schliesst - macht bei einer Vase oder Hosentasche aber keinen Sinn.

Man kann den Inhalt eines geschlossenen Behaelters anzeigen, indem man ihn 'transparent' macht - hier brauche ich aber das Gegenteil.

Der Inhalt soll nur in der Beschreibung des Behaelters auftauchen. Und er muss natuerlich "tatsaechlich" drin sein, damit Befehle wie 'ausschuetten' etc funktionieren.

Geschrieben um 18:20 am 06.08.2006 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Mut zum Mogeln! Zum Beispiel so:



Name    'Wohnzimmer'

Besch   'Deine Möbel sind schon alle abtransportiert

        worden und die Wände sind kahl.'

 

       

/*  Das Attribut kein_Inhalt kann transparenten oder

    auch nicht-transparenten Behältern

    gegeben werden, deren Inhalt in der Raumbeschreibung

    nicht angezeigt werden soll.

*/

ObjAttr kein_Inhalt

! Zwei Hilfs-Attribute

ObjAttr offenflag

ObjAttr transpflag

Obj     Vase

Name    'Blumenvase' f

Vor     'blumen'

Subst   'vase' f

Attr    kein_Inhalt Behälter transparent

Zust    offen

Vol     10

Ort     Wohnzimmer

Obj     Fliege

Name    'tot^ Fliege' f

Adj     'tot'

Subst   'fliege' f  'insekt' n

Ort     in Vase

/*  Der Standard-Befehl lage wird um einen VorAusf-Block erweitert,

    in denen die Objekte, die das Attribut kein_Inhalt

    besitzen, für einen Zug lang geschlossen

    und ggf. undurchsichtig gemacht werden.

   

    Nach Ausführung von lage werden die kein_Inhalt-Objekte

    in ihren Urzustand zurückversetzt.

*/

Bef     lage

VorAusf

    lokale ObjVar xObj

   

    Schleife xObj (xObj kein_Inhalt) und (xObj hier)

        Wenn (xObj offen) dann

            ObjZust xObj geschlossen

            AttrHin xObj offenflag

        Ende

        Wenn (xObj transparent) dann

            AttrWeg xObj transparent

            AttrHin xObj transpflag

        Ende

    Ende

EndeAusf

NachAusf

    lokale ObjVar xObj

    Schleife xObj (xObj kein_Inhalt) und (xObj hier)

        Wenn (xObj offenflag) dann

            ObjZust xObj offen

            AttrWeg xObj offenflag

        Ende

        Wenn (xObj transpflag) dann

            AttrHin xObj transparent

            AttrWeg xObj transpflag

        Ende

    Ende

EndeAusf```

[Edit: Nicht die Fliege, sondern die Vase sollte in dem Beispiel transparent sein; ist oben geändert.]
Geschrieben um 01:52 am 07.08.2006 | Zitat | Editieren | Löschen
RobinOsaka
Mitglied
Student Gumby
Beiträge: 28

Lol, danke ChristianB!

Muss mich mit den Schleifen mal naeher beschaeftigen...

Geschrieben um 06:08 am 20.08.2006 | Zitat | Editieren | Löschen
RobinOsaka
Mitglied
Student Gumby
Beiträge: 28

Ja, das funktioniert. Es gibt aber zwei Probleme.

Mit dem Zustand offen macht man die Vase zu einem Objekt, dass geoeffnet und geschlossen werden kann. Um Meldungen wie "Die Vase ist nun geschlossen" zu vermeiden, muss man den schliessen-Befehl bei der Vase abfangen. Etwas Arbeit.

Objekte koennen nur einen Zustand haben. Wenn man bereits einen Zustand hat (ich habe zum Beispiel leer und voll als Zustaende fuer manche Behaelter), geht deine Loesung nicht mehr.

Geschrieben um 23:25 am 20.08.2006 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

RobinOsaka:

Objekte koennen nur einen Zustand haben. Wenn man bereits einen Zustand hat (ich habe zum Beispiel leer und voll als Zustaende fuer manche Behaelter), geht deine Loesung nicht mehr.

Stimmt. Okay, im ersten Vorschlag wurde die Verdunkelungstaktik angewendet, um die Anzeige des Inhalts zu unterdrücken. Also Schotten dicht und Vorhänge zu. Nachteil: Man ist eben nicht mehr so flexibel mit den Zuständen.

Eine weitere Methode, um keinen Inhalt angezeigt zu bekommen ist, wenn es im Moment der Anzeige gar keinen Inhalt gibt. Eher die Alle-Mann-mal-kurz-ab-in-den-Keller-Taktik. Siehe das Beispiel, das ich HIER hinterlegt habe.

Dort werden vor Ausführung des Befehls lage die anwesenden Objekte, die das Attribut [kein_Inhalt] besitzen bei Bedarf geleert und ihr Inhalt in den Limbo verschoben. Im Datenfeld Limbus werden die ursprünglichen Zugehörigkeiten der Objekte hinterlegt, und nach Ausführung von lage wird die alte Ordnung wieder hergestellt (hoffentlich).

Bei dieser Methode sind die Zustände irrelevant. Das sieht alles ein wenig abenteuerlich aus, nur um an bestimmten Stellen eine Auflistung zu unterdrücken, aber es funktioniert.

Vielleicht kannst du ja was damit anfangen. Viele Grüße, CB.

Geschrieben um 10:14 am 21.08.2006 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634

Du kannst für manche Objekt- und Raumtexte auch Ausführungsblöcke angeben, insbesondere für Name, Erst, Plural und Besch. Und für Darin, der Eigenschaft, mit der man den Text beim Aufzählen für jedes Objekt angeben kann.

So kannst du dann die Inhaltsliste nur dann ausgeben lassen, wenn der momentane Befehl nicht Lage, also nicht das Anzeigen der Raumbeschreibung ist.


Obj Tasse

Name 'Tasse' f

Subst 'tasse' f

Attr Behälter

Ort Garten

Besch 'Eine Sammeltasse. Mit Blümchen.'

Darin Ausf

        wenn /(aBef = Lage) Text 'In der Tasse [ist 0] [liste 0].'

    EndeAusf

Obj Kaffe

Name 'Kaffee' m %etwas

Subst 'kaffee' m

Ort in Tasse

Attr immobil
Geschrieben um 10:47 am 21.08.2006 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Jawoll. Das ist natürlich sehr viel windschnittiger. Haha.

Geschrieben um 14:04 am 21.08.2006 | Zitat | Editieren | Löschen
RobinOsaka
Mitglied
Student Gumby
Beiträge: 28

Jau, Martin, das ist ne gute Loesung. Danke.

ChristianB, dir auch vielen Dank!

AntwortenNeues ThemaNeue Umfrage
Powered by Spam Board SVN © 2007 - 2021
Impressum / Datenschutz