Random Trigger Targets III

Aus EnigmaWiki

Wechseln zu: Navigation, Suche
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 targets enthält so viele Zahlen, wie wir Objekte haben.

Sind es sehr viele, kann der Array auch automatisch generiert werden.

  • num_targets sagt uns, wie viele Ziele vorhanden sind.
  • num_swaps ist 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.

Persönliche Werkzeuge