Tengo un juego de Sudoku más vendido en la tienda de aplicaciones de iOS. Así es como generé rompecabezas.
Primero tengo una aplicación de generador de rompecabezas. Pero no es parte del código del juego. Es una aplicación independiente que uso para hacer rompecabezas. Está muy modificado, por lo que puedo configurarlo para crear diferentes tipos de patrones, clasificaciones de dificultad, número de dados, etc. Generar rompecabezas y obtener un nivel de dificultad constante es difícil de hacer sobre la marcha y lleva más tiempo del que un jugador querría esperar. Entonces, genero lo que llamo "rompecabezas de semillas" y eso es lo que usa el código del juego para generar los rompecabezas que la gente juega.
No estoy respondiendo cómo codificar un generador aquí. Puede buscar en Google y encontrar toneladas de código generador de rompecabezas en línea. Comience por ahí. Pero para hacer un buen juego necesitas hacer un buen juego. Mi juego no genera rompecabezas sobre la marcha.
La forma en que funciona mi aplicación de generador de rompecabezas es que genera miles de rompecabezas por minuto, pero no todos son buenos y no todos coinciden con un índice de dificultad específico. El generador crea un rompecabezas, luego lo resuelve y calcula un índice de dificultad, y califica el rompecabezas en función de las técnicas necesarias para resolver el rompecabezas, y determina si es necesario adivinar para resolverlo (lo que generalmente es malo). Lanza cualquier rompecabezas que no coincida con un criterio. Para rompecabezas difíciles pero no imposibles, en una máquina rápida, puede tomar una hora generar 100 rompecabezas que coincidan con mis especificaciones exactas. Es por eso que no hago esto en la aplicación. Generar rompecabezas sobre la marcha con esas especificaciones difíciles no funcionaría para la calidad de los rompecabezas que tengo en mi aplicación.
Los rompecabezas son cadenas, 162 caracteres de largo, 81 caracteres con números y guiones o puntos donde van a estar los espacios en blanco, luego otros 81 con la solución. Luego columnas para cada una de las estadísticas, como cuántos singles, dobles, etc.
Mi salida de todas las sesiones de generación son líneas delimitadas por comas con las estadísticas como columnas. Tomaré unos 10,000 rompecabezas, los traeré para sobresalir y los ordenaré por dificultad. Luego, tráelos a una aplicación para verlos en el tablero de juego. También los miro por atractivo visual y los patrones visibles del rompecabezas. Luego selecciono a mano de esos.
Los llamo rompecabezas de semillas y esto es lo que quiero decir. Los números en un juego de sudoku son realmente solo fichas. En lugar de ser los números 1-9, podrían ser colores, símbolos o letras. Entonces mis rompecabezas de semillas no son números, son las letras ai. Cada rompecabezas de semillas se cambia sobre la marcha para hacer un rompecabezas jugable:
- Aleatorizar los números / tokens. Cuando convierto las letras ai nuevamente en los números 1-9, la tabla de búsqueda es aleatoria. Lo que significa que a no siempre es 1. Eso solo crea alrededor de 300,000 variaciones en cada rompecabezas.
- Gire el rompecabezas 90, 180 o 270 grados. Eso agrega 4 variaciones más.
- Deja caer el rompecabezas horizontalmente, verticalmente o ambos. Eso agrega 4 variaciones más.
Por lo tanto, cada rompecabezas de semillas puede crear 5,806,080 variaciones. He probado esto en el campo con jugadores reales. La gente no sabe que esencialmente está jugando el mismo rompecabezas. Es imposible en realidad. Solo si se dieran cuenta de que el patrón en el que se encuentran los datos es el mismo cada vez. Pero con incluso 100 semillas diferentes, nadie se dará cuenta. Un millón de usuarios de mi juego no lo han hecho. También lo probé con aplicaciones de solución. Una aplicación de solución no resolverá un rompecabezas de la misma manera cuando se gira o se deja caer. Incluso a veces lo analizará como una calificación de dificultad diferente a pesar de que técnicamente es el mismo rompecabezas.
Sin embargo, Big Bad Sudoku Book tiene 10 de miles de rompecabezas de semillas en 5 niveles de dificultad y múltiples tipos de patrones de rompecabezas. Esto significa que hay miles de millones de rompecabezas en mi juego. Con cada 10,000 rompecabezas de semillas hay 58.060.800.000 rompecabezas diferentes.
En Sudoku Book versión 4 (disponible en 2016) descubrí una forma de poder especificar un rompecabezas exacto de esos 58 mil millones y obtener el mismo rompecabezas en el dispositivo de cada jugador.