Random Trigger Targets III
Aus EnigmaWiki
Verfügbare Sprachen: Deutsch, English, Русский
Inhaltsverzeichnis |
Zufällige Ziele für Schalter
Problemstellung
Es ist eine gewisse Anzahl Schalter und die gleiche Anzahl Ziele vorhanden. Es soll bei Levelstart ein zufällige Zuordnung zwischen je einem Schalter und einem Ziel geben.
Lösungsansatz
Wir nummerieren die Ziele fortlaufend und speichern diese in einem Array. Dann nehmen wir diesen Array und vertauschen jeweils 2 zufällig ausgewählte Objekte. Dies wiederholen wir so oft wir wollen.
Annmerkung: Ich weiss nicht, wie zufällig die Verteilung ist und wo die Grenzen dieser Herangehensweise liegen. Es kann z.B. durchaus sein, dass die Schalter-Ziel relationen nicht immer genügend stark durchmischt sind. Dies kann besonders oft der Fall sein, wenn zu wenig stark gemischt wird. Für alle "normalen" Anwendungen sollte es aber ausreichen. Diese Methode hat aber den grossen Vorteil, dass ihre Laufzeit bekannt ist, und nicht von den Zufallszahlen abhängt.
Lösungsbeispiel
targets = {1,2,3,4,5,6} num_targets = table.getn(targets) num_swaps = 10 -- sollte grösser als num_targets sein! for i=1,num_swaps do r = random(1,num_targets) s = random(1,num_targets) targets[r], targets[s]=targets[s], targets[r] end for i=1,num_targets do set_item("it-trigger",2+i,2,{action="openclose", target="my_door"..tostring(targets[i])}) end for i=1,num_targets do set_stone("st-door_a",2+i,5,{name="my_door"..tostring(i)}) end
Analyse
Zuerst werden einige Variablen definiert:
- Der Array
targetsenthält so viele Zahlen, wie wir Objekte haben.
Sind es sehr viele, kann der Array auch automatisch generiert werden.
-
num_targetssagt uns, wie viele Ziele vorhanden sind.
-
num_swapsist eine Zahl, die besagt wie viele Vertauschungen gemacht werden sollen. Die Zahl sollte grösser sein, als die Zahl der Objekte (num_targets).
In der ersten For-Schlaufe werden die Elemente im Array durchmischt. Dies wird num_swaps mal wiederholt.
In der zweiten For-Schlaufe werden die Schalter gesetzt. Ihnen wird nun jeweils ein Ziel aus dem Array zugeteilt.
In der dritten For-Schlaufe werden noch die Ziele gesetzt.

