Génération de carte aléatoire

63

Je commence / a commencé un jeu de RPG 2D tilemap en Java et je souhaite implémenter la génération de carte aléatoire. J'ai une liste de différents carreaux (terre / sable / pierre / herbe / gravier, etc.) ainsi que des carreaux à l'eau et des carreaux de chemin, le problème que j'ai, c'est que je ne sais pas par où commencer pour générer une carte au hasard.

Il aurait besoin de sections de terrain (une partie du sable, une partie de la terre, etc.) est similaire à celle de Minecraft: différents biomes se transforment de manière transparente les uns dans les autres. Enfin, j'aurais également besoin d'ajouter des chemins aléatoires dans cette zone, ainsi que des directions différentes sur toute la carte.

Je ne demande à personne de m'écrire tout le code ou quoi que ce soit, juste me piont dans la bonne direction s'il vous plaît.

tl; dr - Générez une carte de tuiles avec des biomes, des chemins et assurez-vous que les biomes se lient parfaitement les uns aux autres.

Tom O
la source

Réponses:

68

Parmi les nombreuses questions connexes sur le site, il y a un article souvent lié à la génération de cartes: Génération de cartes polygonale pour les jeux, vous pouvez en tirer quelques bonnes stratégies, mais il ne peut pas vraiment être utilisé tel quel.

Bien que n'étant pas un tutoriel, il existe un article sur la façon dont les cartes du monde de la forteresse naine sont générées. En gros, vous générez plusieurs couches de bruit: hauteur, humidité, température, salinité. Ensuite, vous utiliseriez quelque chose comme ceci:

entrez la description de l'image ici

Ou ca

entrez la description de l'image ici

générer des biomes basés sur les couches de bruit que vous avez produites auparavant. Cela donne généralement une transition assez douce entre les biomes et les transitions sont logiques. Je modifie également les cartes d'humidité et de température en fonction de l'altitude. Cela génère naturellement une "ligne de bois" et produit des montagnes rocheuses avec des caps enneigés.

J'utilise cette stratégie dans mon jeu et il produit des cartes comme celle-ci très rapidement:

entrez la description de l'image ici

De plus, vous pouvez me voir parcourir quelques cartes supplémentaires au début de cette vidéo .

Et voici quelques autres pour vous aider à démarrer:

Comment créer un "monde" aléatoire dans un moteur de tuiles?

Comment identifier des régions de caractéristiques dans un monde généré par des procédures?

Comment créer un bruit solide tiled pour la génération de cartes?

MichaelHouse
la source
Bien que ce lien Génération de cartes polygonale pour les jeux soit un très bel article, je ne pense pas que cela convienne parfaitement à cette question car a) ce n'est pas une grille de tilemap et b) il n'a pas de biomes - la texture du terrain est basé sur la hauteur.
Tapio
@Tapio Vous avez raison, j'ai mis à jour avec plus d'informations.
MichaelHouse
@ Byte56 Merci, tout cela me donne un point de départ! :)
Tom O
@ Byte56 J'ai remarqué que vous aviez mentionné ma question d'il y a quelques années. Je l'ai donc mise à jour avec un code fonctionnel!
Nick Badal
1
BTW le projet de génération de cartes polygonales a été conçu pour un jeu dont la carte de tuiles n’affiche pas les hauteurs. Les hauteurs et les polygones sont là pour générer les biomes mais ils ne sont pas réellement montrés dans le jeu.
amitp
29

Tandis que les autres réponses ici sont vraiment bonnes pour générer les types de paysages statiques qui pourraient répondre à ce besoin spécifique. Si vous souhaitez créer des paysages qui changent avec le temps ou qui paraissent beaucoup plus réalistes, vous pouvez suivre cette technique.

Contrairement aux autres réponses, vous commencez avec une carte entièrement vide. Commencez par ce que vous considéreriez comme étant le niveau de la mer. Utilisez Perlin Noise pour ajouter une très légère variation. Si vous avez 256 altitudes possibles, ne varie pas plus de 3 à 5 dans les deux sens. Cela construit les premiers milliards d'années de votre paysage sans avoir à exécuter une simulation aussi longtemps.

Tectonique des plaques

Divisez la carte en lignes droites ou courbes pour créer des assiettes. Plus les formes des assiettes sont détaillées, plus votre paysage sera intéressant. Gardez-les grands. Donnez à chaque assiette une direction, une vitesse. Sur une période donnée, déplacez les plaques de manière progressive sur la carte en faisant glisser toutes les tuiles au-dessus d’elles.

Lorsque deux assiettes se croisent, faites un choix qui ira par-dessus et par-dessous, ce choix peut être aléatoire. Les carreaux sur les assiettes désignées ci-dessous sont instantanément réduits en hauteur de 5 marches. Une fois qu'une plaque a été désignée supérieure ou inférieure, toutes les interactions futures avec les plaques respecteront les règles suivantes:

  • Lorsqu'une plaque désignée croise une plaque non désignée, la plaque non désignée devient du type opposé. (Ainsi, les plaques UD deviennent sous lors de la traversée d'un over.)
  • Lorsqu'une plaque supérieure repose sur une plaque inférieure, toutes ces tuiles montent 0-1 marches d'élévation et suivent le trajet de la plaque supérieure.
  • Là où une assiette recouvre une assiette, toutes ces tuiles montent de 1 à 2 marches et les tuiles de la région de croisement ne dérivent plus.
  • Lorsqu'une plaque inférieure croise une plaque inférieure, toutes les tuiles de la zone dont l'élévation est supérieure à 66% des deux plaques de la région de recouvrement dépassent de 1 à 3 paliers (comme si l'activité volcanique le faisait, cela produirait des îles sur une période de temps suffisante. ) et les tuiles dans cette zone cessent de dériver.

Toutes les plaques qui se croisent ralentissent de 20% de leur vitesse actuelle à chaque étape. Pour plus de réalisme, ajoutez un changement aléatoire de -10% à 10% dans la direction du mouvement à chaque étape.

Après avoir effectué le nombre d'étapes souhaité. Probablement 5-10 sont nombreux. Toutes les tuiles où aucune plaque ne réside, doivent être abaissées au niveau le plus bas existant.

Large ou petit?

Cette carte peut être utilisée telle quelle ou être développée pour créer une carte beaucoup plus grande en la divisant en morceaux de tuiles (cellules) 4X4 et en développant ces sections en fonction de leurs élévations individuelles. Traitez l’élévation de chaque cellule comme un point et créez une gradation douce dans la carte plus grande entre ces points. Ainsi, si la plus grande carte est 40X40 au lieu de 4X4, et que le point (0,0) vaut 10 et le point (0,1) vaut 1, les tuiles de la carte plus grande entre elles seraient 10,9,8,7,6. , 5,4,3,2,1 de hauteur. Vous pouvez également ajouter du bruit Perlin pour atténuer les pentes. Dans l'ensemble, cette technique de mise à l'échelle est similaire à l' algorithme de Diamond Square .

Eau

Simuler des rivières et des lacs, des océans et des nappes phréatiques. Je préfère utiliser des automates cellulaires .

Les hauteurs deviennent des plages flottantes ou étendues pour permettre un suivi plus fin. Les cellules de l'eau ont des valeurs de saturation, par exemple dans la plage de 1-256. Les cartes devraient commencer de manière uniforme. Vous devrez jouer avec les chiffres correspondant à la taille de votre carte, mais vous suivrez généralement les règles suivantes:

  • Si une cellule voisine est plus saturée, augmentez la saturation et gagnez en hauteur.
  • Si une cellule voisine est moins saturée, diminuez la saturation et perdez de la hauteur.

Faites cette vérification pour chaque cellule voisine. Effectuez un nombre suffisant d'étapes. Si vous le souhaitez, vous pouvez ajouter de la température à cette simulation en modifiant la quantité de saturation perdue / acquise par cette température. Vous pouvez également le modifier en fonction de l'altitude. Les lacs et les rivières naturels devraient se former. Certains vont tomber dans l'océan. (L'océan ne sera probablement pas rempli par une métrique, mais vous désignerez de toute façon tout ce qui se trouve sous le niveau de la mer comme étant rempli d'eau.)

Vous pouvez conserver les données de température et de saturation à utiliser, comme dans les autres réponses, pour créer des biomes. Ils devraient être BEAUCOUP plus précis et intéressants. Avec des biomes enneigés aux pôles et des biomes chauds au milieu (si vous utilisez une liste de températures graduelle et lisse).

Vous pouvez également simuler le vent, et donc les changements de température en fonction des altitudes. Vous pouvez alterner entre la simulation de la température et la simulation de l'eau si vous le souhaitez. Cependant, je n'ai rien construit en utilisant des changements de température, je ne commenterai donc pas comment le faire.

Paysages en évolution

Si vous conservez les simulations relatives aux terres, à l'eau et à la chaleur, réduisez considérablement leurs effets et empêchez les plaques de bouger, vous pouvez continuer à modifier toutes ces mesures au fil du temps. Je ne ferais pas les calculs très souvent, mais vous pouvez obtenir une carte du monde qui réagit aux changements de cette façon.

Conclusion

Bien que ces types de techniques soient beaucoup plus complexes, elles produisent des effets beaucoup plus réalistes et évolutifs. Prends-le pour ce qu'il vaut?

DampeS8N
la source
15

Vous pouvez utiliser Perlin Noise pour la génération du terrain, voici comment fonctionnent les biomes dans Minecraft. Comme vous pouvez le constater, il utilise une carte thermique en combinaison avec une carte de pluie pour créer les biomes.

Biomes de Minecraft

tversteeg
la source