Je fais un jeu qui présente plusieurs types de puzzles en séquence. Je choisis chaque puzzle avec un numéro pseudo-aléatoire. Pour chaque puzzle, il existe un certain nombre de variantes. Je choisis la variation avec un autre numéro pseudo-aléatoire. Etc.
Le fait est que, même si cela produit un hasard presque vrai, ce n'est pas vraiment ce que le joueur veut. Le joueur veut généralement ce qu'il perçoit et s'identifie comme aléatoire, mais seulement s'il n'a pas tendance à répéter les puzzles. Donc, pas vraiment aléatoire. Juste imprévisible.
En y réfléchissant, je peux imaginer des façons hacky de le faire. Par exemple, éliminer temporairement les choix N les plus récents de l'ensemble des possibilités lors de la sélection d'un nouveau choix. Ou attribuer à chaque choix une probabilité égale, réduire la probabilité d'un choix à zéro lors de la sélection, puis augmenter lentement toutes les probabilités à chaque sélection.
Je suppose qu'il existe une façon établie de le faire, mais je ne connais pas la terminologie, donc je ne la trouve pas. Quelqu'un sait? Ou quelqu'un a-t-il résolu cela d'une manière agréable?
Réponses:
Si vous avez un nombre fini de puzzles, vous pouvez:
MODIFIER
Je ne le savais pas, mais en parcourant SE, je me suis rendu compte que cela était en fait connu sous le nom de "shuffle bag". Plus d'infos ici , ici ou là .
EDIT 2
Le classique Knuth Shuffle va dans ce sens:
Steven Stadnicki a souligné à juste titre dans son commentaire que ce genre de chose n'empêche pas la répétition lors d'un remaniement. Un moyen de prendre cela en compte est d'ajouter un cas spécial pour le dernier article:
la source
Une variante de l'approche de Lorancou: pour chaque type de puzzle, conservez un tableau de numéros de puzzle (mélangés); puis chaque fois que vous frappez un puzzle de ce type, obtenez le numéro suivant de la liste. par exemple, supposons que vous ayez des puzzles Sudoku, Picross et Kenken, chacun avec des puzzles # 1..6. Vous créeriez trois tableaux mélangés des nombres 1 à 6, un pour chaque type de puzzle:
Maintenant, vous devez mélanger les types de puzzles comme le suggère Lorancu; disons que cela arrive [Picross, Sudoku, Kenken]. Ensuite, chaque fois que vous touchez un puzzle d'un type donné, utilisez le numéro suivant dans sa «liste aléatoire»; dans l'ensemble, votre présentation de puzzle serait [Sudoku # 5, Picross # 6, Kenken # 3, Sudoku # 6, Picross # 2, Kenken # 2, ...]
Si vous ne voulez pas garder les puzzles dans le même ordre général à chaque fois dans la boucle, je pense que votre option `` choisir au hasard, en ignorant les derniers choix '' est la meilleure. Il existe également des moyens de rendre cela un peu plus efficace; par exemple, disons que vous avez 20 choses et que vous voulez ignorer les 5 dernières cueillies. Ensuite, au lieu de choisir au hasard un numéro 1..20 et de `` relancer '' jusqu'à ce que vous en obteniez un en dehors des 5 derniers, choisissez simplement un nombre 1..15 et parcourez vos types de puzzle avec autant d'étapes, en sautant simplement tout type de puzzle qui est été sélectionné (vous pouvez le faire facilement en conservant un tableau de bits contenant les 5 derniers puzzles sélectionnés).
la source