IF-Forum

» IF-Forum - Autorencafé - Schreiben! - Problem mit Objektzuweisung
AntwortenNeues ThemaNeue Umfrage

Problem mit Objektzuweisung

Geschrieben um 17:23 am 22.04.2009 | Zitat | Editieren | Löschen
Shot
Mitglied
Baby Gumby
Beiträge: 2

Ich habe Inform erst seit einigen Wochen, und obwohl ich alles genau so mache wie es in Designer's Manual steht, klappen die Objektzuweisungen nicht richtig.



    with

after [;

Open: "Das Gold in der Truhe überwältigt dich. Dort gibt es Diamanten, Ringe, Ketten und andere Dinge, die du noch nie zuvor gesehen hast.",

      deadflag = 2;

],

name "Truhe" "Schatztruhe" "Schatz"

decription "Eine Schatztruhe aus massivem Eichenholz. Wahrscheinlich ist das vergoldete Schloss an sich schon einiges wert...",

dekl 1,

has male;```

Wenn ich das jetzt kompiliere, gibt der Compiler keine Fehlermeldung aus, aber wenn ich z.B. "nehme schatztruhe" eingebe,

sagt der Interpreter "Du kannst nichts der gleichen sehen"

Was mache ich falsch?

Danke schon mal im Voraus^^

EDIT:Ich habs nochmal ausprobiert. Wenn ich "nehme truhe" eingebe

klappt es, aber mit den Begriffen hinter "truhe" (siehe "name")  nicht mehr.
Geschrieben um 18:03 am 22.04.2009 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Hallo,

Auf den ersten Blick stelle ich folgende Fehler oder Ungenauigkeiten fest:

Vokabeln sollten in einfachen Hochkommas geschrieben werden, also

name 'truhe' 'schatztruhe' 'schatz',

Vielleicht geht das auch mit doppelten Hochkommas, das wird aber im DM4 nicht so beschrieben.

Dann hast du nach der name-Property das Komma vergessen und zudem "decription" anstatt "description" geschrieben. Letzteres verursacht keinen Fehler, aber das Objekt hat dann eben keine Beschreibung, die Inform ausgibt.

Viel Erfolg!

Edit: Als ich "dekl 1" sah, vermutete ich, dass die ofizielle Lib verwendet wird. Aber das kann man auch in deform verwenden, was ich allerdings noch nie getan habe, da ich die einfache Lösung mit den Low-Strings vorziehe.

Geschrieben um 10:06 am 23.04.2009 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634

Hmm, also wenn ich das genau so kompiliere, sagt mir Inform:


> decription

line 87: Error:  No such constant as "decription"

Offensichtlich machst Du es also nicht genau so, wie es im Designers' Manual steht. Ich habe den Code leicht modifiziert und dann klappt alles so, wie es wahrscheinlich soll:


 Object -> Treasure "Schatz"

   with after [;

            Open:

                deadflag = 2;

                "Das Gold in der Truhe überwältigt dich. Dort

                gibt es Diamanten, Ringe, Ketten und andere

                Dinge, die du noch nie zuvor gesehen hast.";

        ],

        name "Truhe" "Schatztruhe" "Schatz",

        description

            "Eine Schatztruhe aus massivem Eichenholz.

            Wahrscheinlich ist das vergoldete Schloss an

            sich schon einiges wert...",

        dekl 1,

    has male openable;

Wie Christian schon geschrieben hat, solltest Du alle Eigenschaften mit einem Komma abschließen. Inform verwendet Kommas und Strichpunkte leider sehr, äh, eigenartig und ist sehr pingelig. Eine Übersicht darüber, wo ein Komma, wo ein Strichpunkt und wo gar nichts hinkommt, bietet das InformFAQ.

Außerdem schließt Du die Anweisung "Das Gold ..." mit einem Komma und nicht mit einem Semikolon ab*. Dadurch gehört die Zuweisung auf deadflag zur (impliziten) print_ret-Anweisung, deren Rückgabewert 2 an den text angehängt wird:

Frotz:

Das Gold in der Truhe überwältigt dich. Dort gibt es Diamanten, Ringe, Ketten und andere Dinge, die du noch nie zuvor gesehen hast.2

Du solltest hier einen Strichpunkt verwenden, und dann sagt der Compiler auch, dass die Zuweisung von deadflag nie erreicht wird. Warum nicht? Weil ein String stillschweigend als print_ret interpretiert wird und damit quasi ein return true ist.

Alle Codebeispiele mit deadflag im DM4, das Du ja angeblich genau befolgst, machen es so wie in meinem korrigierten Code: erst deadflag setzen, dann einen Text ausgeben.

Schließlich sollte die Truhe openable sein, denn sonst kann man sie nicht öffnen und after, das nur bei Erfolg berücksichtigt wird, wird nie ausgeführt.

Die Vokabeln in name in Gänsefüßchen zu setzen, ist legal, aber leider eine Ausnahme. An allen anderen Stellen (außer bei Verben) müssen Vokabeln in Hochkommas eingeschlossen werden. Ich finde es daher besser, auch in name diese Nomenklatur zu verwenden, obwohl das andere Probleme bereitet. (Übrigens, das DM4 verwendet auch Hochkommas.)


  • Man kann mehrere Anweisungen auch mit Kommas anstatt mit Semikolons abtrennen. Das wird zum Beispiel verwendet, um mehrere Anweisungen in einem der drei Bereiche einer for-Schleife unterzubringen oder um sich die geschweiften Klammern zu sparen:

    for (i = 1, j = 12 : j > 0 : i++, j--) {

        if (j % 3 == 0) i++, j--;

        print i, " * ", j, " = ", i*j, "^";

    }

Aber in diesem Fall ist das nicht richtig.

Geschrieben um 21:13 am 05.05.2009 | Zitat | Editieren | Löschen
Shot
Mitglied
Baby Gumby
Beiträge: 2

Ah, okay. Danke.

Ich habs neu kompiliert, und jetzt klappt's^^

AntwortenNeues ThemaNeue Umfrage
Powered by Spam Board SVN © 2007 - 2021
Impressum / Datenschutz