Consegui obter níveis razoavelmente bonitos usando o seguinte algoritmo, com base em uma grade quadrada:
Primeiro, crie um conjunto de salas. Parâmetros aleatórios definirão o tamanho das salas e seus números. Um algoritmo adaptável pode até definir algumas zonas feitas de grandes corredores e outras de salas muito pequenas.
Então, você precisa garantir que todas as salas estejam conectadas umas às outras. Para isso, execute um pathfinder para cavar corredores (digamos, A *) entre cada par de salas, atribuindo um peso escolhido aleatoriamente aos espaços existentes (salas ou outros corredores) em comparação com o espaço ainda não esculpido (nas paredes). Se a diferença de peso for pequena, cavar novos corredores será razoavelmente barato, e o algoritmo criará muitos corredores entre as salas, com muitas possibilidades de ir de um lugar para outro. Se a diferença de peso for alta, o algoritmo preferirá passar por salas e corredores existentes, tornando os caminhos mais tortuosos e com menos opções para chegar a um determinado destino.
Isso permite que você, a partir de um pequeno número de parâmetros, crie níveis de aparência muito diferentes, de salas esparsas e enormes com pequenos corredores que os ligam a um labirinto de câmaras estreitamente interconectadas.
Aqui está um exemplo de um nível gerado.
![insira a descrição da imagem aqui](https://i.stack.imgur.com/N4kLh.png)
Com base nesse algoritmo, você pode adicionar decoração de parede que depende da zona, diminuir ou aumentar os corredores, criar salas especiais e assim por diante.