IF-Forum

» IF-Forum - Autorencafé - Schreiben! - I6 Reihenfolge der Tocherobjekte ändern
AntwortenNeues ThemaNeue Umfrage

I6 Reihenfolge der Tocherobjekte ändern

Geschrieben um 23:49 am 13.05.2011 | Zitat | Editieren | Löschen
C++
Mitglied
Bachelor Gumby
Beiträge: 40

Moin zusammen!

Gibt es eine in der Lib vorgesehene Möglichkeit, die Reihenfolge der Objekte innerhalb einer Objekthierarchie (genauer: innerhalb einer Hierachiebene) zu ändern? Die Anwendung, die ich im Kopf habe, bezieht sich auf Menu- und Option-Objekte in der Erweiterung menu.h:


Option option1 -> "Wie komme ich an der Stadtwache vorbei?"

   with description [; print "Versuch doch, sie zu bestechen.^"; move suboption1 to hilfe1;];

Option option2 -> "Wie bekomme ich das Felsentor auf?"

   with description [; print "Du musst die Zauberformel kennen.^"; move suboption2 to hilfe1;];

Option suboption1 "Womit denn bestechen?"

   with description "Unter zwanzig Piaster musst du es erst gar nicht versuchen.";

Option suboption2 "Und wie lautet das Zauberwort?"

   with description "Na, wie wohl? ~Sesam öffne dich.~";

      

Das heißt, das Menü soll m.o.w. interaktiv sein und gewisse Menüoptionen erst nennen, wenn sie vorher in einer Antwort angekündigt wurden. (So kann der Spieler sich zuerst Gedanken machen, wie das Tor aufgeht, ohne dass er im Hilfe-Menü auf die Idee mit der Zauberformel gebracht wird.)

Diese Optionen sollen aber unabhängig von der Reihenfolge des Anwählens direkt unter der Frage angeordnet werden, die sie erweitern, also suboption1 unter option1 usw. (War das verständlich?)

Das Problem ist wahrscheinlich leicht mit ein, zwei Flaggen zu lösen, indem Optionen gelöscht und in der gewünschte Reihenfolge wieder ins Menü eingeordnet werden. Bevor ich das ernsthaft versuche (oder mir gar den Code von menu.h in Gänze reinziehe), wüsste ich gern, ob es eine elegantere Möglichkeit gibt, die sowieso schon lange existiert.

Schöne Grüße

Christof

Geschrieben um 09:23 am 14.05.2011 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634
<td valign="top"><div class="post"><p>Ich kenne menu.h nicht. Vielleicht kann man ja Objekte als bereits gelesen kennzeichnen? Dann könnte man die gesamte Baumstruktur inklusive der versteckten Optionen definieren und würde dann diese Kennzeichnung rückgängig machen anstatt neue Objekte ins Menü zu verschieben.</p> <p>Alternativ könntest Du eine Routine schreiben, die das Objekt dorthin verschiebt, wo Du es haben willst. Mit der Inform-Anweisung 'move o to p' wird das Objekt immer so verschoben, dass o das älteste Kind von p ist.</p> <p>Mit einem Hilfsobjekt könntest Du die Objekte aber hin und her rangieren:</p> <pre><code class="language-Object"> &amp;#91; insert_after o a &amp;nbsp; &amp;nbsp; i p; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; p = parent&amp;#40;a&amp;#41;; &amp;nbsp; &amp;nbsp; if &amp;#40;p == nothing&amp;#41; &amp;#123; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print "&amp;#91; *** error&amp;#58; tried to insert object #", &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; o, " after object #", a, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ", whose parent is nothing. ***&amp;#93;"; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return; &amp;nbsp; &amp;nbsp; &amp;#125; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; i = child&amp;#40;p&amp;#41;; &amp;nbsp; &amp;nbsp; while &amp;#40;i&amp;#41; &amp;#123; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; move i to Abstellgleis; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if &amp;#40;i == a&amp;#41; break; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; i = child&amp;#40;p&amp;#41;; &amp;nbsp; &amp;nbsp; &amp;#125; &amp;nbsp; &amp;nbsp; move o to p; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while &amp;#40;child&amp;#40;Abstellgleis&amp;#41;&amp;#41; move child&amp;#40;Abstellgleis&amp;#41; to p; &amp;#93;;``` Wenn Du kein Hilfsobjekt anlegen willst, kannst Du die Objekte zwischen o und a auch rekursiv durchmischen: </code></pre> <p>&#91; ia_shuffle_up o a;</p> <p>    if &#40;o == nothing&#41; return;   </p> <p>    if &#40;o ~= a&#41; ia_shuffle_up&#40;sibling&#40;o&#41;, a&#41;;</p> <p>    move o to parent&#40;o&#41;;</p> <p>&#93;;</p> <p>&#91; insert_after o a</p> <p>    p;</p> <p>   </p> <p>    p = parent&#40;a&#41;;</p> <p>    if &#40;p == nothing&#41; &#123;</p> <p>        print &quot;&#91; *** error&#58; tried to insert object #&quot;,</p> <p>            o, &quot; after object #&quot;, a,</p> <p>            &quot;, whose parent is nothing. ***&#93;&quot;;</p> <p>        return;</p> <p>    &#125;</p> <p>   </p> <p>    move o to p;</p> <p>    ia_shuffle_up&#40;sibling&#40;o&#41;, a&#41;;</p> <p>&#93;;```</p></div></td>
AntwortenNeues ThemaNeue Umfrage
Powered by Spam Board SVN © 2007 - 2021
Impressum / Datenschutz