
1985 veröffentlichten Alexey Pajitnov und Vadim Gerasimov Tetris. Bei diesem faszinierenden und süchtig machenden Spiel mussten die Spieler
zufällig erscheinende Teile miteinander verbinden. Seitdem wurden mehr als 150 lizenzierte Versionen von Tetris veröffentlicht. Sie unterschieden sich in Spielmodi, Regeln und Implementierung und spielten alle leicht (oder sehr) unterschiedlich. Der Tetris-Zufallsgenerator ist eine Funktion, die eine zufällig ausgewählte Form zurückgibt. Im Laufe der Jahre haben sich die Regeln für die Auswahl von Formen weiterentwickelt und das Gameplay und die Zufälligkeit selbst beeinflusst. Einige dieser Algorithmen wurden rückentwickelt und dokumentiert. Ich habe eine Liste von Randomisierern zusammengestellt, die ich für wichtig halte, und ich werde im Artikel zeigen, wie sich die interne Struktur von Tetris im Laufe der Jahre verändert hat.
Tetris (um 1985)
Die erste und ursprüngliche Version von Tetris hatte einen Randomizer ohne Vorurteile. Nichts beeinflusste die Wahl der nächsten Figur, sie wurde einfach ausgewählt und dem Spieler gezeigt.
Bei Verwendung eines Zufallsgenerators ohne Verschiebung treten Situationen auf, in denen der Spieler eine Folge von einer Figur (als „Flut“, Flut) oder eine Folge von einer bestimmten Figur (als „Dürre“, Dürre bezeichnet) empfängt. Wir werden sehen, wie Designer verschiedener Versionen von Tetris versucht haben, dieses Problem leicht zu beheben.
Obwohl ein Randomizer ohne Verzerrung die größte Rätselkomplexität für die Spieler erzeugt, ist er instabil und kann zu einer
unbesiegbaren Sequenz (PDF) führen . Dies ist jedoch in einem echten Spiel nicht der Fall, da Computer keine echten Zufallszahlengeneratoren haben. Pseudozufallszahlengeneratoren (PRNGs) versuchen, echte Zufälligkeit zu simulieren, haben jedoch nicht die Eigenschaften, die in einer Reihe 70.000 Zahlen Z erzeugen können.
Wahre Pseudozufälligkeit
function* random() { const pieces = ['I', 'J', 'L', 'O', 'S', 'T', 'Z']; while (true) { yield pieces[Math.floor(Math.random() * pieces.length)]; } }
Puzzle-Schwierigkeit: 4/5
Hochwasserschutz: 0/5
Dürreprävention: 0/5
Tetris , Nintendo (1989)
Vier Jahre später wurde die ungewöhnlich beliebte Version von Tetris für
NES veröffentlicht .
Um die Anzahl der Überschwemmungen (Wiederholungen) von Zahlen zu verringern, wurde dem Randomizer eine Verlaufsprüfung hinzugefügt. Diese einfache Überprüfung hat Folgendes bewirkt:
- Wähle eine Figur
- überprüft, ob die Zahl mit der vorherigen übereinstimmt,
- Wenn ja, dann hat der Algorithmus eine neue Form ausgewählt, aber nur einmal.
- und was auch immer das Ergebnis war, die Figur wurde dem Spieler gegeben.
Obwohl die Wahrscheinlichkeit, ein Stück hintereinander zu bekommen, abnahm, hinderte nichts das Spiel daran, zwei abwechselnde Stücke herauszugeben. Darüber hinaus war in dieser Version Dürre über mehr als 30 Zahlen eine häufige Situation. Eine Dürre kann für jede Art von Tetramino auftreten, aber Abbildung I ist wichtig für die Wertung in diesem Spiel, und die große Dürre kann das Endergebnis erheblich beeinflussen.
Auswendiglernen einer Geschichte 1 Figur in der Tiefe und mit 1 Wurf
function* historyRandomizer() { const pieces = ['I', 'J', 'L', 'O', 'S', 'T', 'Z']; let history; while (true) {
Puzzle-Schwierigkeitsgrad: 5/5
Hochwasserschutz: 2/5
Dürreprävention: 0/5
Tetris: Der Großmeister (1998)
Obwohl
Tetris für NES den Algorithmus im Vergleich zur Randomisierung ohne Verzerrung verbesserte, kam es immer noch häufig zu Dürren.
Tetris: Der Großmeister (
TGM ) verwendete im Wesentlichen dasselbe System, jedoch mit einer längeren Geschichte und mehr Würfen.
Aufgrund des Anstiegs dieser Werte nahm nicht nur die Anzahl der Überschwemmungen ab, sondern auch die Situation mit Dürren verbesserte sich. In der Geschichte sind vier Figuren erhalten geblieben, und dies bedeutete, dass die Wahrscheinlichkeit, eine Figur zu erhalten, die lange Zeit nicht existiert hatte, zunahm. Trotzdem fehlte dem Spiel immer noch eine strenge Regel, um Dürren zu verhindern, und sie traten immer noch auf, wenn auch viel seltener als in
Tetris für NES .
Eine Geschichte mit 4 Stücken und 4 Würfen auswendig lernen
function* historyRandomizer() { const pieces = ['I', 'J', 'L', 'O', 'S', 'T', 'Z'];
Puzzle-Schwierigkeit: 4/5
Hochwasserschutz: 4/5
Dürreprävention: 2/5
Tetris Worlds et al. (2001)
Tetris Worlds führte die Massen in den Zufallsgenerator ein. Er ist jetzt der offizielle Randomizer in den meisten offiziellen Versionen des Spiels nach
Tetris Worlds und wird bis heute verwendet.
Geschichtsbasierte Randomisierer halfen, die Überschwemmungen zu beseitigen (oder zumindest zu minimieren), stoppten jedoch nicht die Dürre. Unter bestimmten Umständen bestand immer noch die Möglichkeit, eine tödliche Zahlenfolge zu erhalten.
Der Zufallsgenerator (Zufallsgenerator) löst diese Probleme durch die Verwendung eines neuen Systems von "Beuteln" (Beuteln). In diesem System wird die Liste der Figuren in einen "Beutel" gelegt, wonach die Figuren nacheinander zufällig daraus extrahiert werden, bis der "Beutel" leer ist. Wenn es leer ist, kehren die Teile dorthin zurück und der Vorgang wird wiederholt. Random Generator hat einen "Beutel" der Größe 7 (7 Beutel), dh einen "Beutel", der mit jeweils 7 Tetraminos gefüllt ist. Andere Arten von "Beuteln" sind möglich, beispielsweise ein 14-Beutel, in den zwei Stücke jeder Art von Tetramino gelegt werden.
Aufgrund der fehlenden Geschichte der "Taschen" können an ihren Kreuzungen Überschwemmungen von 2 Figuren und "Schlangen" von 4 Figuren auftreten (

,

usw.). Dies ist in
gewissem Sinne ein Rückschritt im Vergleich zu herkömmlichem
Tetris für NES .
Die Teile fallen stabil aus dem 7-Beutel heraus, was es vorhersehbarer macht. Es ist leicht zu verstehen, in welchem Teil der „Tasche“ Sie sich befinden und wann die benötigte Figur kommen kann. Aufgrund der Vorhersagbarkeit dieses Zufallsgenerators kann das Spiel tatsächlich
endlos gespielt werden . Im Allgemeinen ist dies ein sehr dummes System, und es ist unklar, wie es im Allgemeinen zu einem offiziellen Randomizer wurde.
7 Beutel
function* randomGenerator() { let bag = []; while (true) { if (bag.length === 0) { bag = ['I', 'J', 'L', 'O', 'S', 'T', 'Z']; bag = shuffle(bag); } yield bag.pop(); } }
Puzzle-Schwierigkeitsgrad: 3/5
Hochwasserschutz: 3/5
Dürreprävention: 4/5
Tetris: Der Großmeister 3 - Terror-Instinkt (2005)
TGM3 hat die Idee der Erzeugung von Zufälligkeit stark vorangetrieben. Dies ist ein einzigartiges System, das in keiner anderen Version zu finden ist.
Anstelle einer Tasche oder Geschichte verwendet der TGM3 einen Pool von Formen. Anfangs hat es 5 Figuren von jedem Typ, dh insgesamt 35 Figuren. Wenn eine Figur gezogen wird, wird sie nicht aus dem Pool entfernt, sondern durch die Figur mit der größten Dürre ersetzt (eine, die seit langem nicht mehr entfernt wurde). Allmählich wird der Pool zunehmend mit dieser Figur gefüllt, bis er schließlich herausgezogen wird. Dies löst die Probleme von "Beutel" -Systemen sowie von Systemen mit einer Geschichte; Sie holt das Beste aus beiden Arten der Randomisierung heraus.
Pool von 35 Figuren mit 6 Würfen
function* tgm3Randomizer() { let pieces = ['I', 'J', 'L', 'O', 'S', 'T', 'Z']; let order = [];
Puzzle-Schwierigkeit: 4/5
Hochwasserschutz: 4/5
Dürreprävention: 4/5
Schlussfolgerungen
Es ist schwierig, ein bestimmtes Ergebnis zu erzielen. Der TGM3-Randomizer scheint für den Spieler vorhersehbarer und weniger komplex zu sein. Der ungeschickte 7-Beutel fühlt sich unnatürlich an, ermöglicht es Ihnen jedoch, viele tragfähige Gebäudestrategien zu entwickeln. Ein unfreundlicher Zufallsgenerator wie in Tetris für NES kann Ihr Spiel oder eher Ihre Spielstimmung ruinieren.
Können wir diese Systeme verbessern, indem wir sie zufälliger erscheinen lassen und Dürren und Überschwemmungen stark einschränken? Oder machen solch strenge Einschränkungen das Spiel nur vorhersehbarer?