Logré obtener niveles razonablemente atractivos usando el siguiente algoritmo, basado en una cuadrícula cuadrada:
Primero, crea un conjunto de habitaciones. Los parámetros aleatorios definirán el tamaño de las habitaciones y sus números. Un algoritmo adaptativo podría incluso definir algunas zonas que están hechas de grandes pasillos y otras de habitaciones muy pequeñas.
Luego, debe asegurarse de que todas las habitaciones estén conectadas entre sí. Para esto, ejecute un buscador de ruta para excavar corredores (digamos, A *) entre cada par de habitaciones, dando un peso elegido al azar a los espacios existentes (habitaciones u otros corredores) en comparación con el espacio aún no tallado (las paredes). Si la diferencia de peso es pequeña, cavar nuevos corredores será razonablemente barato, y el algoritmo hará muchos corredores entre habitaciones, con muchas posibilidades de ir de un lugar a otro. Si la diferencia de peso es alta, entonces el algoritmo preferirá pasar por las habitaciones y corredores existentes, haciendo que los caminos sean más tortuosos y con menos opciones para llegar a un determinado destino.
Esto le permite, desde una pequeña cantidad de parámetros, crear niveles de aspecto muy diferentes, desde pasillos masivos dispersos con pequeños corredores que los unen a un laberinto de cámaras estrechamente interconectadas.
Aquí hay un ejemplo de un nivel generado.
Según este algoritmo, puede agregar una decoración de pared que dependa de la zona, hacer que los pasillos sean más pequeños o más grandes, hacer habitaciones especiales, etc.