Forum moved to if-forum.org
Autor Nachricht
<  Adjektiv erzwingen?
Zensunni
BeitragVerfasst am: Fr, 27 Aug 2004 - 21:29  Antworten mit Zitat
Neuling
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?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Martin
BeitragVerfasst am: Mo, 30 Aug 2004 - 8:00  Antworten mit Zitat
Experte
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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
TAG-Amateur
BeitragVerfasst am: Mo, 30 Aug 2004 - 14:26  Antworten mit Zitat
Wasserträger
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
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Zensunni
BeitragVerfasst am: Di, 31 Aug 2004 - 15:08  Antworten mit Zitat
Neuling
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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Martin
BeitragVerfasst am: Mi, 1 Sep 2004 - 7:31  Antworten mit Zitat
Experte
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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Zensunni
BeitragVerfasst am: Mi, 1 Sep 2004 - 13:50  Antworten mit Zitat
Neuling
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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Alle Zeiten sind GMT + 1 Stunde (MEZ)

Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Seite 1 von 1
if-de :: Forum Foren-Übersicht  >  T.A.G.

Neues Thema eröffnen   Neue Antwort erstellen


 
Gehe zu:  
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.



Kontakt: Administrator

Powered by phpBB and NoseBleed v1.05