01 · Problem
Wofür braucht man das?
Eine reproduzierbare Spielsimulation muss Zufallsverteilung und Auszahlung unabhängig modellieren und jede sichtbare Linie korrekt auswerten.
02 · Denkmodell
Das mentale Modell
Reels erzeugen Spalten eines Rasters. Paylines sind explizite Koordinatenfolgen; ein reiner Evaluator berechnet daraus einen Gewinn.
Das Modul exportiert nichts und startet beim Import eine readline-CLI. Alle Symbole erhalten effektiv dasselbe Gewicht, horizontale Linien werden entlang eines Reels statt quer geprüft und Einsatz-/Freispielgrenzen sind fehlerhaft.
03 · Kontrollfluss
Was passiert in welcher Reihenfolge?
- Symbole mit getrenntem weight und payout definieren.
- Pro Reel und sichtbarer Zeile über injizierten RNG ziehen.
- Explizite Payline-Koordinaten inklusive Wild-Regeln auswerten.
- Scatter/Freispiele und Gewinn atomisch auf Integer-Credits buchen.
- Engineergebnis separat rendern oder über eine CLI bedienen.
04 · Bauteile
Die entscheidenden Verträge
FruitSlotMachine (intern)
Kombiniert Engine, Credits, Freispielzustand, Rendering und readline-Loop.
Reel / FruitReel (intern)
Zieht drei Symbole aus einer aufgebauten Symbolmenge.
BaseSymbol / WildSymbol / ScatterSymbol (intern)
Symbolklassen mit Multiplikator und Darstellung.
05 · Build it yourself
Selbst implementieren
Die Kernengine sollte rein und deterministisch sein; Zufall und UI werden injiziert.
- Gewichte, Auszahlungen und Symbole als Daten statt Vererbung definieren.
- Raster mit einem seedbaren RNG erzeugen.
- Paylines als Koordinatenarrays ohne Console- oder Guthabenseiteneffekt auswerten.
type Weighted<T> = { value: T; weight: number };
function pick<T>(items: Weighted<T>[], random: () => number) {
const total = items.reduce((sum, item) => sum + item.weight, 0);
let cursor = random() * total;
for (const item of items) {
cursor -= item.weight;
if (cursor < 0) return item.value;
}
throw new Error("No selectable symbol");
}
const middleLine = [[0, 1], [1, 1], [2, 1]] as const;06 · Verifizieren
Was du testen solltest
- Grenzwerte der Gewichtsintervalle wählen das erwartete Symbol.
- Jede horizontale und diagonale Payline liest die richtigen Rasterkoordinaten.
- Negative, unendliche und zu große Einsätze verändern Credits nicht.
07 · Grenzen
Kompromisse und Stolperfallen
- Reproduzierbarer RNG erleichtert Tests, ist bei echtem Glücksspiel regulatorisch unzureichend.
- Mehr Paylines erhöhen Variation und Auszahlungswahrscheinlichkeit.
- Geld als Integer-Cents verhindert Gleitkommafehler.
Der Repository-Name schreibt 'mashine'. Eine Korrektur wäre eine separate Breaking Change; die Doku spiegelt deshalb den tatsächlichen Slug.
08 · Weiterdenken