IF-Forum

» IF-Forum - Autorencafé - Schreiben! - Unerreichbares - Geloest!
AntwortenNeues ThemaNeue Umfrage

Unerreichbares - Geloest!

Geschrieben um 18:29 am 16.07.2006 | Zitat | Editieren | Löschen
RobinOsaka
Mitglied
Student Gumby
Beiträge: 28

Ich habe folgende Situation:

Wenn ich einen Baum untersuche, finde ich dort oben eine (meine!) Hose, an die ich aber nicht herankomme. Spaeter, wenn ich sie habe, gibt es fuer das Anziehen einen Punkt.

Das habe ich wie folgt geschrieben:

Deko Baum

Name 'Baum' m

Subst 'baum' m

Vor 'pflaumen'

Ort Garten

NachAusf

(untersuchen)

Wenn (Hose in nirgendwo) dann

ObjNach Hose in Baumwipfel

Text '[x][x]Oben im Baumwipfel haengt etwas... Kleidung?'

Ende

EndeAusf

Besch 'Der Pflaumenbaum steht in der Mitte des Gartens und ist der groesste im Garten. Er laesst sich nicht erklettern und traegt noch keine Fruechte.'

Obj Baumwipfel

Name 'Baumwipfel' m

Subst 'wipfel' m

Vor 'Baum'

Attr Behaelter fest

Ort Garten

Vol 10

VorAusf

(empfangen)

Text 'Das geht nicht.'

Stop

EndeAusf

Obj Hose

Name 'Hose' f

Subst 'hose' f 'jeans' f

Attr Kleidung

Ort nirgendwo

Besch 'Ja, das ist deine Hose, eine dunkelblaue Jeans.'

VorAusf

(anziehen, nehmen)

Wenn (Hose in Baumwipfel) dann

Text 'Du streckst dich und du reckst dich, aber du kommst nicht annaehernd an die Hose heran. Sie haengt einfach zu hoch. Wie sie dorthin gekommen ist, ist dir ein Raetsel.'

Stop

Ende

EndeAusf

NachAusf

(anziehen)

Text 'Du ziehst hastig deine Hose an. Puh, nicht mehr in Unterhosen, so fuehlst du dich etwas wohler.[#][[Du erhaelst 1 Punkt.]]'

Inkr score 1

Ende

EndeAusf

Die mangelhafte Formatierung bitte ich zu entschuldigen.

Irgendwie laeuft das nicht wie gedacht. Wenn ich unter dem Baum stehe und die Hose sich im Baumwipfel befindet und ich sie anziehe, erhalte ich erst die Ausgabe in Klammern, dass ich die Hose nehme, dann die erwuenschte Meldung, dass sie zu hoch haengt, und dann die Meldung "Du hast die Hose nicht" - klar, weil vor Ausziehen automatisch Nehmen ausgefuehrt wird.

  1. Das wuerde ich gerne unterdruecken.

  2. Moechte ich sicher gehen, dass man auch sonst nicht mit der Hose interagieren kann.

Mit Entfernt habe ich schon experimentiert, aber es nicht hinbekommen, dass die gewuenschte Meldung (...reckst und streckst dich, aber...) erscheint. Ist aber das erste Mal, dass ich mit Entfernt und Unerreichbar versucht habe zu arbeiten.

Puh. Lange Frage, Danke fuers Lesen.

Geschrieben um 18:32 am 16.07.2006 | Zitat | Editieren | Löschen
RobinOsaka
Mitglied
Student Gumby
Beiträge: 28

Habe jetzt erst gesehen, dass unter "VorAusf Anziehen" die eigentlich gleiche Frage gestellt wurde. Da gibt es aber auch noch keine Antwort.

Geschrieben um 17:10 am 17.07.2006 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Hallo, RobinOsaka,

hast du schon mit dem Objekt-Attribut [unerreichbar] (anstelle von [entfernt]) herumprobiert? Wie man allerdings das implizite Nehmen elegant abfangen kann, ohne dass der aufrufende Befehl anziehen bis zu Ende ausgeführt wird (das erzeugt die von dir unerwünschte Meldung), das habe ich auch noch nicht herausgefunden.

Ich habe mir mal in einem ähnlichen Fall mit einer sehr uneleganten Lösung beholfen, unelegant deshalb, weil sie ein neues Objekt-Attribut und einen neuen Befehl benötigt – nur um eine kleine Meldung zu unterdrücken. Aber es hat immerhin funktioniert. Auf dein Beispiel angewendet würde das etwa so aussehen:



ObjAttr zuweitweg

Obj     Hose

Name    'Hose' f

Subst   'hose' f 'jeans' f

Attr    Kleidung zuweitweg

Ort     in Baumwipfel

Besch   'Ja, das ist deine Hose, eine dunkelblaue Jeans.'

VorAusf

    (nehmen)

        Wenn (Hose in Baumwipfel)

            Stop 'Du streckst dich und du reckst dich, aber

                  du kommst nicht annähernd an die Hose heran.

                  Sie hängt einfach zu hoch. Wie sie dorthin

                  gekommen ist, ist dir ein Rätsel.'

EndeAusf

Bef anziehen_spezial

Verb 'ziehe an' 'ziehe dir an' 'ziehe mir an'

    ! usw., der Original-Befehl "anziehen"

    ! hat eigentlich noch mehr Verben

Syntax dasObj (Kleidung)

    ! BeiMir wurde im Gegensatz zum Original-Anziehen

    ! weggelassen, um das

    ! implizite Nehmen zu unterdrücken

Ausf

    Wenn (aObj zuweitweg) dann

        Ausf nehmen aObj

    sonst

        Ausf anziehen aObj

    Ende

EndeAusf```

Wenn man die Hose irgendwann mal hat, muss ihr natürlich das Attribut [zuweitweg] genommen werden, klar. Nicht die allerhübscheste Lösung, aber vielleicht bringt dich das weiter.

Viele Grüße, C.
Geschrieben um 04:49 am 19.07.2006 | Zitat | Editieren | Löschen
RobinOsaka
Mitglied
Student Gumby
Beiträge: 28

Danke fuer die Antwort.

Ein ObjAttr zu benutzen hatte ich auch versucht, das klappt. Entfernt und Unerreichbar verstehe ich nicht gut, damit muss ich mal mehr experimentieren.

Nochmal Danke!

Geschrieben um 08:49 am 19.07.2006 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634

RobinOsaka:

Irgendwie laeuft das nicht wie gedacht. Wenn ich unter dem Baum stehe und die Hose sich im Baumwipfel befindet und ich sie anziehe, erhalte ich erst die Ausgabe in Klammern, dass ich die Hose nehme, dann die erwuenschte Meldung, dass sie zu hoch haengt, und dann die Meldung "Du hast die Hose nicht" - klar, weil vor Ausziehen automatisch Nehmen ausgefuehrt wird.

Ja, das klappt irgendwie nicht, das muss wohl an TAG selbst liegen. Denn eigentlich sollte das Fehlschlagen des Aufhebens die einzige Meldung sein.

Mit dem Attribut entfernt kannst du die Interaktion mit der Hose bereits im Voraus unterbinden, dann werden alle Aktionen, die die Erreichbarkeit der Hose erfordern, mit "Du kommst nicht an die Hose heran" abgebrochen. Der Nachteil ist hierbei, dass du die Aktion, mit der man die Hose tatsächlich erreichen kann, gesondert implementieren musst. Wenn diese Aktion nicht direkt die Hose betrifft - der Spieler stellt eine Leiter an den Baum oder schüttelt den Baum oder so - musst du einfach das Attribut entfernt löschen. Wenn die Aktion die Hose selbst betrifft - der Spieler fischt sie mit einer Stange aus dem Baum oder wirft einen Schuh auf die Hose - musst du die Aktion SichtUndRw benutzen, um genau diese Aktion für die Hose zuzulassen.

In deinem Code wird die Hose im Baum nur einmal beschrieben, nämlich, wenn sie in den Baumwipfel verschoben wird. Das ist etwas unglücklich, da dem Spieler, der die Hose erst einmal links liegen gelassen hat und dann wieder in den garten kommt, beim erneuten Untersuchen des Baums gar nicht gesagt wird, dass dort die Hose hängt.

Noch was:


NachAusf

    (anziehen)

    Text 'Du ziehst hastig deine Hose an. Puh, nicht mehr

        in Unterhosen, so fuehlst du dich etwas wohler.

        [#][[Du erhaelst 1 Punkt.]]'

    Inkr score 1

Ende

EndeAusf

Dieser Code gibt dem Spieler jedes Mal, wenn er die Hose anzieht einen Punkt. Es ist gewiss einfacher, das bereits vorhandene System der Punktevergabe zu verwenden:


NachAusf

    (anziehen)

    Text 'Du ziehst hastig deine Hose an. Puh, nicht mehr

        in Unterhosen, so fuehlst du dich etwas wohler.'

    Punkte 1 1

Ende

EndeAusf

Die erste Eins ist eine laufende Nummer. Alle Sachen, die Punkte geben, sind laufend durchnummeriert. Die zweite Eins ist die Anzahl der Punkte, die für diese Aktion vergeben wird. Der Text wird automatisch ausgegeben. Wenn du lieber "Du erhältst x Punkte" statt "Du hast gerade x Punkte bekommen" verwenden möchtest, musst du eine Kopie von tag.std, etwa hose.std anlegen, dort die entsprechenden Texte ändern und dem Programm sagen, dass es diese Texte verwenden soll. Das geht mit:


#STD 'hose.std'

Mit den maßgeschneiderten Standatdtexten könntest du auch das "Du kommst nicht an die Hose heran" ändern, indem du eine Aktion verwendetst:


Aktion mein_entfernt

Ausf

    Wenn (iObj = Hose)

        Stop 'Du streckst dich und du reckst dich...'

    Text 'Du kommst nicht an [den iObj] heran.'

EndeAusf

Und dann in 'hose.std':


...

30      'Du siehst [den iObj] hier nicht.'

31      '[Der iObj] [ist] zu weit weg.'

32      '[mein_entfernt]'

...

Das ist etwas umständlich, aber es funktioniert.

Geschrieben um 15:39 am 19.07.2006 | Zitat | Editieren | Löschen
RobinOsaka
Mitglied
Student Gumby
Beiträge: 28

Danke fuer die ausfuehrliche Antwort, Martin! Ich habe daraus viel lernen koennen. Besonders der std - Befehl war mir nicht bewusst.

LOL, dass man jedesmal einen Punkt bekommt, wenn man die Hose auszieht, hatte ich uebersehen. Ganz am Anfang habe ich das integrierte Punktsystem benutzt, aber irgendwas ging damit nicht (Punktabzuege?), also habe ich mein eigenes genommen. Werde ich aber mal ueberdenken.

Die anderen Dinge probiere ich am Wochenende mal aus.

Ich habe mein erstes Abenteuer roh fertig, es muss jetzt auf Herz und Nieren getestet werden. Mir schwant, dass das die eigentliche Arbeit ist.

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

Ok, ich hab's.

Ich habe beide Vorschlaege kombiniert. Ich habe ENTFERNT durch ein eigenes in STD ersetzt und einen eigenen ANZIEHEN Befehl geschaffen, ohne 'bei mir'. Das klappt fabelhaft.

Danke!

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