Autor |
Nachricht |
< Adjektiv erzwingen? |
|
Verfasst am:
Fr, 27 Aug 2004 - 21:29
|
|
|
Neuling
Anmeldungsdatum: 27.01.2004
Beiträge: 10
Wohnort: Hannover
|
|
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? |
|
|
|
|
|
Verfasst am:
Mo, 30 Aug 2004 - 8:00
|
|
|
Experte
Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München
|
|
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:
Code: |
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. _________________ Every silver lining has a cloud. |
|
|
|
|
|
Verfasst am:
Mo, 30 Aug 2004 - 14:26
|
|
|
Wasserträger
Anmeldungsdatum: 10.07.2004
Beiträge: 104
Wohnort: Hannover
|
|
Martin kann viel zuviel definieren und hat folgendes geschrieben: |
Code: |
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:
Code: | #WIN
#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. Code: | > 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! _________________ Subst 'TAG-Amateur' m
Adj 'lieb' 'nett'
Attr Person
Besch 'Er ist im Moment [selbst.Zust].'
Zuletzt bearbeitet von TAG-Amateur am Mi, 10 Aug 2011 - 21:37, insgesamt einmal bearbeitet |
|
|
|
|
|
Verfasst am:
Di, 31 Aug 2004 - 15:08
|
|
|
Neuling
Anmeldungsdatum: 27.01.2004
Beiträge: 10
Wohnort: Hannover
|
|
@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. |
|
|
|
|
|
Verfasst am:
Mi, 1 Sep 2004 - 7:31
|
|
|
Experte
Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München
|
|
Zensunni hat folgendes geschrieben: | 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. |
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 "Ich sehe hier kein."
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.
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.
Zensunni hat folgendes geschrieben: | ich hab schon versucht eine Raumabfrage in die IF-Schleife mit einzubringen, ... |
Das Problem kann man schon mit einer Raumabfrage umgehen:
Code: |
Aktion ObjParser
Ausf
lokal x
wenn (roter_Baum hier) dann
leseArt m x
leseAdj 'rot' m x
wenn (x) und (Wort = 'baum') dann
nächstesWort
sei aObj roter_Baum
Ende
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: |
Deko roter_Baum_Deko
Name 'rot^ Baum' m
Adj 'rot'
Subst 'baum' m
Ort Nirwana
Besch 'Ein Hilfsobjekt, das "roter Baum" außerhalb
des Walds abfängt.'
|
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. _________________ Every silver lining has a cloud. |
|
|
|
|
|
Verfasst am:
Mi, 1 Sep 2004 - 13:50
|
|
|
Neuling
Anmeldungsdatum: 27.01.2004
Beiträge: 10
Wohnort: Hannover
|
|
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. |
|
|
|
|
|
|
Alle Zeiten sind GMT + 1 Stunde (MEZ) |
|
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.
|
|