Autor |
Nachricht |
< Feststellen ob etwas auf einer anderen Sache ist. |
|
Verfasst am:
Mi, 14 Mai 2003 - 18:33
|
|
|
Neuling
Anmeldungsdatum: 17.10.2002
Beiträge: 13
Wohnort: Friesland
|
|
Hallo,
kann mir jemand helfen. Ich versuche gerade eine Tischdecke zu schaffen, die auf einem Tisch liegt. Diese soll man erst nehmen können, wenn anderen Objekte von Ihr runter genommen worden sind. In diesem Fall steht eine Object 'Vase' auf der Decke.
Ich habs mal versucht, aber diese Bespiel landet immer im ELSE-Zweig und nimmt trotz rfalse die Sachen trotzdem.
Code: |
Object e_tisch "Tisch" Esszimmer
with description
"Ein fast viereckiger Tisch aus massivem Eichenholz.",
name 'Tisch' 'viereckig' 'massiver' 'massiven',
has male static supporter;
Object t_decke "Tischdecke" e_tisch
with description
"Eine blaue Tischdecke.",
name 'Tischdecke' 'Decke' 'blaue' 'blau',
react_before
[;
Take:
if (vase in e_tisch)
{
print "Du bist doch kein Künstler";
rfalse;
}
else
{
print "Du nimmst die Tischdecke, denn die Vase steht nicht mehr drauf.";
move t_decke to player;
rfalse;
}
],
has female supporter;
Object vase "Blumenvase" t_decke
with description
"Eine gelbe Blumenvase.",
name 'Vase' 'Blumenvase',
has female;
|
mfg
Thomas |
|
|
|
|
|
Verfasst am:
Mi, 14 Mai 2003 - 19:08
|
|
|
Neuling
Anmeldungsdatum: 26.08.2002
Beiträge: 9
Wohnort: Im tiefsten Hessen
|
|
Ich versuch mal eine Antwort, auch wenn ich noch nicht so fit in Inform bin.
Mabruck hat folgendes geschrieben: |
Code: |
...
Object t_decke "Tischdecke" e_tisch
with description
"Eine blaue Tischdecke.",
name 'Tischdecke' 'Decke' 'blaue' 'blau',
react_before
[;
Take:
if (vase in e_tisch)
{
print "Du bist doch kein Künstler";
rfalse;
}...
|
|
Ich glaube, es müßte if(vase in self) heißen, oder? (vase in e_tisch) testet nur ob die Vase direkt auf dem Tisch steht.
soquasi _________________ Two roads diverged in a wood, and I - I took the one less traveled by, and that has made all the difference. (Robert Frost) |
|
|
|
|
|
Verfasst am:
Do, 15 Mai 2003 - 8:03
|
|
|
Experte
Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München
|
|
soquasi hat folgendes geschrieben: | Ich glaube, es müßte if(vase in self) heißen, oder? (vase in e_tisch) testet nur ob die Vase direkt auf dem Tisch steht. |
Stimmt, mit "in" wird nur geprüft, ob ein Objekt direkt in oder auf einem anderen ist. Mit (children(self)) oder (child(self)) kann man prüfen, ob sich überhaupt etwas auf der Tischdecke befindet.
Der Code überprüft, ob die Tischdecke genommen werden kann, in react_before. Das ist falsch, da so das Aufheben aller Objekte im Raum - auch der Vase - unterbunden wird. Man könnte das zwar mit
Code: |
Take:
if (noun==self && children(self))
"Du bist doch kein Künstler";
|
verhindern, aber besser ist es, den Code in before zu packen, das sowieso nur aufgerufen wird, wenn noun die Tischdecke ist.
Außerdem ist es ungeschickt, das Nehmen der Tischdecke mit move beim Objekt zu implementieren. Besser ist, man lässt dies durch die normale Routine zum Aufheben von Gegenständen erledigen, die auch prüft, ob der Spieler genug Platz bei sich hat. Der Text, der beim Aufheben der Decke geschrieben wird, kann in after angegeben werden.
(Der ursprüngliche Code würde bei "nimm Tisch" auch die Decke nehmen, allerdings nur dann, wenn die Vasee nicht auf dem Tisch steht.)
Hier also der neue Code, der hoffentlich funktioniert:
Code: |
Object e_tisch "Tisch" Esszimmer
with description
"Ein fast viereckiger Tisch aus massivem Eichenholz.",
name 'Tisch' 'viereckig' 'massiver' 'massiven',
has male static supporter;
Object t_decke "Tischdecke" e_tisch
with description
"Eine blaue Tischdecke.",
name 'Tischdecke' 'Decke' 'blaue' 'blau',
before [;
Take:
if (children(self))
"Du bist doch kein Künstler";
],
after [;
Take:
"Du nimmst die Tischdecke, denn es ist nichts mehr
drauf.";
],
has female supporter;
|
(Ich bin ebenfalls kein Inform-Experte und habe den Code nicht ausprobiert.)
Wenn das funktioniert, geht es natürlich weiter: Man kann nur Dinge auf die Tischdecke stellen, wenn sie auf dem Tisch oder irgendwo anders ausgebreitet ist. Und wenn die Tischdecke auf dem Tisch liegt, muss PutOn Augsburger_Tageblatt e_tisch umgewandelt werden in PutOn Augsburger_Tageblatt t_decke. Was ist, wenn die Decke gefaltet auf dem Tisch liegt? Viel Spaß! ;) _________________ Every silver lining has a cloud. |
|
|
|
|
|
Verfasst am:
Do, 15 Mai 2003 - 8:13
|
|
|
|
Super,
das wars. und ich hab bestimmt ne Woche dran rumgebastelt.
Zitat: |
Wenn das funktioniert, geht es natürlich weiter: Man kann nur Dinge auf die Tischdecke stellen, wenn sie auf dem Tisch oder irgendwo anders ausgebreitet ist. Und wenn die Tischdecke auf dem Tisch liegt, muss PutOn Augsburger_Tageblatt e_tisch umgewandelt werden in PutOn Augsburger_Tageblatt t_decke. Was ist, wenn die Decke gefaltet auf dem Tisch liegt?
|
Das sind gute Ansätze. Ich werds mal versuchen ob die Programmiert kriege.
Thomas |
|
|
|
|
|
|
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.
|
|