Forum moved to if-forum.org
Autor Nachricht
<  Probleme mit if-Anweisung
Lukas
BeitragVerfasst am: Fr, 3 Jun 2011 - 8:33  Antworten mit Zitat
Wasserträger
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?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sophie
BeitragVerfasst am: Fr, 3 Jun 2011 - 11:27  Antworten mit Zitat
Wasserträger
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'? :)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Lukas
BeitragVerfasst am: Fr, 3 Jun 2011 - 12:27  Antworten mit Zitat
Wasserträger
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) ...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Oliver Berse
BeitragVerfasst am: Sa, 4 Jun 2011 - 18:59  Antworten mit Zitat
Wasserträger
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/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Oliver Berse
BeitragVerfasst am: Sa, 4 Jun 2011 - 19:13  Antworten mit Zitat
Wasserträger
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);
}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Oliver Berse
BeitragVerfasst am: So, 5 Jun 2011 - 16:23  Antworten mit Zitat
Wasserträger
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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
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  >  Floyd

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