Forum moved to if-forum.org
Autor Nachricht
<  Ambiguitätsfrage
Frottee
BeitragVerfasst am: Do, 4 März 2004 - 2:47  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 07.06.2003
Beiträge: 35

Hallo Leute,

ich habe mal eine Frage an die Inform-Pros...
Gibt es eine Möglichkeit, die Ambiguitätsfrage des Parsers bei einer bestimmten Gruppe von Objekten auszuschalten und durch einen Hinweis zu ersetzen.

Was ich meine ist Folgendes:

Statt auf "Öffne Tür" auszugeben
Zitat:
Welche Tür meinst Du, die rote Tür, die grüne Tür oder die blaue Tür ?

möchte ich lieber den Hinweis
Zitat:
[Wenn du eine bestimmte Tür meinst, dann gib bitte die Farbe der Tür mit an]

ohne dass der Parser dem Spieler die Möglichkeit gibt, die Eingabe sofort zu spezifizieren. Das klappt nämlich in meinem Fall wegen einer speziellen parse_name-Routine nicht und führt zu verwirrenden Fehlermeldungen des Parsers...
Bis jetzt habe ich die Sache so gelöst, dass ich ein neues Objekt eingeführt habe, das unklare Eingaben abfängt, aber schicker fände ich es, es direkt in der parse_name-Routine der betroffenen Objekte zu lösen. Gibt's da ne Möglichkeit???

Danke,
Marc
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Martin
BeitragVerfasst am: Do, 4 März 2004 - 8:30  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München

Ich bin zwar Inform-Rookie, aber ich habe eine Idee: Könnte man nicht eine globale Flagge definieren, die nur gesetzt ist, wenn man eine der Türen anspricht? Das Setzen geschieht in der parse_name-Eigenschaft der Türen, und am Ende jeden Zuges wird diese Flagge gelöscht, in einem daemon oder so.

Dann ersetzt du die Library Message 46 in Miscellany, die dann deinen Text ausgibt, wenn die oben definierte globale Variable gesetzt ist, rtrue nicht vergessen. Der Spieler kann zwar immer noch versuchen, eine der Farben anzugeben (und damit Probleme im Parser hervorrufen), aber er bekommnt es nicht gesagt.

Ich weiß ja nicht, was in deiner parse_name-Routine den Parser so verwirrt, so dass das standardmäßige (und von vielen Spielern erwartete) Verhalten nicht funktioniert, aber den Ansatz mit dem Disamibguisierungsobjekt finde ich auch nicht schlecht.
_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Frottee
BeitragVerfasst am: Do, 4 März 2004 - 10:47  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 07.06.2003
Beiträge: 35

Danke, das ist eine Idee, die ich mal ausprobieren werde.
Wobei ich befürchte, dass das bei einer größeren Story-Datei schnell mal zu Bugs führen kann, wenn ich den Überblick verliere...

Ich will Dir auch gerne erklären, warum es bei mir mit der Ambiguitätsfrage nicht funktioniert.
Es gibt in meinem Spiel drei Kassen in einem Raum, die mit "Kasse 1", "Kasse 2" und "Kasse 3" benannt sind. Meine parse_name ist so eingerichtet, dass jedes Objekt nur dann erkannt wird, wenn die Zahl NACH dem Wort "Kasse" eingegeben wird.

Was passiert nun...
Code:
> Untersuche Kasse
Welche meinst du, die Kasse 1, die Kasse 2, die Kasse 3?

> 2
Es sind keine davon ansprechbar.

> Untersuche Kasse
Welche meinst du, die Kasse 1, die Kasse 2, die Kasse 3?

> 1
(die Kasse 1)
...Beschreibung der Kasse...

> Untersuche Kasse
Welche meinst du, die Kasse 1, die Kasse 2, die Kasse 3?

> Kasse 2
Ich habe dich nur soweit verstanden: Untersuche die Kasse 2


Das liegt einfach daran, dass der Parser die Eingabe des Spielers zwischen dem Verb und dem alten (unpräzisen) Nomen einfügt und somit folgendes herauskommt (in den oberen Fällen):

Untersuche 2 Kasse (erkennt meine parse_name nicht als Kasse 2, die Fehlermeldung des Parsers ist mir aber selbst unverständlich)

Untersuche 1 Kasse (da denkt der Parser, man wolle irgendeine Kasse untersuchen und wählt automatisch Kasse eins, was in diesem Fall zufällig stimmt. Der "Best Guess" in Klammern verrät das aber.)

Untersuche Kasse 2 Kasse (da erkennt meine parse_name nur zwei Trefferwörter und das zweite "Kasse" ist zuviel)

Hier kommen also zwei Probleme zusammen: eine parse_name, die die Wörter in einer bestimmten Reihenfolge will und das parsen von Zahlen, die generell auch andere Bedeutung für den Parser haben können (Bsp. eine als IRGENDeine)

Darum lieber weg mit dieser Frage, verwirrt den Spieler mehr als es nützt.

Marc
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ChrisW
BeitragVerfasst am: Do, 4 März 2004 - 12:08  Antworten mit Zitat
Abenteurer
Abenteurer


Anmeldungsdatum: 26.08.2002
Beiträge: 278
Wohnort: Leipzig

Als Nicht-Inform-Profi und Nicht-Kenner deines Quelltextes würde ich ja folgende Lösung am elegantesten finden, auch wenn ich keine Ahnung habe, wie das im Detail umzusetzen wäre:

Benutze eine globale Variable, um zu speichern, mit welcher Kasse der Spieler als letztes interagiert hat. Die Variable setzt du am Anfang auf 1. Wenn der Spieler Kasse 3 untersucht, müsste die Variable dem entsprechend auf 3 gesetzt werden. Mal angenommen, der Spieler gäbe als nächstes "öffne Kasse" (ohne Zahl) ein, müsstest du die parser_name von Kasse 3 auf Grund der globalen Variable dazu kriegen, sich zu melden, und Kasse 3 wird geöffnet.

Sinn des Ganzen wäre einfach, als Spieler nicht jedes Mal Kasse 3 eingeben zu müssen, wenn man mehrfach mit derselben Kasse interagiert. Erinnert mich an die untere und die obere Schublade in Zoltans "Der Besucher".

Dass beim ersten "Untersuche Kasse" automatisch Kasse 1 gewählt würde, hielte ich für vertretbar, wenn dem Spieler klar gemacht wird (z.B. in der Raumbeschreibung), dass auch noch zwei weitere Kassen existieren.

(Wobei das mit der globalen Variable eher unelegant ist, da gäbe es sicher noch bessere Möglichkeiten, den aktuellen Kassenstatus zu speichern.)
_________________
"Ein Musiker! Was will der hier so spät?" Stolzing (Meistersinger v.N.)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Martin
BeitragVerfasst am: Sa, 6 März 2004 - 9:42  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München

Komisch! Folgendes:

Code:

Object -> Kasse_1
   with dekl 6,
        short_name "Kasse 1",
        name 'kasse' '1//' '#1' 'eins'
    has female proper scenery;

Object -> Kasse_2
   with dekl 6,
        short_name "Kasse 2",
        name 'kasse' '2//' '#2' 'zwei' 'zwo'
    has female proper scenery;

Object -> Kasse_3
   with dekl 6,
        short_name "Kasse 3",
        name 'kasse' '3//' '#3' 'drei'
    has female proper scenery;


funktioniert bei mir, ohne, dass vorangestellte Zahlen wie in deinem Fall als <demanding number> verstanden würden:

Code:

Supermarkt
Du bist in einem Supermarkt, hier sind drei Kassen, aber keine Waren. Der
Ausgang ist im Norden.

>u kasse
Was meinst du, Kasse 1, Kasse 2 oder Kasse 3?

Deine Antwort: 1
Du entdeckst an Kasse 1 nichts Spezielles.

>u zwei
Du entdeckst an Kasse 2 nichts Spezielles.

>u kasse drei
Du entdeckst an Kasse 3 nichts Spezielles.

>u drei kassen
So wie ich dich verstehe wolltest du folgendes sagen: u Kasse 3.

>u drei kasse
Du entdeckst an Kasse 3 nichts Spezielles.


Das funktioniert mit der neuesten stabilen Lib:

Code:

Offizielle deutsche Inform-Library, Release 19, Serial 021015

_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Frottee
BeitragVerfasst am: Sa, 6 März 2004 - 12:37  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 07.06.2003
Beiträge: 35

Hmm.... anscheinend habe ich da irgendetwas falsch gemacht, als ich es auf die 'klassische' Art und Weise versucht habe.
Ich werde das ganze auf jeden Fall noch mal durchprobieren und mir überlegen, ob ich wirklich so viel Wert darauf lege, dass das Wort "Kasse" vor der Zahl zwingend notwendig ist.
Danke auf jeden Fall...
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  >  Inform & Glulx

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