Zufällige Verteilung mit Positionsliste
Aus EnigmaWiki
Verfügbare Sprachen: Deutsch, English, Русский
Inhaltsverzeichnis |
Zufällige Verteilung von Objekten mittels Positionsliste
Problemstellung
Man hat ein (oder mehrere) Objekt(e), die an verschiedenen Positionen zufälligerweise auftauchen können.
Lösungsansatz
Solange man nicht allzu viele verschiedene Positionen hat und solange es eher einzelne Felder und nicht ganz Flächen von möglichen Positionen sind, lohnt sich der Ansatz mit Zonen nicht.
Man erstellt besser einen Array mit allen möglichen Positionen und wählt dann ein zufälliges Arrayelement.
Annmerkung: Bei mehreren Objekten besteht immer das Problem des Überschreibens! Wir müssen also irgendwie feststellen, ob die soeben gewählte Position schon einmal gebraucht wurde. Man könnte das ignorieren, aber nur solange man nicht eine fixe Anzahl von Objekten haben muss. Gutes Beispiel sind Oxydsteine - fehlt einer, weil überschrieben, ist das Level unlösbar! Dafür gibt es 2 Ansätze: entweder man entfernt jede Position sofort nach Gebrauch aus dem Array oder man prüft bei jeder Position vor Gebrauch, ob schon ein Objekt an dieser Stelle liegt. Wir wählen hier Methode 1.
Lösungsbeispiel
positions = {{1,6},{4,8},{2,7},{3,6},{4,4},{3,7]} function obstacle() local n = table.getn(positions) r = random(1,n) p = positions[r] set_stone("st-woven",p[1],p[2]) table.remove(positions,r) end

