Geschrieben um 08:46 am 20.07.2010 | Zitat | Editieren | Löschen | |
Mitglied Bachelor Gumby Beiträge: 40 | Hallo an alle: Auf meinem Hof steht ein kleines Klohäuschen. Das ist gleichzeitig Behälter und Raum. Somit kann ich das Klo von außen betrachten (<<Examine>> bringt "Ein einfacher Bretterverschlag steht am Hofrand.") als auch betreten (<<Look>> bringt: "Du befindest dich..."); im zweiten Fall sind die Dinge auf dem Hof weder sicht- noch erreichbar. Bisher würde ich daraus zwei Objekte machen, eines aus der Klasse Raum und einen Behälter. Ein <<Enter>>-Befehl bezgl. des Behälter wird abgefangen und in einen <<go>>-Befehl umgewandelt. Lässt sich das vereinfachen? Dazu zwei Ideen:
Beides klingt nach viel Programmieraufwand, so dass mir das bisherige Verfahren (2 Räume + 1 scenery-Objekt) am simpelsten erscheint. Wie handhabt ihr solche Strukturen? (Gibt es eigentlich eine maximale Anzahl von Objekten, Räumen, Variablen u.s.w., die Inform verarbeiten kann?) Schöne Grüße, Christof |
Geschrieben um 16:09 am 20.07.2010 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 634 | Unterräume gibt es in Inform nicht. Ich sehe hier zwei sinnvolle Möglichkeiten. Welche Du wählst, hängt davon ab, was der Spieler machen kann und soll. Die einfachere Lösung: Behandle das Klohäuschen wie einen Raum, der, sagen wir mal, nördlich vom Hof ist. Zusätzlich erstellst Du ein scenery-Objekt auf dem Hof, das vielleicht noch als door fungiert. Alle relevanten Aktionen - betreten, hieinschauen und so - fängst Du bei diesem Objekt ab. Die beiden Räume sind voneinander unabhängig: Wenn man im Häuschen ist, kann man nicht mit den Dingen auf dem Hof interagieren und umgekehrt. Das ist gewiss in Ordnung so. Ausnahmen könne ja immer noch programmiert werden.
(Siehe hierzu auch die I7-Übung Starry Void.) Die etwas kompliziertere Lösung ist, das Häuschen zu einem enterable, openable, static container zu machen - dann kann man das Häuschen betreten, die Tür von innen zumachen und sogar von draußen Sachen hineinlegen. So etwas würde ich machen, wenn es wichtig ist, dass man die Dinge sowohl aus dem Häuschen als auch vom Hof aus sehen und handhaben soll.
(Siehe hierzu auch die I7-Übung Tamed.) (Die inkonsistenten Texte und Beschreibungen zu korrigieren ist als Aufgabe für den Leser gedacht, ich wollte nur zeigen, wie's im Prinzip funktioniert.) C++:
Räume sind in Inform auch Objekte. Diese sind eigentlich nicht beschränkt. Der Compiler kann aber nur eine gewisse Anzahl von Objekten erzeugen. Dieses Limit kann man aber beim Aufruf mit (glaube ich) $MAX_OBJECTS=700 hochsetzen. Für z-Code gilt, dass alle Objektdaten in den Speicherbereich unter der 64k-Grenze passen müssen, und den teilen sich die Objekte mit den Vokabeln, der Grammatik, den Variablen, den Felddaten und dem Dateikopf. Wenn das Limit erreicht ist (was nicht sehr wahrscheinlich ist), kann man sich im DM4 das Kapitel zu den Sparmaßnahmen durchlesen oder direkt beim Kompilieren -G wie Glulx sagen. Die Anzahl der globalen Variablen ist auf 237 oder so begrenzt und die Lib verbraucht davon schon gut die Hälfte. Die Anzahl der Properties ist für alle praktischen Belange unbegrenzt, daher wird empfohlen statt globalen Variablen individuelle Properties zu verwenden. |
Geschrieben um 20:19 am 20.07.2010 | Zitat | Editieren | Löschen | |
Mitglied Bachelor Gumby Beiträge: 40 | Dank dir, Martin! Die beiden von dir genannten Möglichkeiten hatte ich in etwa auch im Sinn. Nur habe ich mal nicht auf die Schnelle rund 70 Zeilen Code aushusten können... Ich werde es so machen, wie du vorgeschlagen hast: ein Scenery-Object, dessen Betreten in ein go-to umgewandelt wird. Ich habe übrigens gerade ausprobiert, was passiert, wenn man ein Tochterobjekt (ein Stuhl in einer Stube) über eine n_to Property anstatt über <<Enter>> ansteuert. Alles im Raum ist weiterhin problemlos sicht- und erreichbar, ein Befehl funktioniert jedoch nicht, nämlich <<Ende>>. Man muss den Interpreter schließen. Schöne Grüße, Christof |