Technischer Deep Dive heute: Warum ich einen Seeded Random Number Generator verwende und was das für das Spiel bedeutet.
Das Problem mit Zufall
Ein Fussball-Manager braucht Zufall. Tor oder kein Tor, Verletzung oder nicht, guter Tag oder schlechter Tag — all das muss zufällig sein. Aber normaler Zufall (System.Random) ist nicht reproduzierbar. Wenn du ein Spiel nochmal laufen lässt, kommt ein anderes Ergebnis raus.
Seeded RNG
Die Lösung: Jedes Match bekommt einen Seed — eine Startzahl für den Zufallsgenerator. Gleicher Seed = gleiche Zufallszahlen = gleiches Ergebnis. Immer. Auf jedem Rechner.
Warum ist das wichtig?
- Debugging: Wenn ein Bug auftritt, kann ich das exakt gleiche Spiel nochmal simulieren und Schritt für Schritt durchgehen
- Testing: Unit Tests die auf Zufallsergebnissen basieren, liefern trotzdem verlässliche Resultate
- Replays: In Zukunft kann man ein Spiel nochmal abspielen lassen — gleicher Seed, gleiche Aufstellung, gleiches Ergebnis
- Fairness: Im (geplanten) Multiplayer verhindert das Manipulation
Implementation
Der Seed wird aus Saison, Spieltag, Heim- und Auswärtsteam berechnet. So ist jedes Spiel eindeutig aber trotzdem determiniert. Funktioniert sauber — einer der wenigen Teile wo alles auf Anhieb geklappt hat.