# Lua-Skript-API von pxstud.io — Zufall

> Teil der Lua-Skript-Referenz von pxstud.io, deren Übersicht (https://pxstud.io/de/docs/scripting.md) die Konventionen erklärt. Die Optionsgruppen und Typen, auf die sie verweist, stehen in https://pxstud.io/de/docs/scripting/option-groups.md und https://pxstud.io/de/docs/scripting/types.md. Alles in einer Datei (auf Englisch): https://pxstud.io/llms-full.txt. Das Verzeichnis der ganzen Website (auf Englisch): https://pxstud.io/llms.txt.

### Zufall
Zufallszahlen mit Seed, berechnet innerhalb des Skripts (kein Roundtrip pro Aufruf). Derselbe Seed liefert dieselben Ergebnisse, sodass ein Skript erneut ausgeführt, rückgängig gemacht und wiederholt oder geteilt werden kann und identisch aussieht. Bevorzuge diese Funktionen gegenüber math.random, das bei jedem Lauf anders ist. Generatoren sind Objekte: Ruf ihre Methoden mit einem Doppelpunkt auf (rng:int(1, 6)).

#### `app.random.hash(x, y, seed?)` — rein
Ein zustandsloser Float in [0, 1) aus ganzzahligen Eingaben (ein Integer-Avalanche-Hash): dasselbe (x, y, seed) liefert immer denselben Wert, in beliebiger Reihenfolge. Für Rauschen pro Pixel oder Dithering ohne Generator.

- `x` (number) — Ganzzahl (abgerundet).
- `y` (number) — Ganzzahl (abgerundet).
- `seed` (number, optional) — Standard 0.

Gibt zurück (number): Ein Float, 0 <= x < 1.

#### `app.random.new(seed)` — rein
Erzeugt einen Zufallsgenerator mit Seed (mulberry32, derselbe Algorithmus, den Sprühen und Durchmischen des Editors verwenden). Derselbe Seed liefert immer dieselbe Folge. Bevorzuge ihn gegenüber math.random, das bei jedem Lauf anders ist. Verwende die Methoden mit einem Doppelpunkt: local rng = app.random.new(app.config.seed); rng:int(1, 6).

- `seed` (number) — Eine Ganzzahl 0-4294967295. Floats werden abgerundet; alles andere wird auf 32 Bit reduziert.

Gibt zurück (table): Ein Generatorobjekt; ruf seine Methoden mit einem Doppelpunkt auf.

#### `app.random.seed()` — rein
Ein frischer zufälliger Ganzzahl-Seed, 0-4294967295. NICHT deterministisch: Er ist bei jedem Lauf anders, also gib ihn aus oder speichere ihn, wenn du das Ergebnis reproduzieren willst. Verwende ihn, wenn das Seed-Feld leer bleibt: app.random.new(app.config.seed or app.random.seed()).

Gibt zurück (number): Eine Ganzzahl 0-4294967295.

#### `rng:chance(p)` — rein
true mit der Wahrscheinlichkeit p.

- `p` (number) — Wahrscheinlichkeit 0-1.

Gibt zurück (boolean): true oder false.

#### `rng:fork(label)` — rein
Ein unabhängiger Kindgenerator, deterministisch aus dem aktuellen Zustand dieses Generators und dem Label abgeleitet, OHNE diesen weiterzuschalten. Gib jeder Funktion ihren eigenen Fork (rng:fork("leaves")), damit das Hinzufügen einer Funktion nicht jeden späteren Wurf ändert. Zweimaliges Forken an derselben Stelle mit demselben Label liefert identische Kinder.

- `label` (string) — Ein String oder eine Zahl, die das Kind benennt.

Gibt zurück (table): Ein Generatorobjekt; ruf seine Methoden mit einem Doppelpunkt auf.

#### `rng:int(lo, hi)` — rein
Eine zufällige Ganzzahl von lo bis hi, beide eingeschlossen.

- `lo` (number) — Kleinstes Ergebnis (abgerundet).
- `hi` (number) — Größtes Ergebnis, eingeschlossen (abgerundet); mindestens lo.

Gibt zurück (number): Eine Ganzzahl, lo <= x <= hi.

#### `rng:next()` — rein
Der nächste Float in [0, 1).

Gibt zurück (number): Ein Float, 0 <= x < 1.

#### `rng:normal(mean?, sd?)` — rein
Ein normalverteilter Float (Box-Muller). Verbraucht zwei Würfe pro Aufruf.

- `mean` (number, optional) — Standard 0.
- `sd` (number, optional) — Standardabweichung; Standard 1.

Gibt zurück (number): Ein Float um mean.

#### `rng:pick(list)` — rein
Ein zufälliges Element der Liste; nil bei einer leeren Liste (und der Generator wird nicht weitergeschaltet).

- `list` (table) — Eine Liste (1..#list).

Gibt zurück (table): Ein Element der Liste oder nil.

#### `rng:range(a, b)` — rein
Ein zufälliger Float von a bis ausschließlich b.

- `a` (number)
- `b` (number)

Gibt zurück (number): Ein Float in [a, b).

#### `rng:shuffle(list)` — rein
Eine neue Liste mit denselben Elementen in zufälliger Reihenfolge (Fisher-Yates). Die Eingabeliste wird nicht verändert.

- `list` (table) — Eine Liste (1..#list).

Gibt zurück (table): Eine neue gemischte Liste.
