¿Cuáles son algunos algoritmos ideales para la generación de mazmorras 2D tipo Rogue? [cerrado]

47

¿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!

Gabriel Isenberg
fuente
1
Además, eche un vistazo a la generación de laberintos .
Anthony
1
Hay algún artículo sobre este tema en RogueBasin
PATRY Guillaume

Respuestas:

27

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.

Kaj
fuente
+1 para "todas las ideas son válidas", pero me gustaría aclararlo: todas las ideas son válidas, pero algunas funcionarán mejor que otras. Su idea de <vaga jerga informática aquí> funcionará , y probablemente sea lo que desea, pero hay otras formas de hacerlo que serán más eficientes, más aleatorias, más coherentes, más personalizables o cualquier combinación de las mismas, a menos que sea realmente bueno o muy afortunado
Nic Hartley
20

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.

ingrese la descripción de la imagen aquí

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.

pequeño_duck
fuente
10

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.

munificente
fuente
1
Me encontré con Amaranth hace unos meses, pero olvidé el nombre cuando llegué a la generación de mazmorras. Gracias por el enlace!
Gabriel Isenberg
2
Su artículo en journal.stuffwithstuff.com/2014/12/21/rooms-and-mazes también es realmente bueno, utilizo una versión modificada de eso con algunas características adicionales, como diferentes motores de corredor, etc.
Tobsta
3

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í .

Adam White
fuente
2
Esta pregunta tiene muchos votos y sería mejor si pudieras abrir esta respuesta un poco más. Los enlaces tienden a morir, eventualmente, así que trata de responder para que no sea necesario hacer clic en los enlaces. ¿Cómo funciona? ¿Cuál es la idea principal? ¿Cómo se diferencia de otros algoritmos?
Katu
1
El enlace en realidad murió.
htmlcoderexe
2

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.

Ian Schreiber
fuente
3
Aunque es de código abierto, por lo que recuerdo no es una fuente muy bien documentada o una fuente transparente o una fuente escrita para aprender. Son fáciles de modificar, pero en general son mucho más difíciles de asimilar.
Tom Hudson el
Tal vez los originales no sean grandes referencias, pero hay una gran cantidad de variantes, algunas de las cuales son excelentes. Por ejemplo, el desarrollador de UnAngband realizó una serie de mejoras en la generación de mazmorras y escribió una serie de excelentes publicaciones en el blog , por lo que definitivamente puede usar las ideas, si no el código.
congusbongus
La fuente de NetHack es notoriamente difícil de entender. El generador de mazmorras (UNO de ellos) se extiende por no menos de TRES archivos C, y alrededor de 15 funciones
Élektra