Geschrieben um 12:12 am 29.07.2010 | Zitat | Editieren | Löschen | |
Mitglied Bachelor Gumby Beiträge: 40 | Hallo an alle! Ich möchte in einem Raum einen Haufen Putzgeäte abstellen. Diese sollen einzeln angesprochen werden können, aber sonst als Gruppe oder Liste aufgeführt werden, etwa so: Zitat:
Es handelt sich um einen Besen, einen Eimer und eine Kehrschaufel.
Ein oller Reisigbesen.
Was meinst du - den Besen, den Eimer oder die Kehrschaufel. Ich weiß noch nicht, wie ich das realisieren soll, habe aber drei Ideen: Eine Möglichkeit ist eine Objektklasse mit list-together-Property. Diese erlaubt m.W. nur langweilige Ansagen wie "Du siehst hier, dass drei Putzgeräte in der Ecke stehen, nämlich ...". Frage 1: Lässt sich die Property modifizeren, dass die Meldung "Du siehst hier" unterdrückt oder abgewandelt wird? Eine andere Möglichkeit wäre ein zusätzliches Objekt "Putzgeräte", das über den Objektnamen 'putzgeraete' angesprochen werden kann und eine Liste ausgibt. Jedoch habe ich keine Möglichkeit gefunden, mit WriteListFrom nur die Objekte einer Klasse auszugeben, etwa so: Die dritte Idee ist, in der Besenkammer einfach einen Behälter "Ecke" zu definieren und über before [;Receive: ...] alles in den Rest der Besenkammer zu schmeißen, was nicht Putzgerät ist. Die Ecke bekommt dann ein Initial mit einem WritelistFrom oder sie geht gleich in die Raumbeschreibung. Das müsste gehen, scheint mir aber etwas zu aufwändig. Frage 3: Hat das schon mal jemand gemacht und/ oder bessere Ideen? Ich freu mich über Hinweise, Antworten etc. Christof |
Geschrieben um 17:10 am 29.07.2010 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 634 | So einfach geht das, was Du willst, leider nicht. Und ich glaube, Du machst Dir hier alles ein wenig zu kompliziert. C++:
Genau. Diese erlaubt zwar nicht, wie Du meinst, langweilige Ansagen und kann schon gar nicht dazu verwendet werden, um Sätze wie "In der Ecke steht" oder so zu verwenden. Die Property list_together bewirkt, dass in Listen - ob nun im Inventar, on Räumen oder in Behältern - Objekte, deren Eigenschaft list_together denselben Wert hat, zusammen stehen. Wenn dieser Wert ein Text ist, etwa "Putzgeräte", dann wird dieser Wert der Unterliste vorangestellt. Wenn dieser Wert eine Routine ist, kann man alles noch viel flexibler machen. (Die so generierten Listen werden dann allerdings in den langweiligen Ansagen verwendet.) Mit list_together könnte man also alles machen, was Du möchtest, außer, dass man die Putzgeräte nicht kollektiv ansprechen kann: Frotz:
Hier kannst du nur ein Objekt angeben.
Besen: In Ordnung. Kehrblech: In Ordnung. Eimer: In Ordnung. Das ist vielleicht nicht so schön, aber so ist auf jeden Fall klar, dass das Putzzeug wichtig ist und dass man die Dinge einzeln nehmen kann. Die Stückeltaktik beim Aufheben macht selbst das auf Story fixierte I7 noch so. (Die alternative Platypus-Lib hatte einen narrative mode, der versucht hat, ganze Sätze aus den Listen zu machen, also etwa "Du hast jetzt den Eimer, den Besen und das Kehrblech".) C++:
Listen kann man mit dem Attribut workflag einschränken:
C++:
Ich würde den Behälter "Putzgeräte" nennen. Das wäre dann so ähnlich wie die beiden Handschuhe aus Aufgabe 14 im DM4, die man einzeln oder zusammen ansprechen kann. Ein anderen Link, der Dich vielleicht interessiert, sind die in die Raumbeschreibung integrierten Objekte von Andrew Plotkin. Man könnte auch nur ein Objekt Putzgeräte vorhalten, das dann durch die tatsächlichen Putzobjekte ersetzt wird, wenn man etwas anderes macht, als sie zu untersuchen. Oder man könnte die description-Property des Raums so hinbiegen, dass sie die Putzgeräte in der Kammer so zeigt, wie Du es willst. Ansonsten wären der Besen und der Eimer dann normale Objekte:
Viele Möglichkeiten, die alle nicht trivial sind. Vielleicht solltest Du Dir den Aufwand sparen und die Kammer noch einmal überdenken. |
Geschrieben um 20:27 am 29.07.2010 | Zitat | Editieren | Löschen | |
Mitglied Bachelor Gumby Beiträge: 40 | Hallo und schönen Dank, Martin! Mit langweilige Ansage meinte ich genau die Floskel "Du siehst hier", die ich gern ersetzen möchte. Mir wird jetzt so langsam klar, dass meine zweite und dritte Idee wohl auf eigentlich denselben Trick rauslaufen. Die Funktion der Workflag war mir bisher so nicht bekannt, jetzt habe ich sie begriffen. (Auch dafür: Danke.) Die von dir genannten Objekt auf der S.S. Gigantic sind ein kleiner Hinrnverzwirbler. Ich verstehe sie folgendermaßen: Die General-Flag dient dazu, alle in der Putzgeräte-Liste aufgeführten (mit Workflag versehenen) Utensilien in der Raumbeschreibung qua describe zu unterdrücken. So wird jedes Objekt nur einmal genannt. Das klingt gut und leistet ziemlich genau das, was ich will, aber eben, wie du sagtest, relativ aufwändig. (Macht aber nichts, die Besenkammer und die Geräte sind essenziell.) (Vorerst) letzte Frage: Statt "pname" meintest du die plural-Property, oder? Pname habe ich jedenfalls weder im DM4 noch in der Lib gefunden... Schöne Grüße, Christof |
Geschrieben um 07:16 am 30.07.2010 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 634 | C++:
Genau. das erste Putzmittel ist dafür verantwortlich, die Liste zu schreiben. Alle aufgelisteten Putzmittel bekommen die Attribute general und workflag als Zeichen dafür, dass sie schon genannt wurden. Eigentlich müsste workflag reichen, aber ich verwendet hier auch general, das als Allround-Attribut vorgdefiniert ist, weil man nie weiß, was die Lib noch so mit der workflag anstellt. In meinem Beispiel aber wahrscheinlich nichts. Außerdem hat mein Code noch einen Bug: Man müsste nach jedem Zug, mit einem daemon oder so, das Attribut general wieder löschen. War nicht genug getestet, entschuldige. C++:
Die Frage ist aber, ob es auch essenziell ist, das alles so kompliziert zu implementieren und ob das dem Spieler etwas bringt, der vielleicht eher verwirrt wird. Das werden Dir die Tester aber schon sagen. C++:
Nein, ich meinte schon pname, das allerdings keine Library-Property ist. Ich hatte es beim Rumspielen eingeführt, um es in einer parse_name zu verwenden, die ich aber wieder verworfen habe. Mit dem Beispiel hat das nicht zu tun. Die pname-Vokabeln sollten allerdings zu name gehören und vermutlich auch alle die '...//p'-Notation für Plurale verwenden. |
Geschrieben um 16:33 am 02.08.2010 | Zitat | Editieren | Löschen | |
Mitglied Bachelor Gumby Beiträge: 40 | Moin! Zitat: Die Frage ist aber, ob es auch essenziell ist, das alles so kompliziert zu implementieren und ob das dem Spieler etwas bringt, der vielleicht eher verwirrt wird. Das werden Dir die Tester aber schon sagen. Stimmt sicher, ich bin ja noch in der Lernphase; bis ein gutes Abenteuer rauskommt, wird's wohl noch etwas dauern. Aber ich will natürlich alle technischen Möglichkeiten kennen, bevor ich sie am Ende doch nicht ausschöpfe. Bis (sicher) bald... Christof |