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.
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:
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:
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?
la source
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.
la source