Se me ocurrió un método para generar recursivamente mapas sencillos de mazmorras comenzando con una habitación y conectando recursivamente nuevas habitaciones adyacentes al azar.
Los mapas se representan como matrices bidimensionales donde cada celda contiene un valor de 0-15. 0 no representa espacio, mientras que cada dirección está representada por norte = 1, este = 2, sur = 4, oeste = 8.
Quería comenzar con una sola habitación que no sea ([[0]]) y luego expandir la matriz 2D según sea necesario para que se ajuste al mapa generado. La dificultad que enfrento con este árbol como la recursión es que si las matrices tienen que ser desplazadas para agregar filas y columnas a la izquierda y la parte superior del mapa, tengo que ajustar la posición actual de la función, en qué fila y columna se encuentra. . Esto hace que las ramas separadas no estén al tanto de los ajustes del índice de matriz de otras ramas, solo sus funciones secundarias lo sabrán porque les han pasado la posición ajustada como argumentos de fila y columna.
¿Hay alguna forma de hacer esto? Intenté almacenar valores de desplazamiento de fila y columna fuera de la recursión, pero no funcionó por alguna razón.
Estoy haciendo algo similar, en Python. (O al menos la parte elástica).
Tengo un diccionario de mapeo de tuplas (x, y) a las celdas. En pseudocódigo:
Una tabla hash sería muy buena para este tipo de cosas.
fuente
La solución de esfuerzo mínimo es elegir un tamaño máximo (extensión X e Y) que desea que alcance la mazmorra, poner su punto de partida en el centro de eso y no permitir el crecimiento fuera de él. No es necesario hacer ningún cambio. Depende de que una extensión fija sea aceptable, por supuesto.
fuente
Desea utilizar un gráfico en lugar de la matriz 2D.
Cada habitación sería un nodo en el gráfico y sabe qué otras habitaciones están adyacentes a ella:
De esa manera no tiene que definir qué tan grande puede llegar a ser su mapa.
Las coordenadas x, y se pueden usar como clave única en un mapa hash para un acceso rápido a cada habitación. Agregar una nueva sala solo agregaría entradas a las listas adyacentes de las habitaciones cercanas.
El gráfico también es excelente para los algoritmos de búsqueda de rutas, si los necesita.
fuente