Pase un generador sembrado a través del generador de diseño
Cree un generador pseudoaleatorio inicializado y páselo a cada función de generación en lugar de llamar a Math.random a través de ayudantes no relacionados. MDN señala que el usuario no puede elegir ni restablecer la semilla inicial de Math.random, por lo que por sí solo no puede proporcionar una semilla reproducible. Guarde la semilla junto con un nivel generado o su informe de error. Si agrega o reordena sorteos aleatorios más adelante, la misma semilla puede producir un diseño diferente; versione el generador o registre el mapa generado cuando la reproducción exacta a largo plazo sea importante.
Separe las opciones por propósito cuando sea posible: una secuencia aleatoria para la forma de la habitación, otra para la decoración y otra para la ubicación del enemigo. Entonces, agregar un dibujo decorativo no cambiará automáticamente el patrón enemigo.
Generar, validar y luego presentar
Después de construir una habitación, realice comprobaciones estructurales antes de mostrarla: la entrada y la salida existen, las llaves requeridas caben en los mosaicos transitables y un algoritmo de búsqueda de caminos puede llegar a la salida mientras recolecta los elementos obligatorios. Si el diseño falla, vuelva a intentarlo con un número limitado de semillas nuevas, luego use una sala de respaldo conocida o muestre una falla de generación clara. Registre la semilla rechazada y la invariante fallida para que se pueda reproducir localmente un diseño inesperado.
Pruebe un pequeño conjunto de semillas seleccionadas deliberadamente, incluidos valores similares a límites aceptados por su analizador de semillas, además de una muestra de semillas comunes. Esto no es una prueba de que todas las semillas posibles sean válidas. Es una forma práctica de ejercitar tanto la reproducción determinista como la ruta de rechazo del generador.
Mantenga la semilla separada de las afirmaciones de dificultad.
Una sala reproducible no es automáticamente una sala justa. Juegue con ejemplos generados y pregunte si los peligros son visibles y si la ruta prevista deja suficiente tiempo para reaccionar. Mantenga esa revisión separada del análisis de distribución en una revisión de equidad. Cuando se encuentra un defecto, la semilla permite al equipo discutir un diseño exacto en lugar de describir un arreglo aproximado de memoria.
Preguntas sobre generación de niveles aleatorios sembrados
¿Puedo reproducir un nivel con Math.random y un número guardado?
No restableciendo el estado integrado de Math.random; MDN dice que su semilla inicial no se puede elegir ni restablecer. Utilice un generador sembrado bajo su control y enrute las opciones de generación a través de él.
¿Una semilla garantiza que cada nivel generado tenga solución?
No. Una semilla reproduce una secuencia de elección; no valida el mapa resultante. Verifique la accesibilidad y las reglas de objetos requeridos, luego rechace o repare los diseños que fallan.
Más información
¿Has visto algo desactualizado? Notificar una corrección