Ich mache ein Spiel, das nacheinander verschiedene Arten von Rätseln präsentiert. Ich wähle jedes Puzzle mit einer Pseudozufallszahl aus. Für jedes Puzzle gibt es eine Reihe von Variationen. Ich wähle die Variante mit einer anderen Pseudozufallszahl. Und so weiter.
Die Sache ist, dass dies zwar eine nahezu wahre Zufälligkeit erzeugt, der Spieler dies jedoch nicht wirklich wünscht. Der Spieler möchte normalerweise, was er wahrnimmt und als zufällig identifiziert, aber nur, wenn er nicht dazu neigt, Rätsel zu wiederholen. Also nicht wirklich zufällig. Einfach unvorhersehbar.
Wenn ich darüber nachdenke, kann ich mir hackige Wege vorstellen, es zu tun. Entfernen Sie beispielsweise vorübergehend die letzten N Auswahlmöglichkeiten aus dem Satz von Möglichkeiten, wenn Sie eine neue Auswahl treffen. Oder weisen Sie jeder Auswahl die gleiche Wahrscheinlichkeit zu, reduzieren Sie die Wahrscheinlichkeit einer Auswahl bei der Auswahl auf Null und erhöhen Sie dann alle Wahrscheinlichkeiten bei jeder Auswahl langsam.
Ich gehe davon aus, dass es einen etablierten Weg gibt, aber ich kenne die Terminologie einfach nicht und kann sie daher nicht finden. Weiß jemand? Oder hat jemand dies auf eine erfreuliche Weise gelöst?
Antworten:
Wenn Sie eine begrenzte Anzahl von Rätseln haben, können Sie:
BEARBEITEN
Ich wusste das nicht, aber beim Durchstöbern von SE wurde mir klar, dass dies eigentlich als "Shuffle Bag" bekannt ist. Noch ein paar Infos hier , hier oder da .
BEARBEITEN 2
Der klassische Knuth Shuffle geht so:
Steven Stadnicki wies in seiner Bemerkung zu Recht darauf hin, dass dies die Wiederholung einer Umbildung nicht verhindert. Eine Möglichkeit, dies zu berücksichtigen, besteht darin, einen Sonderfall für das letzte Element hinzuzufügen:
quelle
Eine Variante des Ansatzes von Lorancou: Halten Sie für jeden Rätseltyp eine Reihe von (gemischten) Rätselnummern bereit; Jedes Mal, wenn Sie ein Puzzle dieses Typs schlagen, wird die nächste Zahl von der Liste gestrichen. Nehmen wir zum Beispiel an, Sie haben Sudoku-, Picross- und Kenken-Rätsel, jedes mit Rätseln # 1..6. Sie erstellen drei gemischte Arrays mit den Nummern 1..6, eines für jeden Puzzletyp:
Nun mischen Sie die Puzzletypen, so wie es Lorancu vorschlägt. Nehmen wir an, es kommt auf [Picross, Sudoku, Kenken]. Verwenden Sie dann jedes Mal, wenn Sie ein Puzzle eines bestimmten Typs treffen, die nächste Zahl in der 'Zufallsliste'. Insgesamt wäre Ihre Puzzle-Präsentation [Sudoku # 5, Picross # 6, Kenken # 3, Sudoku # 6, Picross # 2, Kenken # 2, ...]
Wenn Sie die Rätsel nicht jedes Mal in der gleichen Gesamtreihenfolge halten möchten, ist es meiner Meinung nach am besten, wenn Sie die Auswahl nach dem Zufallsprinzip treffen und die letzten Picks ignorieren. Es gibt auch Möglichkeiten, wie Sie dies ein wenig effizienter gestalten können. Nehmen wir zum Beispiel an, Sie haben 20 Dinge und möchten die letzten 5 Dinge ignorieren. Anstatt nach dem Zufallsprinzip eine Zahl 1..20 auszuwählen und erneut zu spielen, bis Sie eine außerhalb der letzten 5 erhalten, wählen Sie stattdessen einfach eine Zahl 1..15 und gehen Sie die Puzzletypen in so vielen Schritten durch, dass Sie alle Puzzletypen überspringen, die vorhanden sind ausgewählt worden (Sie können dies einfach tun, indem Sie ein Bit-Array mit den letzten 5 ausgewählten Rätseln beibehalten).
quelle