Autor |
Nachricht |
< Anfängerfrage: Welche deutsche Library? |
|
Verfasst am:
Mo, 14 Dez 2009 - 9:38
|
|
|
Experte

Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München
|
|
Zitat: | ... deshalb ist das ein klein wenig so, als würde einem Bjarne Stroustrup oder so antworten :) |
Na, das sind ja Vergleiche!
(Darüber, ob die Syntax von TAG oder von C++ hässlicher ist, wollen wir uns aber jetzt nicht streiten, oder?)
Zitat: | Welche Lösung ist da im Normalfall vorzuziehen?
Soweit ich das bisher verstanden habe, sind Attribute flags, also Boolean-Werte, und darum doch in einem solchen Falle vorzuziehen, oder nicht? |
Du hast recht, die Lösung verlangt einen Wahrheitswert und ein Attribut ist genau das. Trotzdem ist die Musterlösung aus dem DM4 die bessere, zumindest in diesem Fall.
Attribute sind Flaggen für Objekte. Jedes Objekt kann ein Attribut haben, ohne dass es explizit beim Objekt definiert werden muss. Allerdings ist die Anzahl der Attribute auf 48 beschränkt.
(Attribute sind ein Mechanismus der z-Maschine: Jedes Objekt hat in seinem Kopf ein Feld mit 48 Bits, die beliebig gesetzt und gelöscht werdenkönnen. Das sind die Attribute.)
Properties müssen in einem Objekt definiert werden, damit man sie später verwenden kann und stehen natürlich dann auch nur bei diesen Objekten zur Verfügung. Ob ein Objekt eine Property bereitstellt, kann man mit provides prüfen. Auf eine Property in einem Objekt zuzugreifen, wenn es diese Property nicht hat, ist ein Fehler. Wenn man also bei einem Objekt irgendwann einmal eine Property benötigt, muss man einen Dummy-Wert definieren. Der Vorteil von Properties ist, dass sie unbegrenzt zur Verfügung stehen.
Da das Pflücken des Pilzes nur für den Pilz interessant ist, sollte man hier eine Property beim Pilz definieren, damit keins der 48 Attribute "verschwendet" wird.
Die Lib unterscheidet allerdings bereits, ob ein Gegenstand bereits aufgehoben (oder "bewegt") wurde und belegt alle Objekte, bei denen ein ##Take erfolgreich war und alle Objekte, die zu Beginn des Spiels beim Spieler sind mit dem Attribut moved. Hier wird ein Attribut verwendet und das ist auch sinnvoll, da dieser Mechanismus so bei allen Objekten verfügbar ist, ohne, dass der Autor bei jedem Objekt eine Property definieren muss.
(Das ist, wie fast immer in Inform, nur die halbe Wahrheit: Inform unterscheidet zwischen common properties und individual properties. Die z-Maschine implementiert das Konzept der Properties, ist aber auf 64 Properties beschränkt. Alte Versionen von Inform hatten diese Beschränkung ebenfalls, so dass viele Objekte die Dummy-Property number definieren, die dann aber von jedem Objekt individuell genutzt wird, d.h. die eigentlich bei jedem Objekt eine andere Bedeutung hat. Common Properties haben einen Default-Wert, so dass man bei einem Objekt, das eine Common property nicht definiert zumindest Lesezugriff darauf hat. Mit Property wird eine Property als Common deklariert und dort kann man auch den Default-Wert definieren.
Inform 6 hat das Konzept der Properties erweitert, so dass man nun Properties definieren kann, ohne sie extra vorher als solche zu definieren. Die Definition der Property muss jedoch in einem Objekt auftreten, bevor sie zum ersten Mal verwendet werden kann.)
(Die Musterlösung zur selben Aufgabe in einer älteren Ausgabe des Inform-Manuals verwendet übrigens wie du ein Attribut, allerdings kein eigens definiertes, sondern das Allzweckattribut general.)
(Dass man über die Attribute und über die common properties die Möglichkeit hat, allgemein gültige Regeln zu definieren, ist natürlich schön, aber man könnte es ja auch dadurch erreichen, dass man zum Beispiel alle Objekte im Spiel zur Klasse Thing und alle Räume zur Klasse Room gehören lässt, die dann die entsprechenden Properties definieren. So würde man es wohl in TADS2 machen.) _________________ Every silver lining has a cloud. |
|
|
|
 |
|
Verfasst am:
Mo, 14 Dez 2009 - 15:31
|
|
|
Neuling

Anmeldungsdatum: 08.12.2009
Beiträge: 8
|
|
Martin hat folgendes geschrieben: |
Die Lib unterscheidet allerdings bereits, ob ein Gegenstand bereits aufgehoben (oder "bewegt") wurde und belegt alle Objekte, bei denen ein ##Take erfolgreich war und alle Objekte, die zu Beginn des Spiels beim Spieler sind mit dem Attribut moved. Hier wird ein Attribut verwendet und das ist auch sinnvoll, da dieser Mechanismus so bei allen Objekten verfügbar ist, ohne, dass der Autor bei jedem Objekt eine Property definieren muss. |
Sowas dachte ich schon. Das war einer der Gründe, warum ich ein Attribut für richtiger hielt: Ob etwas bewegt wurde, ist immer mal wieder wichtig.
Also ist der beste code eigentlich sowas:
Code: | after [;
Take: if (self hasnt moved) "You pick the mushroom, neatly cleaving its thin stalk.";
"Du nimmst ihn wieder auf";
Drop: "The mushroom drops to the ground, battered slightly.";
], |
Zitat: | (Die Musterlösung zur selben Aufgabe in einer älteren Ausgabe des Inform-Manuals verwendet übrigens wie du ein Attribut, allerdings kein eigens definiertes, sondern das Allzweckattribut general.) |
Da fragt man sich nur, was man da machte, wenn man mehr als ein Attribut brauchte, aber das würde nun zu weit gehen ;)
Zitat: | zum Beispiel alle Objekte im Spiel zur Klasse Thing und alle Räume zur Klasse Room gehören lässt, die dann die entsprechenden Properties definieren. |
Sowas hatte ich schon im Hinterkopf.. Dass Räume und Dinge beide Objekte sind, fand ich sowieso recht hässlich.
---
Gibt es eigentlich irgendeine brauchbare Entwicklungsumgebung für Inform 6, mit Einfärbung, Autoverfollständigung (besonders bei den möglichkeiten in before und after wär' das praktisch) und so?
Ich hätte da einen namens "wide" gefunden, aber das linux-binary ist defekt (das GUI kommt zwar, aber keinerlei Sourcecode zu sehen)
Zuletzt bearbeitet von Klaue am Mo, 14 Dez 2009 - 19:55, insgesamt einmal bearbeitet |
|
|
|
 |
|
Verfasst am:
Mo, 14 Dez 2009 - 19:55
|
|
|
Experte

Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
Klaue hat folgendes geschrieben: | Dass Räume und Dinge beide Objekte sind, fand ich sowieso recht hässlich. |
Inform 7 hat das schon vordefiniert als die Objektklassen (die da "kinds" heißen) room und thing. Und auch bei den Typen ist Inform 7 etwas pingeliger.
Klaue hat folgendes geschrieben: | Gibt es eigentlich irgendeine brauchbare Entwicklungsumgebung für Inform, mit Einfärbung, Autoverfollständigung (besonders bei den möglichkeiten in before und after wär' das praktisch) und so? |
Vielleicht die hier:
http://wide.berlios.de/
Ansonsten gibt es in Roger Firths Inform FAQs eine ganze Menge Infos:
http://www.firthworks.com/roger/informfaq/index.html
Grüße,
Christian |
|
|
|
 |
|
Verfasst am:
Mo, 14 Dez 2009 - 19:56
|
|
|
Neuling

Anmeldungsdatum: 08.12.2009
Beiträge: 8
|
|
Heh, mein Edit kam wohl zu spät :)
Wide klappt leider nicht
Die im FAQ noch erwähnten sind entweder nur Windows oder bessere Texteditoren, was auch nicht viel hilft |
|
|
|
 |
|
|
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.
|
|