Sto progettando un gioco con dungeon generati casualmente. Mi piacerebbe vederlo come un grafico connesso e non orientato in cui i nodi sono stanze e i bordi sono porte o corridoi. Quindi scelgo un nodo "laterale" come ingresso del sotterraneo, calcolo la distanza tra questo ingresso e tutti gli altri nodi e decido che uno dei nodi più lontani è "l'obiettivo" del sotterraneo (la posizione del tesoro, boss, principessa, ecc.).
Ho visto 2 modi per generare la topografia del dungeon finale:
- Generare prima un grafico casuale, quindi provare a riempire il mondo 2d di stanze in posizioni casuali, rispettando le connessioni ai bordi. Ho pensato che questo sarebbe stato a volte difficile perché la generazione della stanza poteva essere "bloccata" cercando di adattare le stanze in posti impossibili.
- Genera le prime stanze, posizionandole casualmente dove si adattano, quindi mappa il risultato su nodi e bordi. Ho deciso di provare questo.
La mia idea consiste in:
- Per prima cosa genera una grande stanza che conterrebbe l'intero sotterraneo.
- Metti un muro all'interno della stanza grande, in una posizione casuale, dividendo la stanza grande in 2 stanze più piccole di area diversa.
- Quindi continuo a dividere ogni stanza in 2, fino a quando non sono troppo piccole, o il numero totale di stanze raggiunge un massimo (o qualsiasi altra condizione). Ogni nuova stanza è un nodo.
- Una volta finito, controllo ogni stanza e trovo tutte le altre stanze adiacenti, contrassegnando i 2 nodi come collegati da un bordo.
In questo modo mi assicuro che tutte le stanze abbiano una possibile posizione nel mondo 2D e siano correttamente mappate da un grafico collegato.
Il mio problema è che ci sono troppe porte e corridoi che collegano le stanze.
Quindi vorrei un algoritmo che riduca il numero di spigoli di un grafico non indirizzato connesso , ma mantenendolo connesso (tutti i nodi rimangono raggiungibili) alla fine.