¿Cuál es el algoritmo utilizado para llenar el tablero en el juego Bejeweled Blitz?

No me sorprendería si fuera completamente al azar. Digamos que tenemos una fila de 8 gemas. ¿Cuál es la probabilidad de que la fila de 8 gemas no tenga dos gemas adyacentes que sean idénticas? Si arreglamos la primera gema, la probabilidad es [matemática] \ izquierda (\ dfrac {6} {7} \ derecha) ^ 7 \ aproximadamente 34 \% [/ matemática]. Ignorando el hecho de que puede haber tuplas adyacentes de gemas a través de las filas, [matemática] (0.34) ^ 8 \ aprox 0.018 \% [/ matemática], que debería ser un límite superior en la probabilidad de que un tablero generado aleatoriamente no tenga movimientos válidos .

Para ser exactos, la probabilidad de que no haya dos gemas adyacentes idénticas no es menor que [matemáticas] \ left (\ dfrac {6} {7} \ right) ^ {14} \ cdot \ left (\ dfrac {5} {7 } \ right) ^ {49} \ aprox 8 \ cdot 10 ^ {- 9} [/ math]. Por supuesto, esto es una subestimación de la probabilidad de que un tablero no tenga un movimiento válido al principio, pero no debería estar apagado por más de un par de órdenes de magnitud, lo que significa que de vez en cuando en un millón de juegos, un azar la configuración no tiene movimiento aleatorio, en cuyo caso simplemente genera otra configuración nuevamente. Tenga en cuenta que generar una configuración aleatoria es extremadamente económico (generar 64 enteros aleatorios). Por lo tanto, no creo que se necesite un algoritmo elegante.

Gracias por el A2A.

Realmente no sé cómo lo hace Bejeweled, pero he hecho una versión de este tipo de juego.

Una de las primeras cosas que se necesitan al desarrollar este juego es una función para tomar un tablero arbitrario y calcular cuántos movimientos posibles hay. Durante el juego, si esta función devuelve cero, el juego termina.

Así es como se elige el tablero de partida. Primero, inicialízalo al azar. Luego puede perturbarlo volteando dos celdas al azar y llamando a la función getNumberOfPossibleMoves (). Repita hasta que satisfaga el requisito, por ejemplo, comenzando con 6 o más movimientos posibles.

Esto también se puede usar cuando las celdas desaparecen y se eligen los reemplazos. Copie el tablero con espacios, y luego llene esos espacios repetidamente al azar, hasta que la función le devuelva lo que desea.

Luego puede disminuir el número mínimo de movimientos posibles a medida que pasa el tiempo para hacer las cosas más difíciles.

Esto garantiza que un juego termina inmediatamente o después de un par de movimientos porque eso sería frustrante para el jugador.

Jugué con mucho durante algún tiempo y nunca me metí en la situación de no tener ningún movimiento en absoluto, así que supongo que tienes razón en que no sea realmente aleatorio, ya que con 7 tipos diferentes de gemas y solo 4 posibles opciones de partido para el lado de cada gema. , habría una gran posibilidad de no tener una coincidencia adecuada.
Supongo que lo que hace es comenzar la partida con algunas coincidencias válidas y luego, cuando comienzas a romper gemas, asegúrate de que las gemas que suelta tengan al menos 1 coincidencia disponible (directa o indirectamente), lo que no es difícil de codificar.
Otros juegos que parecen realmente aleatorios recurren a reorganizar el tablero cuando no hay coincidencias, aunque se siente un poco barato.