Como dijiste, en general, si estás diseñando un juego con algún tipo de elemento aleatorio, no quieres que ese elemento aleatorio sea demasiado aleatorio. La verdadera aleatoriedad es mala en los juegos, ya que para la mayoría de las secuencias aleatorias el teorema del límite central prácticamente garantiza que obtendrás carreras de longitud arbitraria. Por ejemplo, si lanzas una moneda infinitamente a menudo, es inevitable que en el camino veas una serie de 97.328.129 caras seguidas, por ejemplo, con cada serie posible más grande y más pequeña.
Desde una perspectiva de diseño, tales carreras son un problema de marcador / experiencia, ya que es posible, aunque improbable, que alguien que juegue tu juego tenga suerte y obtenga una de estas carreras favorables y termine con una puntuación que tal vez sea de órdenes de magnitud más alta que los otros en el tablero. No quieres eso. Por otro lado, si alguien tiene una racha desafortunada, probablemente perderá, se frustrará y dejará de jugar. Tú tampoco quieres eso.
¿Entonces que puedes hacer? Una solución alternativa es usar una bolsa aleatoria, que es solo una matriz aleatoria (pequeña, idealmente). Digamos que está trabajando con Tetris: tome una matriz de tamaño siete, coloque las piezas en la matriz, barajelas y selecciónelas una por una. Cuando la matriz esté vacía, rellénela y repita el proceso hasta que el juego se detenga. Las bolsas barajadas resuelven el problema con carreras que acabo de mencionar, ya que obviamente no verá la misma pieza más de dos veces seguidas. Si aumenta el tamaño de la bolsa, puede quedarse sin más tiempo; sin embargo, su comportamiento se vuelve cada vez más “aleatorio” a medida que aumenta su tamaño. Por esta razón, no es una solución perfecta, aunque las buenas implementaciones de Tetris en estos días usan la bolsa aleatoria.
Aquí hay algunos enlaces a la discusión sobre la bolsa aleatoria:
http://kaioa.com/node/53
http://stackoverflow.com/questio…