Estou criando um jogo com masmorras geradas aleatoriamente. Gostaria de ver isso como um gráfico conectado e não direcionado, no qual os nós são salas e as bordas são portas ou corredores. Depois, escolho um nó "lateral" como entrada da masmorra, calculo a distância entre essa entrada e todos os outros nós e decido que um dos nós mais distantes é o "objetivo" da masmorra (a localização do tesouro, chefe, princesa, etc.).
Vi duas maneiras de gerar a topografia final da masmorra:
- Gere primeiro um gráfico aleatório e tente preencher o mundo 2D com salas em locais aleatórios, respeitando as conexões de borda. Imaginei que isso às vezes seria difícil porque a geração de salas poderia ser "trancada" tentando caber em salas em lugares impossíveis.
- Gere as primeiras salas, colocando-as aleatoriamente onde cabem, e mapeie o resultado para nós e arestas. Eu decidi tentar isso.
Minha ideia consiste em:
- Primeiro gere uma grande sala que contenha toda a masmorra.
- Coloque uma parede dentro da sala grande, em um local aleatório, dividindo a sala grande em 2 salas menores de área diferente.
- Então, continuo dividindo cada quarto em 2, até que eles sejam muito pequenos, ou o número total de quartos atinja o máximo (ou qualquer outra condição). Cada nova sala é um nó.
- Depois de terminar, verifico cada sala e encontro todas as outras salas adjacentes, marcando os 2 nós como conectados por uma borda.
Dessa forma, garanto que todas as salas tenham uma possível localização no mundo 2D e sejam mapeadas corretamente por um gráfico conectado.
Meu problema é que existem muitas portas e corredores conectando os quartos.
Então, eu gostaria de um algoritmo que reduz o número de arestas de um gráfico não direcionado conectado , mas mantendo-o conectado (todos os nós permanecem acessíveis) no final.