Forum moved to if-forum.org
Autor Nachricht
<  Ja / Nein Frage in Inform 7
Rabea
BeitragVerfasst am: Mo, 4 März 2013 - 19:42  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 25.02.2013
Beiträge: 36
Wohnort: Bielefeld

Hallo liebe Forenmitglieder,

ich weiß, die Frage passt hier nicht so gut, aber ich habe gesehen, dass an anderer Stelle im Forum nicht mehr so viel los ist (da hab ich es eben auch schon gepostet), deswegen stell ich hier auch nochmal die Frage

Ich stecke hier bei der Arbeit an meinem Textadventure etwas fest, vielleicht hat von Euch jemand Ahnung, wie ich das Problem lösen könnte.

Es geht um eine Ja/Nein Situation. Der Spieler soll die Möglichkeit haben, ein Käsemesser zu nehmen. Sobalt er "nimm käsemesser" eintippt soll die Abfrage kommen ob er das wirklich möchte. Beantwortet er die Frage mit "Nein" soll das Messer nicht aufgenommen werden und wie gehabt im Raum verbleiben.
Sobald er die Frage aber mit "Ja" beantwortet soll ein bestimmter Text erscheinen.

Mein Programmtext sieht folgendermaßen dazu aus:

Instead of taking the Kaesemesser:
say "Echt jetzt? Das Käsemesser solls sein?";
if player consents, now the player carries the Kaesemesser;
otherwise now the Kaesemesser is in the Anwesen des Dionys;
say paragraph break.

After taking the Kaesemesser, say "[bold type]Die private Miliz des Tyrannen hat Dich ertappt. Dich schlugen die Häscher in Bande:[paragraph break] [red letters]'Was wolltest Du mit dem Käsemesser, [blue letters]sprich[default letters][red letters].....' [default letters] [paragraph break]entgegnet Dir da der Wüterich."

Das mit dem Ja/Nein klappt soweit. Nur ist mein Problem, dass wenn er "Ja" eintippt er einfach nur das Messer aufnimmt, allerdings nicht der Warntext erscheint.

Für Hilfe wäre ich sehr dankbar.

Liebe Grüße
Rabea
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mikawa
BeitragVerfasst am: Mo, 4 März 2013 - 22:38  Antworten mit Zitat
Abenteurer
Abenteurer


Anmeldungsdatum: 03.09.2009
Beiträge: 453
Wohnort: Cham

Zitat:
instead of taking the Kaesemesser:
say "Echt jetzt? Das Käsemesser solls sein?";
if player consents, now the player carries the Kaesemesser;
otherwise now the Kaesemesser is in the Anwesen des Dionys;
say paragraph break.


Das Problem liegt in dem ... now the player carries ... Teil und der Aktion an sich.

Meines Erachtens kann man das gar nicht so zuweisen.
Es müsste heißen:

move the kaesemesser to the player.

Die after Routine greift nicht, da keine Aktion "taking the kaesemesser" durchgeführt wird, der folgende Text wird nur ausgegeben wenn der Spieler das Kaesemesser mit Erfolg nimmt, was nie eintritt, da die Aktion ja mit instead abgefangen wird.

Am besten der Ausgabetext kommt gleich in der Instead Routine, die ja vermutlich auch nur einmal ablaufen soll, daher würde ich etwas wie

Code:

instead of taking the Kaesemesser for the first time:
   say "Echt jetzt? Das Käsemesser solls sein?";
   if player consents:
      move the kaesemesser to the player;
      say "Mitgenommen. Aber oh weh!
         [bold type]Die private Miliz des Tyrannen hat Dich
         ertappt. Dich schlugen die Häscher in Bande:[paragraph
         break] [red letters]'Was wolltest Du mit dem Käsemesser,
         [blue letters]sprich[default letters][red letters].....'
         [default letters] [paragraph break]entgegnet Dir da der 
         Wüterich.";
   otherwise:
      move the Kaesemesser to the Anwesen des Dionys;
      say paragraph break.


versuchen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
proc
BeitragVerfasst am: Mo, 4 März 2013 - 22:56  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 08.12.2009
Beiträge: 923
Wohnort: Berlin

Tja, sowas kommt von sowas: Also bitte keine Crosspostings mehr, das stiftet nur Verwirrung! Wenn schon zwei identisch gemeinte Threads mit unterschiedlichen Inhalten existieren, kann ich ja noch einen draufsetzen:

Mikawa hat folgendes geschrieben:
if player consents:

Ich mag dieses consenting nicht, weil es das Spiel durch eine Zwangsmaßnahme unterbricht. Alternativ stehen in Inform die eingebauten saying-Aktionen für yes/no/sorry (und noch eine allgemeinere answering-Aktion) zur Verfügung. Nur eben mit dem Vorteil (für den Spieler) und Nachteil (für den Autor), dass sie nicht oder eben nur umständlich kontrolliert werden kann: Ich frage nach dem Messer, gehe in den Park eine Rauchen, kletter noch auf einen Baum und sage dann JA. Ich habe ein paar Gedanken investiert, wie obiges Problem mit diesen Aktionen zu lösen wäre, aber außer komplizierter Konstruktionen wie Szenen und Zustandsverwaltung ist mir auf die Schnelle nichts eingefallen. Können diese Aktionen überhaupt sinnvoll eingesetzt werden oder sind das historische Relikte aus den 80ern?
_________________
interactive fiction database
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Mikawa
BeitragVerfasst am: Mo, 4 März 2013 - 23:00  Antworten mit Zitat
Abenteurer
Abenteurer


Anmeldungsdatum: 03.09.2009
Beiträge: 453
Wohnort: Cham

Sorry das hatte ich übersehen. Das kommt davon, wenn man drei Dinge gleichzeitig macht ;-)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Martin
BeitragVerfasst am: Di, 5 März 2013 - 10:04  Antworten mit Zitat
Experte
Experte


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

proc hat folgendes geschrieben:
Können diese Aktionen überhaupt sinnvoll eingesetzt werden oder sind das historische Relikte aus den 80ern?

Ich denke mal, dass diese Aktionen zunächst nur als flapsige Antorten gedacht waren, ähnlich wie das Fluchen. Der Hinweis auf die rhetorische Frage passt ja ganz gut, wenn das Spiel sagt "Was, du kannst einen Zwei-Tonen-Felsen bewegen?"

In unser aller Lieblings-Genre-Prototyp Adventure - Spoiler übrigens - kommt auf den Befehl >KILL DRAGON die Replik "With your bare hands?" Wenn man dann bejaht, ist der Drache tot. Im Fortran-Original wurde das auch als modale Frage, so wie Rabea es vorhatte, umgesetzt. In Collossal Cave (TADS) und dem I6-Beispiel Advent wird ein Hilfsobjekt verwendet, das nach der frage auf die Eingaben >JA und >NEIN reagiert.

Man kann den Mchanismus auch verallgemeinern, hier ein Beispiel für I7:



"Konsens" by Lothar Lungenzug

Include German by Team Gerx.

A thing is usually privately-named. A room is usually privately-named.



Section - Y/N listener

The Y/N reference is an object that varies.

The Y/N reference location is an object that varies.

The Y/N reference turn is a number that varies.

Accepting is an action applying to one thing.

Carry out accepting: say "(Hier muss noch was programmiert werden)"; reset consideration.

Rejecting is an action applying to one thing.

Carry out rejecting: say "Na gut, hab's mir schon gedacht."; reset consideration.

To put (o - an object) down for consideration:
--> now the Y/N reference turn is the turn count;
--> now the Y/N reference is o;
--> now the Y/N reference location is the location.

To reset consideration:
--> now the Y/N reference turn is 0;
--> now the Y/N reference is nothing;
--> now the Y/N reference location is nothing.

Every turn when the Y/N reference is not nothing:
--> if the Y/N reference location is not the location:
--> --> now the Y/N reference is nothing;
--> if the player cannot see the Y/N reference:
--> --> now the Y/N reference is nothing;
--> if the turn count > Y/N reference turn + 3:
--> --> now the Y/N reference is nothing.

Instead of saying yes when the Y/N reference is not nothing, try accepting the Y/N reference.

Instead of saying no when the Y/N reference is not nothing, try rejecting the Y/N reference.



Section - Super-Story

The bistro is a room. "Brigittes [if bistro is not visited]('Brii-sschittes') [end if]Bistro ist eine kleine Eckkneipe, die früher eine Pizzeria war und seitdem die Speisekarte nicht geändert hat. Es ist kurz nach zwölf, du bist der letzte Gast. Aus der Küche im Norden kommen Spülgeräusche." The printed name is "Bistro".

A slice of pizza is in the bistro. "Ein Stück Pizza [if drink is in bistro]und ein abgestandener Drink sind noch [otherwise]stehen [end if]auf einem der Tische." The description is "Margherita: Analogkäse und Dosentomaten. Vor zwei Stunden aus dem Ofen gekommen." The printed name is "Stück[n] Pizza". Understand "pizza[f]" or "stueck[n]" or "margherita[f]" as pizza.

A drink is in the bistro. "Ein abgestandener Drink steht auf einem der Tische." The description is "Margarita: Erdbeerzeug, Eis und irgendwas Hochprozentiges. Die homogene Verteilung der Eisstückchen ist Beleg dafür, dass die Margarita schon länger hier steht." The printed name is "Drink[m]". Understand "drink", "margarita", "eis", "erdbeeren" as drink.

There is an empty glass. The description is "Ein leeres Glas mit Erdbeerschlieren." The printed name is "leer[^] Glas". Understand "leer" and "glas" as glass.

The cigarettes are in the bistro. The description is "Marke Rita. Sie hat einen Weg gefunden, wie man Rothhändle mit halb gerauchten Overstolz-Kippen veredeln kann. Sie hat die Zigaretten wohl liegen lassen - das wird ne harte Nacht für sie." The printed name is "Schachtel Kippen[f]". Understand "schachtel[f]", "paeckcheb[n]", "packung[f]", "kippen[p]", "zigaretten[p]", "marke", "rita", "fluppen[p]" as cigarettes.

For printing a locale paragraph about the drink when the pizza is in the location
--> (this is the suppress the drink's initial description in the presence of the pizza because we want to join the two descriptions rule):
--> set the locale priority of the drink to 0;
--> continue the activity.
-->
Instead of eating the pizza:
--> say "Die zwei Stunden alte Pizza essen? Bist du vergnügungssüchtig?";
--> put the pizza down for consideration.
-->
Instead of accepting the pizza:
--> remove the pizza from play;
--> say "Du schlingst die Pizza herunter. Schmeckt leider nach mehr."
-->
Instead of drinking the drink:
--> say "Die abgestandene Erdbeerpampe trinken - wirklich?";
--> put the drink down for consideration.

Include (-
[obj_move a b;
--> --> if (b) move a to b; else remove a;
];
--> [ obj_swap a b
--> --> ap bp;
--> --> ap = parent(a);
--> --> bp = parent(b);
--> --> obj_move(a, bp);
--> --> obj_move(b, ap);
--> ];
-).

To swap (a - a thing) with (b - a thing): (- obj_swap({a}, {b}); -).

Instead of accepting the drink:
--> swap the drink with the empty glass;
--> say "Na gut, dich sieht ja hier keiner. Slurrrp. Urk - war alles an einem Stück."-->

Smoking is an action applying to one carried thing. Understand "rauch [something]" as smoking. Understand "paff [something]" as smoking. Understand "quarz [something]" as smoking. Understand "poeffel [something]" as smoking.

To carry out smoking: say "Das kann man nicht rauchen."

Instead of smoking the cigarettes:
--> say "Willst du dich etwa umbringen?";
--> put the cigarettes down for consideration.
-->
Instead of accepting the cigarettes:
--> say "Hust, hust. Tod, wo ist dein Stachel?";
--> reset consideration.
-->
The kitchen is north of the bistro. "Die Küche ist genauso groß wie das Bistro, aber voller Fettdunst. Brigitte kannst du nur hören. Das Bistro ist im Süden". The printed name is "Küche".

_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
proc
BeitragVerfasst am: Di, 5 März 2013 - 14:17  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 08.12.2009
Beiträge: 923
Wohnort: Berlin

Martin hat folgendes geschrieben:
Ich denke mal, dass diese Aktionen zunächst nur als flapsige Antorten gedacht waren, ähnlich wie das Fluchen.

Cooool, super Beispiel, vielen Dank! Von der Funktionsweise habe ich es mir genau so vorgestellt. Hand aufs Herz: Das ist zwar sehr viel komplizierter zu implementieren, aber für den Spieler sehr viel angenehmer als die if-player-consents-Konstrukte! Macht richtig Spaß...
_________________
interactive fiction database
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Rabea
BeitragVerfasst am: Di, 5 März 2013 - 22:30  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 25.02.2013
Beiträge: 36
Wohnort: Bielefeld

Guten Abend an alle,

erst mal danke an alle, für die Hilfen! Das hat mich alles in allem sehr weitergebracht! (auch wenn ich einiges von dem langen Quelltext noch nicht so recht verstanden habe - ich arbeite dran!) :)

@Mikawa: Deine if Schleife ist auch sehr interessant, ich wunder mich doch, wie viel eigentlich auf so unterschiedliche Weise möglich ist.
Diese "move player" Funktion kannte ich noch nicht. Jetzt habe ich sie aber an anderer Stelle gewinnbringend einsetzen können :)

Ich habe noch eine andere Frage, die bezieht sich aber auf verschlossene Türen. Die stelle ich aber wohl am besten unter einem anderen Titel oder? Unter Ja/Nein Fragen passt sie ja nicht....

...hehe also bis gleich!
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