| Geschrieben um 13:05 am 24.01.2005 | Zitat | Editieren | Löschen | |
Mitglied Dr Gumby Beiträge: 181 | Ich habe eine Frage zu ScopeWithin: Bei: “`[ AskTopicsScope; switch (scope_stage) { 1: rfalse; 2: ScopeWithin(AskTopics); rtrue; …“` Müssen ja alle Topics als Kinder von AskTopics angelegt werden. Gibt es eine Möglichkeit, ALLE Objekte mit einzubeziehen? So müsste ein sowieso schon bestehenedes Objekt nicht nocheinmal angelegt werden sondern nur die, die noch nicht als Objekte existieren. Es muß doch soetwas wie eine “Mutter” aller Objekte geben (gibt es nicht, klar, weil es auch Waisen gibt). Aber was ich meine, sollen ähnlich wie bei “ObjectLoop (o)” eben alle Objekte berücksichtigt werden. Der Versuch mit “ScopeWithin()” schlug leider fehl. Dank und Gruß Kris |
| Geschrieben um 13:21 am 24.01.2005 | Zitat | Editieren | Löschen | |
Mitglied Retired Gumby Beiträge: 707 | <td valign="top"><div class="post"><p>Wieso machst du es nicht so, wie es in Aufgabe 99 beschrieben wird? Du bist ja nicht unbedingt an <strong>ScopeWithin</strong> gebunden, du kannst ja auch <strong>PlaceInScope</strong> verwenden:</p> <p>“`</p> <p>[ AskTopicsScope i;</p> <p> if (scope_stage == 1) rfalse;</p> <p> if (scope_stage == 2) {</p> <p> objectloop (i ofclass Object) PlaceInScope(i);</p> <p> rtrue;</p> <p> }</p> <p> “Du fragst Sachen!”;</p> <p>];</p> <p>“`</p> <p>Probier das mal. Wenn das klappt, könntest du die Objekte, die man erfgaren kann, einschränken, indem du mögliche Objekte mit einem neu zu definierenden Attribut kennzeichnest:</p> <p>“`</p> <p> objectloop (i ofclass Object && i has validtopic)</p> <p> PlaceInScope(i);</p> <p>“`</p> <p>Das ist vielleicht zuviel des Guten, aber ein großer Scope bedeutet auch viel Arbeit für den Parser, so dass diese Option vielleicht nützlich ist, wenn das Spiel durch den alles umfassenden Scope arg langsam wird.</p> <p>Vielleicht wird die Analyse aber auch bereits durch den globalen <strong>objectloop</strong> langsam, dann könntest du vielleicht ein Feld mit gültigen Topics schreiben, die dann dem Scope hinzugefügt werden:</p> <p>“`</p> <p>Array validtopics table Napoleon Descartes Jacques_Chirac;</p> <p>[ AskTopicsScope i;</p> <p> if (scope_stage == 1) rfalse;</p> <p> if (scope_stage == 2) {</p> <p> for (i=1 : i<=validtopics—>0 : i++)</p> <p> PlaceInScope(validtopics—>i);</p> <p> rtrue;</p> <p> }</p> <p> “Du fragst Sachen!”;</p> <p>];</p> <p>“`</p> <p>Auf diese Weise behalten die Objekte ihren Platz im Baum, können aber trotzdem einigermaßen zügig in den Scope gebracht werden.</p> <p><strong>Kris:</strong></p> <blockquote> <p>Der Versuch mit “ScopeWithin()” schlug leider fehl.</p> </blockquote> <p>Das ist klar. Du versuchst hier, die Kinder von <strong>nichts</strong> zu finden und das ist laut z-Maschinen-Spezifikation etwas ganz, ganz Böses…</p> </div></td> |
| Geschrieben um 16:05 am 24.01.2005 | Zitat | Editieren | Löschen | |
Mitglied Dr Gumby Beiträge: 181 | Martin:
Weil ich dummerweise die Aufgaben manchmal überlese obwohl ich dort immer wieder Antworten auf meine Fragen bekommen habe ;-) Jedenfalls habe ich das eben mal ausprobiert und es funktioniert. Martin:
Also langsam ist es nicht, ich bin bei ca. 250 Objekten, aber auch noch nicht fertig. Kann aber auch nicht testen, wie lange es auf einem langsameren System dauert, da PentiumII das langsamste ist, was ich zu Hause habe und ich nicht glaube, hier schon einen Unterschied zu bemerken. Ich werde es jetzt jedenfalls erstmal so belassen. Vielen Dank! Kris |
| Geschrieben um 17:12 am 24.01.2005 | Zitat | Editieren | Löschen | |
Mitglied Retired Gumby Beiträge: 707 | Kris:
Die Aufgaben gehören im DM4 auf jeden Fall mit zur Lektüre. Manche Dinge, wenn auch nur selten benutzte, werden nur in Aufgaben angesprochen, wie zum Beispiel in den Aufgaben 65 (lookmode) und 91 (NounDomain). Außerdem sind die Aufgaben sehr gute Beispiele für elegantes Coden in Inform. PlaceInScope(obj) wird aber auf Seite 234 ohne Zusammenhang zu Aufgaben beschrieben :-> Kris:
Fein. (Hatte es nämlich nicht getestet.) |