Eu inventei um método para gerar recursivamente mapas simples de masmorra, começando com uma sala e conectando recursivamente novas salas adjacentes aleatoriamente.
Os mapas são representados como matrizes bidimensionais em que cada célula contém um valor de 0 a 15. 0 representa nenhuma sala enquanto cada direção é representada por norte = 1, leste = 2, sul = 4, oeste = 8.
Eu queria começar com um único quarto não ([[0]]) e depois expandir a matriz 2d conforme necessário para ajustar o mapa gerado. A dificuldade que encontro com essa árvore como recursão é que, se as matrizes tiverem que ser deslocadas para adicionar linhas e colunas à esquerda e à parte superior do mapa, tenho que ajustar a posição atual da função, em que linha e coluna ela está . Isso faz com que ramificações separadas não tenham conhecimento dos ajustes do índice de matriz de outras ramificações, apenas suas funções filhas saberão porque elas têm a posição ajustada passada como argumentos de linha e coluna.
Existe uma maneira de fazer isso? Tentei armazenar valores de deslocamento de linha e coluna fora da recursão, mas não funcionou por algum motivo.
Estou fazendo uma coisa semelhante, em Python. (Ou pelo menos a parte elástica).
Eu tenho um dicionário de (x, y) tuplas mapeadas para as células. No pseudo código:
Uma tabela de hash seria muito boa para esse tipo de coisa.
fonte
A solução de esforço mínimo é escolher um tamanho máximo (extensão X e Y) que você deseja que a masmorra atinja, colocar seu ponto de partida no centro disso e não permitir crescimento fora dela. Não há necessidade de fazer nenhuma mudança. Depende de uma extensão fixa ser aceitável, é claro.
fonte
Você gostaria de usar um gráfico em vez da matriz 2D.
Cada sala seria um nó no gráfico e sabe quais outras salas são adjacentes a ele:
Dessa forma, você não precisa definir o tamanho do seu mapa.
As coordenadas x, y podem ser usadas como chave exclusiva em um hashmap para acesso rápido a cada sala. Adicionar uma nova sala apenas adicionaria entradas às listas de quartos adjacentes das salas próximas.
O gráfico também é ótimo para algoritmos de localização de caminhos, se você precisar deles.
fonte