IF-Forum

» IF-Forum - Autorencafé - Schreiben! - Wie lege ich den Spieler beim Start des Spieles ins Bett?
AntwortenNeues ThemaNeue Umfrage

Wie lege ich den Spieler beim Start des Spieles ins Bett?

Geschrieben um 14:44 am 20.02.2004 | Zitat | Editieren | Löschen
binzl
Mitglied
Master Gumby
Beiträge: 98

Ich habe ein Problem, ich möchte das Spiel im Schlafzimmer beginnen und ich soll schon bei Beginn des Spiels im Bett liegen (und nicht sinnlos im Raum herumstehen obwohl ein sehr gemütliches Bett vorhanden ist). Ich habe jede Menge ausprobiert, aber ich stehe mir beim Start des Spiels immer noch die Beine in den Bauch.

Geschrieben um 19:31 am 20.02.2004 | Zitat | Editieren | Löschen
TST
Mitglied
Pupil Gumby
Beiträge: 13

Hi,

bei deinem Problem kann ich dir helfen, denk ich.


Ausf

Text 'bla bla'

...

GeheZu eins

Ausf liegen_auf bett        !! die lösung

EndeAusf

Raum  eins

Name  'eins'

Besch 'Testareal 1'

Obj    bett

Name  'bett' n

Subst 'bett' n

Ort    eins

Attr   liege

Besch 'Ein flauschiges Bettchen.'

So das wars. Damit kann dein Spieler frisch gestärkt den Spieletag beginnen. :-)

Geschrieben um 20:37 am 20.02.2004 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634

Das Liegen birgt einige Tücken. Man kann zwar gehezu mit Objekten benutzen, dann bleibt aber die Variable bSitz undefiniert. Da gehezu auch die Raumbeschreibung ausgibt, muss man bSitz vorher setzen:


#DAT 'normal.adv'

Aktion Anfang

Ausf

    Text 'Drrrring! Uuaaah! Was? Schon 9:05 Uhr?[#]

    [f]D A S   E R W A C H E N[n]

    [x]eine Geschichte für nicht ganz Ausgeschlafene.[#]'

    sei bSitz %liegen

    geheZu in dein_Bett

EndeAusf

Raum dein_Zimmer

Name 'Dein Zimmer in der IF-de-WG'

raus dort_lauert_der_Tod

Besch 'Dies ist dein Zimmer, das du vor einem Jahr in

    der IF-de-WG bezogen habe. Es ist das "Curses!"-Zimmer,

    weil du immer so laut fluchen musst, wenn du über das

    Kabel der Stehlampe stolperst. Das zweite Möbelstück

    neben der Stehlampe ist dein Bett, das in der Mitte des

    Zimmers steht, um den Raum größer wirken zu lassen. Es

    ist nicht das schönste Zimmer, etwas schlampig in Inform

    impementiert, aber besser als nichts.

    [[*** Programming Error: Tried to read entry 5 from array

    "bewohner" which has entries from 0 up to 2. ***]]'

Obj dein_Bett

Name 'Bett' n

Subst 'bett' n, 'heia' f

Besch 'Das Bett hast du von deinem Vormieter, Christoph,

    übernommen.'

Ort dein_Zimmer

Attr Sitz Liege fest Ablage in_Obj

Weg dort_lauert_der_Tod

Ausf

    Text '[[***Programming Error: Tried to move "wg" into

        "flur" which is a child of "wg" thus creating an

        infinite loop. ***]]'

    gestorben

EndeAusf

Torstens Lösung funktioniert auch, allerdings muss der Spieler bereits im richtigen Raum sein und es wird dann "Du liegst nun in dem Bett" ausgegeben. Daher muss man das Liegen still ausführen, und dann die Raumbeschreibung explizit anfordern:


Aktion Anfang

Ausf

    Text 'Drrrring! Uuaaah! Was? Schon 9:05 Uhr?[#]

    [f]D A S   E R W A C H E N[n]

    [x]eine Geschichte für nicht ganz Ausgeschlafene.[#]'

    setze still

    gehezu dein_Zimmer

    Ausf liegen_auf dein_Bett

    lösche still

    Ausf lage

EndeAusf

P.S.: Es kann sein, das das in älteren (sprich uralten) T.A:M.s nicht funktioniert. Dann bitte die neueste T.A.M. verwenden. Danke.

Geschrieben um 12:14 am 23.02.2004 | Zitat | Editieren | Löschen
binzl
Mitglied
Master Gumby
Beiträge: 98

Klasse, hat mir geholfen Danke. Habe aber die 2 Lösungen kombinieren müssen, da bei Martins Lösung die DOS-Tam vor der Raumbeschreibung die Zahlenfolge "1, 1" ausgibt, sowie angibt daß der Spieler auf dem Bett liegt, was nicht vonnöten ist, da sich schon aus der Beschreibung des Raumes ergibt, daß der Spieler liegt. Meine Lösung im folgenden:


...

Sei bSitz %liegen

GeheZu Schlafzimmer

Ausf liegen_auf Bett

...

Diese Version bringt in der DOS-Tam sowie in der Windows-Tam das gewünschte Ergebnis.

Geschrieben um 13:17 am 06.06.2004 | Zitat | Editieren | Löschen
Zensunni
Mitglied
Pupil Gumby
Beiträge: 12

Bisher hat es zwar gereicht, still und heimlich mitzulesen, aber jetzt muss ich doch auch mal ne Frage stellen.

Die Lösungen bedeuten ja, den Spieler AUF das Bett zu legen, aber nicht IN das Bett. Lediglich Martin's Lösung legt den Spieler direkt in das Bett, erzeugt aber bekanntermaßen 1, 1 vor der Ausgabe. Lässt sich das umgehen oder gibt es noch eine andere Möglichkeit, den Spieler zu Beginn in ein Objekt zu legen?

Und lässt sich "lege auf" und "lege in" trennen? Wenn man mit Martins Code arbeitet, kann ich nichts mehr auf das Bett legen, sondern es wird automatisch in das Bett gelegt. Ist es möglich, etwas in das Bett zu legen und etwas darauf legen zu können?

(ist als Ablage und Behälter definiert)

Geschrieben um 13:21 am 07.06.2004 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Nadine:

Und lässt sich "lege auf" und "lege in" trennen?

Ich habe mir ein Bett gebaut, in das man sich hinein- oder draufLEGEN kann; man kann sich aber auch hinein- oder draufSETZEN. Ebenso können Dinge darauf abgelegt und/oder hineingelegt werden (z.B. das Tablett AUF das Bett und die Giftschlange IN das Bett!).



Name    'Bett' n

Subst   'bett' n  'poofe' f  'heia' f

Ort     Wohnzimmer

Attr    immobil Sitz Ablage Behälter Liege In_Obj

Besch   'Ein selbst gezimmertes Bett aus echtem Regenwald-Teakholz.'

VorAusf

    (sitzen_auf  liegen_auf)

        Wenn (aPräp = 'auf') dann

          AttrWeg selbst In_Obj

        Ende

        Wenn (aPräp = 'in') dann

          AttrHin selbst In_Obj

        Ende

EndeAusf```
Geschrieben um 17:43 am 08.06.2004 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Noch mal zum ursprünglichen Thema: Wenn man den Spieler in einem Bett aufwachen lassen will, ohne dass er erkennen kann, in welchem Raum er sich befindet (und ohne dass er irgendwelche Objekte außer denen im Bett manipulieren kann), könnte man das Bett doch auch als Raum deklarieren. Nach dem Aufstehen wird dieser Raum dann nie wieder betreten, denn nach dem Aufstehen würde man sich wie gehabt in (oder auf) das Objekt "Bett“ legen. Natürlich müssen mit dem Aufstehen eventuell im Raum "Im_Bett“ zurückgelassene Objekte in (oder auf) das Objekt "Bett" gelegt werden.

Das ist vielleicht nicht ganz elegant, aber die Eleganz könnte doch auch mal dem Effekt Platz machen.

Beispiel für einen Startraum „Im_Bett“:



Name    'Im Bett'

Besch   'Du liegst in einem Bett. Wo du genau bist, kannst du nicht erkennen.'

VorAusf

    (aufstehen)

        Text 'Langsam rappelst du dich hoch. Jetzt kannst du auch

              sehen, dass du dich in deinem Wohnzimmer befindest. Warum das

              Bett in deinem Wohnzimmer steht, kannst du dir beim besten

              Willen nicht erklären.[#]'

        Schleife xObj

           Wenn (xObj hier) und /(xObj beiMir) dann

              ObjNach xObj in Bett        ! oder "auf Bett"

           Ende

        Ende

        GeheZu Wohnzimmer

        Stop

EndeAusf ```
Geschrieben um 13:28 am 11.06.2004 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634

Zitat:

Lediglich Martin's Lösung legt den Spieler direkt in das Bett, erzeugt aber bekanntermaßen 1, 1 vor der Ausgabe.

Also, die DOS-T.A.M. vom 06.03.2003, die auch im aktuellen Paket enthalten ist, erzeugt bei mir kein "1, 1". Bitte aktualisieren!

Zitat:

Und lässt sich "lege auf" und "lege in" trennen? Wenn man mit Martins Code arbeitet, kann ich nichts mehr auf das Bett legen, sondern es wird automatisch in das Bett gelegt. Ist es möglich, etwas in das Bett zu legen und etwas darauf legen zu können? (ist als Ablage und Behälter definiert)

Wenn ich das Spiel oben kompiliere, kann ich nur Dinge auf das Bett legen, das Hineinlegen wird mit "Das Bett ist keine Ablage" quittiert. Wenn ich zusätzlich das Attribut Ablage definiere, kann man Dinge ins Bett legen, aber der Ablage- und der Behälterteil des Betts werden getrennt: "Auf dem Bett siehst du eine alte Zeitung und drei Äpfel. In dem Bett siehst du einen Kompass."

In diesem Fall will man wohl eher, dass "lege Ball ins Bett" und "lege Ball aufs Bett" dasselbe bedeuten. Ein einfaches Umleiten von hineinlegen in darauflegen funktioniert nicht, aber mit dem folgenden Code haut's hin:


  Obj dein_Bett

  ...

  VorAusf

    (empfangen) sei aPräp 'auf'

  EndeAusf

  Attr Sitz Liege fest Ablage in_Obj
Geschrieben um 16:52 am 15.07.2004 | Zitat | Editieren | Löschen
TAG-Amateur
Mitglied
Master Gumby
Beiträge: 103

Ich habe auch vor, den Spieler ins Bett zu legen, aber nur, wenn er einen Befehl eingibt.

Wie mache ich das denn?



Name   'zaubern'

Verb   'hokuspokus'

Ausf

 geheZu in Bett

EndeAusf```

In etwa so? Oder wie? Wie ist das mit dem Liegen?
Geschrieben um 17:08 am 15.07.2004 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634

Zitat:

Wie mache ich das denn? ... In etwa so? Oder wie?

Ja, genau. Vermutlich so. Hast du den Code nicht ausprobiert, bevor du uns im Forum fragst? Ruhig deine Idee mal kompilieren uns sehen, ob's klappt - viel passieren kann ja nicht. (Ein hängengebliebenes DOS-Fenster ist bei mir nicht "viel". ;-)

Zitat:

Wie ist das mit dem Liegen?

Die Antwort hierzu* haben die Forums-Benutzer auf dieser Seite versteckt. Findest du sie?


*) sei bSitz %liegen

Geschrieben um 18:29 am 15.07.2004 | Zitat | Editieren | Löschen
TAG-Amateur
Mitglied
Master Gumby
Beiträge: 103

Das heißt, es geht folgendermaßen?



Name   'zaubern'

Verb   'hokuspokus'

Ausf

 geheZu in Bett

 sei bSitz %liegen

EndeAusf```

Wie ist es denn mit

```Ausf

[...]

 Ausf   liegen_auf bett

[...]

EndeAusf```
Geschrieben um 23:43 am 15.07.2004 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634

Zitat:

Das heißt, es geht folgendermaßen?

Nochmal: Die beste Möglichkeit, zu überprüfen, ob Code funktioniert, ist ihn tatsächlich zu erzeugen und auszuprobieren. Das geht leicht und bringt auch das ein oder andere Erfolgserlebnis, probier's aus!

Wenn dann etwas nicht klappt, kann man den Code immer noch hier posten und die Forenbenutzer um Rat fragen. (Es besser zu wissen als andere ist immer schön, den Code für andere zu schreiben, weniger. :-)

Dein Code ist fast korrekt, du musst die Variable bsitz vor der Anweisung gehezu definieren, da in dieser die Raumbeschreibung ausgegeben wird, und dann muss bekannt sein, ob der Spieler auf dem Bett liegt, sitzt oder steht.


Ausf

    sei bSitz %liegen

    geheZu in Bett

EndeAusf

Dein zweiter Code funktioniert nur, wenn das Bett zum Zeitpunkt des Zauberns sichtbar ist. Vorsicht! Da dies nicht überprüft wird, wenn du Ausf benutzt - die gesamte Überprüfung wird vom Parser vorgenommen - ist dieser Code recht gefährlich und macht eventuell das Spiel kaputt: Der Spieler kann dann auf dem Bett liegen, obwohl er immer noch im Garten ist, wo das Bett nicht steht. Die Meldung heißt dann er liege im Bett, der Spieler kann aber das Bett nicht sehen. Aus dieser Situation kommt man nicht so leicht wieder heraus, also Obacht.

Außerdem schreibt die zewite Möglichkeit etwas wie "Du hast dich ins Bett gelegt.", was bei einem Zauberspruch (oder was auch immer) sicher nicht gewünscht ist.

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