Quali sono alcuni algoritmi ideali per la generazione di dungeon 2D simili a ladri? [chiuso]


47

Quali sono alcune buone risorse per quanto riguarda la generazione di contenuti procedurali nel contesto della generazione di dungeon?

L'articolo più vicino che ho trovato è stato Algorithm per la generazione di un labirinto 2d , che non è proprio quello che sto cercando. Caratteristiche, come camere e corridoi collegati, sono l'ideale.

Grazie!


1
Inoltre, dai un'occhiata alla generazione del labirinto .
Anthony,

1
Ci sono alcuni articoli sull'argomento su RogueBasin
Guillaume,

Risposte:


27

Questo è stato più o meno risposto prima. Il tuo primo posto di sosta dovrebbe essere http://pcg.wikidot.com/

Dal momento che sono stato accusato di non essere una risposta utile (davvero? Qualcuno chiede una risorsa e inserisco un link a un wiki che tratta l'argomento? ), questa pagina della wiki tratta specificamente dei generatori di Dungeon e contiene collegamenti a vari articoli sull'argomento.
http://pcg.wikidot.com/pcg-algorithm:dungeon-generation

Consiglio comunque di sfogliare l'intero wiki, poiché la generazione di contenuti procedurali è solo un approccio molto creativo e tutte le idee sono valide. È una sfida di pensiero laterale - e divertente.


+1 per "tutte le idee sono valide", ma vorrei chiarire che: tutte le idee sono valide, ma alcune funzioneranno meglio di altre. Il tuo <vago gergo informatico qui> funzionerà e probabilmente sarà quello che vuoi, ma ci sono altri modi per farlo che saranno più efficienti, più casuali, più coerenti, più personalizzabili o qualsiasi combinazione di questi, a meno che tu non sia veramente bravo o davvero fortunato.
Nic Hartley,

20

Sono riuscito a ottenere livelli ragionevolmente belli usando il seguente algoritmo, basato su una griglia quadrata:

Innanzitutto, crea un set di stanze. I parametri casuali definiranno la dimensione delle stanze e i loro numeri. Un algoritmo adattivo potrebbe persino definire alcune zone fatte di grandi corridoi e altre di stanze molto piccole.

Quindi, è necessario assicurarsi che tutte le stanze siano collegate tra loro. Per questo, esegui un pathfinder per scavare corridoi (diciamo, A *) tra ogni coppia di stanze, dando un peso scelto casualmente agli spazi esistenti (stanze o altri corridoi) rispetto allo spazio non ancora scolpito (i muri). Se la differenza di peso è piccola, scavare nuovi corridoi sarà ragionevolmente economico e l'algoritmo creerà molti corridoi tra le stanze, con molte possibilità di spostarsi da un luogo all'altro. Se la differenza di peso è elevata, l'algoritmo preferirà attraversare stanze e corridoi esistenti, rendendo i percorsi più tortuosi e con meno scelte per raggiungere una determinata destinazione.

Ciò ti consente, da un numero limitato di parametri, di creare livelli dall'aspetto molto diverso, da ampie sale sparse con piccoli corridoi che le collegano a un labirinto dall'aspetto alveare di camere strettamente interconnesse.

Ecco un esempio di un livello generato.

inserisci qui la descrizione dell'immagine

Sulla base di questo algoritmo, è possibile aggiungere decorazioni murali che dipendono dalla zona, rendere i corridoi più piccoli o più grandi, creare stanze speciali e così via.


10

Se ti piace leggere il codice e riesco ad analizzare C #, posso suggerire il generatore di dungeon utilizzato dal mio amaranto roguelike? È qui . Gestisce stanze comunicanti, funzionalità estensibili e altre cose interessanti.

Se abbassi e costruisci l'intero progetto, c'è uno strumento autonomo che genererà e disegnerà i sotterranei in modo da poterlo modificare e vedere come funziona.


1
Mi sono imbattuto in Amaranto come sembra mesi fa, ma avevo dimenticato il nome quando sono entrato nella generazione delle segrete. Grazie per il link!
Gabriel Isenberg,

2
Il tuo articolo su journal.stuffwithstuff.com/2014/12/21/rooms-and-mazes è davvero ottimo, ne uso una versione modificata con alcune funzionalità extra come i diversi motori di corridoio, ecc.
Tobsta,

3

Tutte queste sono grandi idee. Ho preso un po 'da RogueBasin e pcg.wikidot.com e ho scritto la mia implementazione in C #.

Mi è piaciuto molto l'aspetto "naturale" di livelli simili a grotte che possono essere generati usando il metodo degli automi cellulari. Per capire cosa intendo con il metodo degli automi cellulari, immagina Conway's Game of Life. Il mio codice usa quello che è chiamato il metodo 4-5, il che significa che una tessera diventerà un muro se è un muro e 4 o più dei suoi nove vicini sono muri, o se non è un muro e 5 o più vicini sono muri. Comincio riempiendo la mappa in modo casuale con muri o spazio, quindi visita ogni posizione x / y in modo iterativo e applica la regola 4-5. Per aiutare ad alleviare il problema della formazione di caverne isolate, dopo aver riempito la mappa in modo casuale, ho vuoto una linea orizzontale attraverso la mappa, impostando ogni tessera su uno spazio anziché un muro, prima di applicare la regola 4-5 a ogni tessera.

Puoi visualizzare il codice per la mia classe di gestori di mappe e tutti i miglioramenti apportati qui

o una versione archiviata qui .


2
Questa domanda ha molti voti e sarebbe meglio se potessi aprire questa risposta un po 'di più. I link tendono a morire, alla fine, quindi prova a rispondere in modo che non sia necessario fare clic sui link. Come funziona? Qual è l'idea principale? In cosa differisce dagli altri algoritmi?
Katu,

1
Il collegamento in realtà è morto.
htmlcoderexe,

2

Penso che il posto più diretto per trovarlo sia effettivamente guardare il codice sorgente. Due dei principali attori del settore, Angband e Nethack, sono entrambi open-source.


3
Sebbene sia open-source, da quello che ricordo non è enormemente ben documentato o trasparente-sorgente o scritto per l'apprendimento-dalla fonte. Sono facili da modificare, ma molto più difficili da capire.
Tom Hudson,

Forse gli originali non sono grandi riferimenti, ma c'è un numero enorme di varianti, alcune delle quali sono eccellenti. Ad esempio, lo sviluppatore di UnAngband ha apportato numerosi miglioramenti alla generazione del dungeon e ha scritto una serie di eccellenti post sul blog , in modo da poter sicuramente utilizzare le idee se non il codice.
congusbongus,

La fonte NetHack è notoriamente difficile da capire. Il generatore di dungeon (UNO di essi) è distribuito su non meno di TRE file C e circa 15 funzioni
Élektra
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.