Zufällig rotierte Spiegel erzeugen
Aus EnigmaWiki
Verfügbare Sprachen: Deutsch, English, Русский
Inhaltsverzeichnis |
Problemstellung
Man will ein Laser-Spiegel Level bauen und hat viele Spiegel. Um es nicht zu einfach zu machen und damit es etwas interessanter wirkt, will man die Ausrichtung der Spiegel zufällig verteilen.
Lösungsansatz
Wir schreiben eine Luafunktion, die Spiegel mit zufälliger Ausrichtung erzeugt.
Lösungsbeispiel
function set_random_mirror(x,y) r=random(1,4) set_stone("st-pmirror",x,y, {orientation=r}) end
Analyse
Das Attribut orientation kann dazu benutzt werden, die Ausrichtung eines Spiegel anzugeben.
Es kann die Werte 1-4 annehemen, die für folgende Ausrichtungen stehen:
- 1: "-" (w-e)
- 2: "\" (nw-se)
- 3: "|" (n-s)
- 4: "/" (sw-ne)
erweiterte Versionen
Es kann durchaus vorkommen, dass ein Teil der Spiegel noch transparent oder verschiebbar sein soll. Nun wäre es unsinn, 3 Funktionen zu definieren. Wir erweitern statt dessen die Funktion.
function set_random_mirror(x,y, movable, transparent) r=random(1,4) set_stone("st-pmirror",x,y, {orientation=4, movable=movable, transparent=transparent}) end
Die Funktion wird um zwei bool flags movable und transparent erweitert.
Sollen die Spiegel aber zufälligerweise transparent und/oder verschiebbar sein, lässt sich das so bewerkstelligen:
function set_random_mirror(x,y) r = random(1,4) s,t = random(0,1), random(0,1) set_stone("st-pmirror",x,y, {orientation=4, movable=s, transparent=t}) end
Nicht flache Spiegel (Prismen)
Für nicht flache Spiegel, muss man statt st-pmirror einfach st-3mirror verwenden.
Zudem sind die Werte für das Attribut orientation etwas anders. Es müssen hier die Richtungskonstanten NORTH, EAST, SOUTH, WEST benutzt werden.
function set_random_mirror(x,y) dirs={NORTH,EAST,SOUTH,WEST} r=random(1,4) kind=dirs[r] s,t = random(0,1), random(0,1) set_stone("st-3mirror",x,y, {orientation=kind, movable=s, transparent=t}) end

