Autor |
Nachricht |
< Probleme mit if-Anweisung |
|
Verfasst am:
Fr, 3 Jun 2011 - 8:33
|
|
|
Wasserträger

Anmeldungsdatum: 21.05.2006
Beiträge: 42
|
|
In einem Raum meines Spieles habe ich folgende Abfrage mit if konstruiert:
Code: |
class start:stdroom
{
...
int gone_north=0;
void goto(int dir, object x)
{
switch (dir)
{
case(D_NORTH);
if(objekt.in(spieler) && !gone_north)
{
write("Text 1^");
gone_north=1;
}
if(objekt.in(spieler) && gone_north)
{
write("Text 2^");
}
if (!objekt.in(spieler))
{
write("Text 3^");
}
break;
...
|
Wenn jetzt allerdings der Spieler das Objekt hat, wird immer gar nichts ausgegeben. Nur Text 3 wird ausgegeben, wenn sich das Objekt nicht im Inventar befindet.
Ich habe jetzt die Abfrage anders konstruiert, in dem ein Ausgabestring je nach Bedingung mit "? :" einen anderen Wert zugewiesen bekommt, wenn der Spieler das Objekt im Inventar hat. Das funktioniert jetzt, aber was habe ich bei obiger Konstruktion falsch gemacht, dass sie nicht funktionierte? |
|
|
|
 |
|
Verfasst am:
Fr, 3 Jun 2011 - 11:27
|
|
|
Wasserträger

Anmeldungsdatum: 06.06.2005
Beiträge: 59
Wohnort: 46° 38' N 14° 20' O
|
|
Deine Variable heißt 'object', aber du fragst nach 'objekt'? :) |
|
|
|
 |
|
Verfasst am:
Fr, 3 Jun 2011 - 12:27
|
|
|
Wasserträger

Anmeldungsdatum: 21.05.2006
Beiträge: 42
|
|
Sophie hat folgendes geschrieben: | Deine Variable heißt 'object', aber du fragst nach 'objekt'? :) |
Das sind in der Tat zwei verschiedene Variabeln, die soweit ich weiß nichts miteinander zu tun haben. Die Variable heißt auch x und ist vom Typ object - du hast den Quellcode falsch gelesen, glaube ich. Im Original heißt das Objekt "objekt" auch anders - ich habe nur hier fürs Forum alles "anonymisiert" ;o) ... |
|
|
|
 |
|
Verfasst am:
Sa, 4 Jun 2011 - 18:59
|
|
|
Wasserträger

Anmeldungsdatum: 29.08.2002
Beiträge: 50
|
|
Die genannten Fehler mit der Statuszeile und den Abfragen sind in der neuen Version 3.0.4 behoben. Daneben gibt es noch ein paar Detailverbesserungen, Programmdateien für Windows und Mac und für Interessierte auch den Quelltext des Interpreters:
http://www.oliver-berse.de/ |
|
|
|
 |
|
Verfasst am:
Sa, 4 Jun 2011 - 19:13
|
|
|
Wasserträger

Anmeldungsdatum: 29.08.2002
Beiträge: 50
|
|
Zitat: | Das funktioniert jetzt, aber was habe ich bei obiger Konstruktion falsch gemacht, dass sie nicht funktionierte? |
Bei der Auswertung des Operators ! in den Abfragen konnte leider ein Fehler auftreten. Das folgende Beispiel funktioniert jetzt:
Code: |
class raum:stdroom {
setShort("+Raum");
setLong("Ein Raum.^");
void goto(int dir, object x) {
int north = 0;
switch(dir) {
case(D_NORTH);
if (dings.in(spieler) && !north) {
write("Text 1^");
north = 1;
}
if( dings.in(spieler) && north) {
write("Text 2^");
}
if (!dings.in(spieler)) {
write("Text 3^");
}
break;
default;
write("Stopp!^");
}
}
}
class dings:stditem {
setShort("Dings");
moveto(spieler);
}
class spieler:stdcreature {
moveto(raum);
}
void main() {
setPlayer(spieler);
} |
|
|
|
|
 |
|
Verfasst am:
So, 5 Jun 2011 - 16:23
|
|
|
Wasserträger

Anmeldungsdatum: 29.08.2002
Beiträge: 50
|
|
Der Fehler im not-Operator hat ein weiteres Update notwendig gemacht, aktuell ist jetzt 3.0.4a. |
|
|
|
 |
|