¿Cuáles son algunos buenos recursos con respecto a la generación de contenido procesal en el contexto de la generación de mazmorras?
El artículo más cercano que pude encontrar fue Algoritmo para generar un laberinto en 2D , que no es exactamente lo que estoy buscando. Las características, como habitaciones y pasillos conectados, son ideales.
¡Gracias!
procedural-generation
Gabriel Isenberg
fuente
fuente
Respuestas:
Esto ha sido más o menos respondido antes. Su primera parada debe ser http://pcg.wikidot.com/.
Dado que me acusaron de que esto no era una respuesta útil (¿en serio? ¿Alguien solicita un recurso y publico un enlace a un wiki que trata el tema? ), esta página en la wiki trata específicamente de los generadores de mazmorras y enlaces a varios artículos sobre el tema.
http://pcg.wikidot.com/pcg-algorithm:dungeon-generation
Todavía recomiendo navegar por todo el wiki, ya que la generación de contenido procesal es solo un enfoque muy creativo y todas y cada una de las ideas son válidas. Es un desafío de pensamiento lateral, y divertido.
fuente
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.
fuente
Si te gusta leer el código y puedes analizar C #, ¿puedo sugerirte el generador de mazmorras que utiliza mi roguelike Amaranth? Es aquí . Maneja habitaciones conectadas, características extensibles y algunas otras cosas buenas.
Si tira hacia abajo y construye todo el proyecto, hay una herramienta independiente que generará y dibujará las mazmorras para que pueda modificarlo y ver cómo funciona.
fuente
Todas estas son grandes ideas. Tomé un poco de RogueBasin y pcg.wikidot.com, y escribí mi propia implementación en C #.
Realmente me gustó el aspecto 'natural' de los niveles tipo cueva que se pueden generar utilizando el método de autómatas celulares. Para entender lo que quiero decir con el método de autómatas celulares, imagine el juego de la vida de Conway. Mi código usa lo que se llama el método 4-5, lo que significa que un mosaico se convertirá en una pared si es una pared y 4 o más de sus nueve vecinos son paredes, o si no es una pared y 5 o más vecinos son paredes. Comienzo rellenando el mapa al azar con paredes o espacio, luego visito cada posición x / y de forma iterativa y aplico la regla 4-5. Para ayudar a aliviar el problema de formar cuevas aisladas, después de llenar el mapa al azar, pongo una línea horizontal a través del mapa, configurando cada mosaico en un espacio en lugar de una pared, antes de aplicar la regla 4-5 a cada mosaico.
Puede ver el código de mi clase de controlador de mapas y cualquier mejora que haga aquí.
o una versión archivada aquí .
fuente
Creo que el lugar más directo para encontrar esto es mirar el código fuente. Dos jugadores importantes en el campo, Angband y Nethack, son de código abierto.
fuente