Zufällig rotierte Spiegel erzeugen

Aus EnigmaWiki

Wechseln zu: Navigation, Suche
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
Persönliche Werkzeuge