Objekte und ihre Erzeugung

Die meisten Objekte im Spiel gehören entweder zu den Klasseen thing oder room. Eigene oder bereits vorhandene Unterklassen (container, supporter) erheben direkt oder über Zwischenschritte von einer dieser beiden Klassen. (Daneben gibt es etwa noch direction, und alle zusammen erben von der obersten Klasse object.)

Konstruktoren im eigentlichen Sinn gibt es nicht, durch das Verb “is” in einer deklarativen Aussage wird ein Objekt einer Klasse erzeugt:

The red cap is a thing.

Dabei geschehen drei Dinge:

  1. Der Bezeichner des Thing-Objekts ist red cap. Den Bezeichner kann man nachträglich nicht ändern.
  2. Das Attribut printed name des Objekts wird auf den Wert “red cap” gesetzt. Das ist der Name des Objekts, der in der Anzeige ausgegeben wird. Der Name kann zum Beispiel deutlich länger sein als der Objektbezeichner, vor allem kann der Attributwert im Lauf des Spiels natürlich geändert werden: Instead of eating the cap: now the printed name of the cap is "piece of cloth with teeth marks".
  3. Die Wörter “red” und “cap” werden mit dem Objekt assoziiert, damit der Parser weiß, wie er diese Wörter interpretieren soll. Technisch geschieht das durch ein name-Attribut des Objekts, in das man als Autor aber keinen unmittelbaren Einblick hat. Man kann der Menge assoziierter Vokabeln bei der Erzeugung von Objekten weitere hinzufügen:

    Understand "hat" as the cap. Understand "piece of cloth", "cloth", "teeth marks" as the cap when the printed name of the cap is "piece of cloth with teeth marks".

    Alles was nach dem when im letzten Satz kommt, ist eine Bedingung (mit dem Ergebnis true/false). Diese Bedingung kann natürlich alle möglichen Formen annehmen.


Dynamische Erzeugung von Objekten zur Laufzeit: Gibt es erst einmal nicht. Mit der Extension Dynamic Objects kann man sich selber einen Konstruktor schreiben, mit dem man auch zur Laufzeit ein neues Objekt einer Klasse erzeugen kann, indem man etwa schreibt:

[Wenn eine bestimmte Situation gegeben ist:]
let the newcomer be a new camel;
now the newcomer is in the desert.

Aber das ist tatsächlich nur eine unschöne Notlösung.

Schreibe einen Kommentar