IF-Forum

» IF-Forum - Autorencafé - Schreiben! - Adjektiv erzwingen?
AntwortenNeues ThemaNeue Umfrage

Adjektiv erzwingen?

Geschrieben um 22:29 am 27.08.2004 | Zitat | Editieren | Löschen
Zensunni
Mitglied
Pupil Gumby
Beiträge: 12

Ich habe einen Wald mit vielen Bäumen, darunter ist ein spezieller roter Baum. Nun soll man den roten Baum aber nicht mit 'untersuche Baum' untersuchen können (da dann die Beschreibung der normalen Bäume kommen sollte), sondern nur mit 'untersuche roten Baum'.

Gibt es eine Möglichkeit in Tag, ein Adjektiv untrennbar an den Namen zu binden, oder muss man sich da etwas anderes überlegen?

Geschrieben um 09:00 am 30.08.2004 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634

In diesem Fall empfiehlt sich, die genaue Wortfolge explizit in der Aktion ObjParser zu definieren. Diese wird vor dem normalen Parsen von Objekten aufgerufen, ein Objekt gilt als eindeutig gefunden, wenn die Variable aObj einen Wert zugewiesen bekommt. Der Wortzähler muss dann auf dem ersten Wort stehen, das nicht zum analysierten Objekt gehört. (Mehr dazu in Kapitel 15 des T.A.G.-Handbuchs.)

Der rote Baum wird ohne eigenes Objektvokabular - oder nur mit zusätzlichem Vokabular, das nicht mit den anderen Bäumen in Konflikt tritt, 'rotbuche' zum Beispiel - definiert und das Spiel bekommt folgende Aktion:


Aktion ObjParser

Ausf

  lokal x

 

  leseArt m x

  leseAdj 'rot' m x

  wenn (x) und (Wort = 'baum') dann

    nächstesWort

    sei aObj roter_Baum

  Ende

EndeAusf

Mit leseArt wird der passende Artikel gelesen, in diesem Fall ein makuliner, also 'den' oder 'dem'. Wenn es einen solchen Artikel gibt, wird der Wortzähler weiterbewegt - und genau dazu dient diese Anweisung, denn es wird nicht verlangt, dass ein Artikel eingegeben wird. Danach wird auf 'rot' mit passender maskuliner Endung geprüft und eventuell der Wortzähler vorangeschoben. Hier wird das Ergebnis dieser Analyse, abgelegt in x, allerdings verwendet und das nächste Wort, diesmal ohne Endungen, geprüft. Ist es 'Baum', so wird der Wortzähler mit nächstesWort vorgeschoben und mit aObj wird nun das Ergebnis des Objektparsers angegeben.

Wenn die Wortfolge nicht 'roten baum' oder 'den roten baum' war, wird der Wortzähler zurückgesetzt und die reguläre Analyse beginnt. Diese könnte dann 'baum' ohne Adjektiv finden, nicht jedoch den roten Baum. So wird eine Nachfrage des Parsers umgangen.

Geschrieben um 15:26 am 30.08.2004 | Zitat | Editieren | Löschen
TAG-Amateur
Mitglied
Master Gumby
Beiträge: 103

Martin kann viel zuviel definieren und:


Aktion ObjParser

Ausf

  lokal x

 

  leseArt m x

  leseAdj 'rot' m x

  wenn (x) und (Wort = 'baum') dann

    nächstesWort

    sei aObj roter_Baum

  Ende

EndeAusf

Mir fällt da eine viel einfachere Lösung ein:



#PIN

Richtung   N   'norden'   'n' *

Richtung   NO   'nordosten'   'no' *

Richtung   O   'osten'   'o' *

Richtung   SO   'südosten'   'so' *

Richtung   S   'süden'   's' *

Richtung   SW   'südwesten'   'sw' *

Richtung   W   'westen'   'w' *

Richtung   NW   'nordwesten'   'nw' *

Richtung   H   'oben'   'hoch'

Richtung   R   'unten'   'runter'

Richtung   Rein   'drinnen'   'rein'

Richtung   Raus   'draussen'   'raus'

Synonym   'h'   'hoch'

Synonym   'r'   'runter'

Synonym   'rauf'   'hoch'

Synonym   'hinauf'   'hoch'

Synonym   'hinab'   'runter'

Aktion   Anfang

Ausf

 Text   'Verdammt! Ich muss mal! Aber

   gegen welchen Baum soll ich pinkeln?

   [f]D I E   E N T S C H E I D U N G[n]

   [x]Ein toller Test, (C) 29. - 30.08.04

   [x]xehpuk

   [x]Aufhören: [f]ENDE[n]

   [x]Wenn dir nichts einfällt, drücke [f]HILFE[n]'

 Absatz

 Sei   MaxInv 5

 Sei   MaxGew 200

 GeheZu   Wald

EndeAusf

Raum   Wald

Name   'Eichenwald' m

Std   Tschüss

Raus   Tschüss

H   Fliegen

R   Graben

Besch   'Du findest dich in einem Eichenwald wieder.

   Es ist ein sonniger Tag und der Wald strahlt

   eine eigenartige Aura aus.'

Antwort   Tschüss

Besch   'Bleib doch noch ein bisschen hier. Es ist

   doch gerade so schön. Außerdem willst

   du noch gegen einen Baum pinklen.'

Antwort   Fliegen

Besch   'Tut mir leid, aber du kannst nicht fliegen.'

Antwort   Graben

Besch   'Du konntest noch nie gut graben, darum

   haben dich auch alle im Kindergarten

   ausgelacht, als du es im Sandkasten

   versucht hast.'

Obj   Eichen

Name   'normal^ Eichen' p

Subst   'eiche' f 'eichen' p 'baum' m 'bäume' p

Adj   'normal'

Ort   Wald

Attr   fest

Besch   'Hoch gewachsene und gesund aussehende

   Eichen, ein schöner Anblick.'

VorAusf

 (pinkeln)

  Text   'Du hast dich entschieden, gegen irgendeine

   Eiche zu pinkeln. Als du es erledigt hast,

   stürmen tiefgraue Gewitterwolken heran und

   bedecken die Sonne. Es wird ziemlich dunkel

   und es ist gar nicht mehr schön. Das Schlimmste

   an der Sache ist, dass es anfängt zu regnen und

   dass zufälliger Weise der Baum, den du angepinkelt

   hast, von einem Blitz getroffen wird. Er fällt natürlich

   genau auf dich.'

  gestorben

EndeAusf

Obj   rote_Eiche

Name   'rot^ Eiche' f

Subst   'eiche' f 'baum' m

Adj   'rot'

Ort   Wald

Attr   immobil

Erst   'Unter den vielen Bäumen findest du auch

   eine rote Eiche.'

Besch   'So etwas hast du noch nie gesehen. Eine rote

   Eiche. Nun, was sollst du davon halten?'

VorAusf

 (pinkeln)

  Text   'Du erledigst dein Geschäft an der roten

   Eiche. Eine gute Entscheidung, denn es

   war sehr erleichternt. Du beendest deinen

   Spaziergang und wirst später wiederkommen.'

  gewonnen

EndeAusf

Deko   Erde

Name   'Waldboden' m

Vor   'wald'

Subst   'erde' f 'gras' n 'moos' n 'boden' m 'rasen' m

Ort   Wald

Besch   'Eben ein typischer Waldboden, bestehend

   aus Erde, Gras und Moos.'

VorAusf

 (pinkeln)

  Stop   'Dazu hat man Bäume!'

EndeAusf

Bef   pinkeln

Name   'pinkeln'

Verb   'pinkle' 'pinkel' 'piss' 'pisse' 'uriniere'

Syntax   gegen dasObj

Präp   'auf'

Ausf

 Wenn (aObj = Du) dann

  Text   'Das würdest du nie freiwillig tun.'

 Ende

EndeAusf

Bef   schweben

Name   'fliegen'

Verb   'fliege' 'hebe ab' 'steig empor' 'steige empor' 'flieg'

Ausf

 Text   'Tut mir leid, aber du kannst nicht fliegen.'

EndeAusf

Bef   sandkasten

Name   'graben'

Verb   'grabe' 'buddel' 'grab' 'buddle' 'schaufle'

Syntax   in demObj

Ausf

 Text   'Du konntest noch nie gut graben, darum

   haben dich auch alle im Kindergarten

   ausgelacht, als du es im Sandkasten

   versucht hast.'

EndeAusf

Bef   #Hilfe *

Name   'Hilfe'

Verb   'hilfe' 'tip' 'tipp' 'tips' 'tipps'

Ausf

 Wenn (proz 55) dann

  Text   'Pinkle gegen die rote Eiche.

   Es wird dir gut tun.'

 sonst

  Text   'Es scheint sehr komfortabel

   zu sein, gegen eine der

   "normalen" Eichen zu pinkeln.

   Ich würde es dir empfehlen.'

 Ende

EndeAusf

Flagge   PinkleGegenDich 6

Aktion *

Ausf

 Wenn (PinkleGegenDich > 0) dann

 Dekr   PinkleGegenDich 1

  Wenn (PinkleGegenDich = 5) dann

  Text   'Du kannst es nur noch fünf

   Minuten zurückhalten.'

  Ende

  Wenn (PinkleGegenDich = 4) dann

  Text   'Du kannst es nur noch vier

   Minuten zurückhalten.'

  Ende

  Wenn (PinkleGegenDich = 3) dann

  Text   'Du kannst es nur noch drei

   Minuten zurückhalten.'

  Ende

  Wenn (PinkleGegenDich = 2) dann

  Text   'Du kannst es nur noch zwei

   Minuten zurückhalten.'

  Ende

  Wenn (PinkleGegenDich = 1) dann

  Text   'Du kannst es nur noch eine

   Minute zurückhalten.'

  Ende

  Wenn (PinkleGegenDich = 0) dann

  Text   'Du kannst dir nur noch zugucken,

   wie du dir in die Hose machst.

   Schnell rennst du nach Hause, um

   dich zu duschen und umzuziehen.

   Doch viele Leute sehen deine

   durchtränkte Hose und lachen dich

   dann hinter deinem Rücken aus.

   Am nächsten Tag findet man deinen

   leblosen Körper an einem Galgen

   bei dir zu Hause hängen.

   "Es war Selbstmord.", bestätigt die

   Gerichtsmedizin.'

  gestorben

  Ende

 Ende

EndeAusf

Ende```

Aber wahrscheinlich ist das nicht die Lösung, die du gerne hättest.

Denn dann fragt ja der Parser nach, welchen Baum man untersuchen will.```> u baum

Welchen Baum? Die normalen Eichen oder die rote Eiche?

> roten

So etwas hast du noch nie gesehen. Eine rote Eiche. Nun, was sollst du davon halten?```

Dieser Mini-Test ist gar nicht schlecht geworden. Ihr könnt ihn ja mal ausprobieren!
Geschrieben um 16:08 am 31.08.2004 | Zitat | Editieren | Löschen
Zensunni
Mitglied
Pupil Gumby
Beiträge: 12

@Amateur

Zitat:

Aber wahrscheinlich ist das nicht die Lösung, die du gerne hättest.

Denn dann fragt ja der Parser nach, welchen Baum man untersuchen will.

Da hast du leider recht...der Sinn war ja, dass man den roten Baum nur untersuchen kann, wenn man weiß er existiert.

@Martin

Danke, die Lösung funktioniert perfekt - aber leider nur solange man den roten Baum auch in dem Raum untersucht, in dem er tatsächlich ist, ansonsten kommt es zu einem spielabsturzverursachenden Fehler...ich hab schon versucht eine Raumabfrage in die IF-Schleife mit einzubringen, aber entweder bin ich zu dumm oder es funktioniert aus einem andern Grund nicht.

Geschrieben um 08:31 am 01.09.2004 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634
<td valign="top"><div class="post"><p><strong>Zensunni:</strong></p> <blockquote> <p>aber leider nur solange man den roten Baum auch in dem Raum untersucht, in dem er tatsächlich ist, ansonsten kommt es zu einem spielabsturzverursachenden Fehler.</p> </blockquote> <p>Hmm. Bei mir gibt es hier auch einen Fehler - wieder einmal ein Fehler im Interpreter. Der stürzt allerdings nicht ab, sondern meldet mir nur &quot;Ich sehe hier kein.&quot;</p> <p>Normalerweise solltest du den Raum des geparsten Objekts nicht abfragen müssen, das macht der Parser schon. Mit dem oben angegebenen Code kannst du den Baum nicht außerhalb des Waldes untersuchen, aber du könntest jemanden, der den Baum nicht sieht, danach fragen.</p> <p>Dummerweise wird beim manuellen Parsen der Name des Objekts nicht angelegt, der ja auch total unsinnig sein könnte. Daher ist die Fehlermeldung falsch uns schreibt nichts. (Ich könnte mir vorstellen, dass durch schlechte Initialisierung hier Buchstabensalat statt nichts ausgegeben wird. Wie es hier zum der Absturz des Interpreters kommen kann, sehe ich allerdings nicht.</p> <p><strong>Zensunni:</strong></p> <blockquote> <p>ich hab schon versucht eine Raumabfrage in die IF-Schleife mit einzubringen, ...</p> </blockquote> <p>Das Problem kann man schon mit einer Raumabfrage umgehen:</p> <pre><code> Aktion ObjParser Ausf &amp;nbsp; lokal x &amp;nbsp; &amp;nbsp; wenn &amp;#40;roter_Baum hier&amp;#41; dann &amp;nbsp; &amp;nbsp; leseArt m x &amp;nbsp; &amp;nbsp; leseAdj 'rot' m x &amp;nbsp; &amp;nbsp; wenn &amp;#40;x&amp;#41; und &amp;#40;Wort = 'baum'&amp;#41; dann &amp;nbsp; &amp;nbsp; &amp;nbsp; nächstesWort &amp;nbsp; &amp;nbsp; &amp;nbsp; sei aObj roter_Baum &amp;nbsp; &amp;nbsp; Ende &amp;nbsp; Ende EndeAusf ``` Damit ist nun die fehlerhafte Fehlermeldung des Parsers umgangen, wenn ich den Baum dort anspreche, wo er nicht zu sehen ist, kommt die Antwort "Ich kenne 'roten' nicht." Weder sehr hilfreich noch korrekt. Um das zu reparieren definiert man eine Deko, die das von **ObjParser** gefundene Vokabular abfängt, und die nie zu sehen ist: </code></pre> <p>Deko    roter_Baum_Deko</p> <p>Name    'rot^ Baum' m</p> <p>Adj     'rot'</p> <p>Subst   'baum' m</p> <p>Ort     Nirwana</p> <p>Besch   'Ein Hilfsobjekt, das &quot;roter Baum&quot; außerhalb</p> <p>        des Walds abfängt.'</p> <pre><code> Nun sollte alles funktionieren. Man kann den roten Baum auch als Gesprächsthema benutzen - dann jedoch muss man **roter_Baum** und **roter_Baum_Deko** abfangen, um sicherzustellen, dass das Thema überall - im Wald und außerhalb des Waldes - verstanden wird.</code></pre></div></td>
Geschrieben um 14:50 am 01.09.2004 | Zitat | Editieren | Löschen
Zensunni
Mitglied
Pupil Gumby
Beiträge: 12

Vielen Dank, jetzt funktioniert es perfekt :)

Zitat:

Wie es hier zum der Absturz des Interpreters kommen kann, sehe ich allerdings nicht.

Ich hab mich wahrscheinlich mal wieder undeutlich ausgedrück: Nicht der Interpreter stürzte ab, sondern das Spiel. Es wurde der gesamte Bildschirm gelöscht und oben links 'Ich sehe hier kein' und unten rechts ein '[...]' ausgegeben. Danach gab es keine Reaktionen mehr auf Tastendrücke irgendwelcher Art, und es blieb nur noch das gewaltsame Ende per Alt + F4.

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