Quiero generar theta maze o circular maze. ¿Cómo lo genero porque hay muchos ejemplos para otros laberintos?

Si retrocede un poco y considera qué es un laberinto, puede ver que es solo una red que se aplica típicamente a una cuadrícula regular (o rectangular). Cada celda tiene uno o más vecinos, y se crean pasajes entre esos vecinos para formar el laberinto. Suficientemente simple.


Esto funciona para cualquier configuración de celdas. Puede hacerlos hexagonales, triangulares o cualquier otra cosa, y siempre que pueda describir qué celdas son adyacentes a qué otras celdas, puede pasar a unir celdas adyacentes a través de pasajes.


¡Hasta aquí todo bien!

Esto nos lleva a las redes polares . Estos son círculos concéntricos, con “radios” que irradian hacia afuera desde el origen.


Los radios dividen los círculos concéntricos en –¡lo adivinaste! – células, cada una de las cuales tiene vecinos en sentido horario, antihorario, exterior e interior. ¡Ya que conoces a los vecinos, puedes unirte a esos vecinos con pasajes para formar un laberinto!

Sin embargo, las cuadrículas polares son un poco especiales, porque sin ninguna otra modificación, las celdas se ensanchan cada vez más a medida que te alejas del origen. Para mantener las celdas aproximadamente del mismo tamaño en todo el laberinto, debe introducir una subdivisión adaptativa, dividiendo las celdas cuando se ensanchan demasiado. Esto complica un poco la cuadrícula, ya que algunas celdas pueden tener dos vecinos (¡o más!) En dirección hacia afuera, y otras tendrán solo uno.

Pero eso es esencialmente todo. Si conoce un algoritmo de generación de laberintos (como Growing Tree, Prim’s, Kruskal’s, Recursive Backtracker, etc.), puede hacer un laberinto en una cuadrícula polar. La parte difícil es realmente descubrir la mejor manera de representar la cuadrícula polar.


(Por cierto, hay un capítulo completo sobre este tema en mi libro, “Laberintos para programadores” – https://pragprog.com/book/jbmaze….)

¡Buena suerte! Los laberintos son muy divertidos.