Quels sont les algorithmes idéaux pour la génération de donjons 2D ressemblant à Rogue? [fermé]


47

Quelles sont les bonnes ressources concernant la génération de contenu procédural dans le contexte de la génération de donjons?

L'article le plus proche que j'ai trouvé était Algorithm pour générer un labyrinthe en 2D , ce qui n'est pas tout à fait ce que je recherche. Les fonctionnalités, telles que les chambres et les couloirs connectés, sont idéales.

Merci!


1
Jetez également un coup d'œil à la génération de labyrinthe .
Anthony

1
Il y a quelques articles sur ce sujet chez RogueBasin
PATRY Guillaume

Réponses:


27

Cela a été plus ou moins répondu avant. Votre premier lieu d'arrêt devrait être http://pcg.wikidot.com/

Depuis que j'ai été accusé de ne pas être une réponse utile (vraiment? Quelqu'un demande une ressource et je poste un lien vers un wiki traitant du sujet? ), cette page du wiki traite spécifiquement des générateurs de donjons et de liens vers divers articles sur le sujet.
http://pcg.wikidot.com/pcg-algorithm:dungeon-generation

Je recommanderais quand même de parcourir tout le wiki, car la génération de contenu procédural est une approche très créative et toutes les idées sont valables. C'est un défi de pensée latéral - et amusant à cela.


+1 pour "toutes les idées sont valables", mais j'aimerais clarifier ceci: toutes les idées sont valables, mais certaines fonctionneront mieux que d'autres. Votre idée <vague de jargon informatique ici> fonctionnera et sera probablement ce que vous voulez, mais il existe d'autres façons de le faire qui seront plus efficaces, plus aléatoires, plus cohérentes, plus personnalisables, ou toute combinaison de celles-ci, à moins que vous ne soyez vraiment bon ou vraiment chanceux.
Nic Hartley

20

J'ai réussi à obtenir des niveaux d'assez bonne mine en utilisant l'algorithme suivant, basé sur une grille carrée:

Tout d'abord, créez un ensemble de pièces. Des paramètres aléatoires définiront la taille des pièces et leur nombre. Un algorithme adaptatif pourrait même définir certaines zones constituées de grands couloirs et d'autres de très petites pièces.

Ensuite, vous devez vous assurer que toutes les pièces sont connectées les unes aux autres. Pour cela, lancez un explorateur pour creuser des corridors (par exemple, A *) entre chaque paire de pièces, en donnant un poids choisi aléatoirement aux espaces existants (salles ou autres corridors) par rapport aux espaces non encore sculptés (les murs). Si la différence de poids est faible, il sera alors relativement peu coûteux de creuser de nouveaux couloirs et l’algorithme créera de nombreux couloirs entre les pièces, offrant de nombreuses possibilités pour se déplacer d’un lieu à l’autre. Si la différence de poids est grande, l’algorithme préférera alors parcourir les salles et les couloirs existants, rendant les chemins plus tortueux et offrant moins de choix pour atteindre une certaine destination.

Cela vous permet, à partir d'un petit nombre de paramètres, de créer des niveaux d'aspect très différents, des couloirs massifs clairsemés aux petits couloirs les reliant à un labyrinthe de chambres étroitement interconnectées.

Voici un exemple de niveau généré.

entrez la description de l'image ici

Sur la base de cet algorithme, vous pouvez ajouter une décoration murale qui dépend de la zone, rendre les couloirs plus petits ou plus grands, créer des salles spéciales, etc.


10

Si vous aimez lire du code et que vous pouvez analyser le C #, puis-je suggérer le générateur de donjon utilisé par mon amoureuse Amaranth? C'est ici . Il gère les pièces connectées, les fonctionnalités extensibles et quelques autres éléments intéressants.

Si vous réduisez et construisez l'ensemble du projet, vous disposez d'un outil autonome qui génère et dessine les donjons afin que vous puissiez le peaufiner et voir comment il fonctionne.


1
J'ai rencontré Amaranth ce qui semble être il y a des mois, mais j'avais oublié le nom quand je suis entré dans la génération des cachots moi-même. Merci pour le lien!
Gabriel Isenberg

2
Votre article sur journal.stuffwithstuff.com/2014/12/21/rooms-and-mazes est vraiment bon aussi. J'utilise une version modifiée de celle-ci avec quelques fonctionnalités supplémentaires telles que différents moteurs de corridor, etc.
Tobsta

3

Toutes ces idées sont géniales. J'ai pris un petit peu de RogueBasin et de pcg.wikidot.com et écrit ma propre implémentation en C #.

J'ai vraiment aimé l'aspect «naturel» des niveaux en forme de grotte pouvant être générés à l'aide de la méthode des automates cellulaires. Pour comprendre ce que je veux dire par méthode des automates cellulaires, imaginez le jeu de la vie de Conway. Mon code utilise ce qu'on appelle la méthode 4-5, ce qui signifie qu'une tuile deviendra un mur si c'est un mur et au moins quatre de ses neuf voisins sont des murs, ou si ce n'est pas un mur et si cinq voisins ou plus sont des murs. Je commence par remplir la carte au hasard avec des murs ou de l'espace, puis visite chaque position x / y de manière itérative et applique la règle 4-5. Afin de résoudre le problème de la formation de grottes isolées, après avoir rempli la carte de manière aléatoire, je supprime une ligne horizontale sur la carte, définissant chaque mosaïque sur un espace plutôt que sur un mur, avant d'appliquer la règle 4-5 à chaque mosaïque.

Vous pouvez afficher le code de ma classe de gestionnaire de cartes et les améliorations apportées ici.

ou une version archivée ici .


2
Cette question a beaucoup de votes et ce serait mieux si vous pouviez ouvrir cette réponse un peu plus. Les liens ont tendance à mourir, finalement, alors essayez de répondre de manière à ce qu'il ne soit pas nécessaire de cliquer sur les liens. Comment ça marche? Quelle est l'idée principale? En quoi diffère-t-il des autres algorithmes?
Katu

1
Le lien est effectivement mort.
htmlcoderexe

2

Je pense que l'endroit le plus direct pour trouver ceci est de regarder le code source. Angband et Nethack, deux acteurs majeurs du secteur, sont tous deux open-source.


3
Bien que open-source, de ce que je me souvienne, ni l'un ni l'autre ne sont des sources extrêmement bien documentées, transparentes ou écrites pour apprendre à partir de sources. Ils sont faciles à modifier, mais beaucoup plus difficile à maîtriser en général.
Tom Hudson

Peut-être que les originaux ne sont pas de bonnes références, mais il existe un grand nombre de variantes, dont certaines sont excellentes. Par exemple, le développeur de UnAngband a apporté un certain nombre d'améliorations à la génération de donjons et a écrit une série d'excellents articles de blog afin que vous puissiez utiliser les idées, sinon le code.
congusbongus

La source NetHack est notoirement difficile à comprendre. Le générateur de donjon (l'un d'entre eux) est réparti sur pas moins de trois fichiers C et environ 15 fonctions
Élektra
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.