Voici l'idée de base: j'ai un jeu Rogue-ish, peut-être Dwarf Fortress-ish, avec un surmonde généré de manière aléatoire et plusieurs entrées de donjon dispersées autour de lui. J'ai déjà les donjons essentiellement couverts, mais je suis coincé sur un aspect du surmonde.
Ledit overworld, considéré comme une carte d'écrans 2D, devrait avoir une distribution peut-être semblable à une goutte de quatre thèmes ou biomes différents - prairies, désert, neige et marais, chacun avec sa propre quantité totale d'écrans. Disons que la carte est 8x8, ce qui donne 64 écrans uniques. La moitié d'entre elles pourraient être des prairies, un quart de désert, et les marais et la neige obtiennent un quart chacun:
Il semble que la réduction de la palette ait rendu la neige de la même couleur que le marais. À l'origine, il y avait huit écrans de neige dans le coin inférieur et une zone marécageuse légèrement décalée de huit écrans au milieu. Désolé pour cela, et veuillez ignorer les marqueurs de position.
Le mieux que j'ai pu obtenir était quelques formes de serpent, et souvent assez avec des combinaisons absurdes comme le désert qui serpente dans la neige (ou vice versa). Pour la vie de moi, je ne peux pas trouver comment le rendre agréable et blobby, sans parler de le rendre climatiquement (?) Logique. Alors, comment puis-je générer une carte du biome comme dans la maquette?
D'accord, sur demande: le monde n'est vraiment pas beaucoup plus grand que cet exemple, et ce dont j'ai besoin est juste un moyen de diffuser des taches qui déterminent les apparences thématiques, avec la limitation supplémentaire que la neige ne peut pas toucher le désert. Les écrans ne défilent pas, et si un écran est réglé sur "désert", il n'y aura pas d'herbe nulle part dessus.
Réponses:
Il existe de nombreuses façons d'écorcher ce chat, mais l'une des plus intéressantes consiste à utiliser des automates cellulaires . Commencez avec votre grille vide et ajoutez quelques cellules de départ de semences dans des emplacements aléatoires. Il devrait s'agir de certains types de biomes de base non mixtes. Dites: herbe, désert, neige, océan.
Sur la base de règles de croissance de votre propre conception, qui pourraient présenter un certain caractère aléatoire (je m'en fiche que cela rompt techniquement l'idée de CA, n'est-ce pas?), Faites-les grandir à chaque étape de la carte. Des règles supplémentaires peuvent être telles que si vous êtes dans l'océan et à côté de l'herbe ou du marais, vous pouvez vous transformer en marécage. Si vous êtes près de la neige, vous pouvez devenir de la glace, si vous êtes près du désert, vous pouvez vous dessécher et devenir désert aussi.
La même chose pourrait être vraie pour d'autres mélanges, et en théorie même des sous-mélanges comme les marécages gelés, ou la toundra, ou la jungle germant à partir de grandes étendues de forêts qui se sont développées à partir de grandes étendues de prairies.
Les possibilités sont infinies et peuvent également être continues. Comme ces règles sont toutes simples, vous pouvez implémenter des environnements qui évoluent dans le temps. Combiné avec des informations sur la hauteur et des règles qui en tiennent compte, vous pouvez cultiver des lacs et des rivières, bloquer la croissance des forêts au-dessus des montagnes et d'autres choses fantaisistes.
Cette carte de hauteur peut être le résultat d'un bruit perlin, d'un carré de diamant ou même de tout autre modèle CA. En fait, vous pouvez également modifier cette carte au fil du temps en modélisant la tectonique des plaques, en poussant des montagnes, en coulant dans des tranchées et même en laissant les rivières baisser le paysage en créant des canyons.
Ce trou de lapin s'étend pour toujours.
la source
Réponse courte mais vous devriez vraiment vérifier cet article sur www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/ Il explique un algorithme sur la génération de la génération aléatoire de terres sèches et de biomes en fonction des zones d'humidité et des régions d'altitude désignées. Mais dans votre cas, définissez simplement vos propres valeurs pour la distribution que vous souhaitez.
(grosse modification) Je vais rendre cela beaucoup plus clair pour les concepts de génération de cartes que vous devez appliquer. Utilisez un système de coordonnées avec 1 unité par écran, en valeurs à virgule flottante. Générez un petit ensemble aléatoire de points à l'intérieur de ces coordonnées, comme si vous faisiez un diagramme de Voronoi mais nous ne ferons pas réellement les formes aléatoires. Au lieu de cela, le diagramme sera implicite et approximé par la carte une fois les biomes définis.
Chaque point est le centre de chaque zone du biome. Définissez vos propres règles pour associer un point à un biome. Par exemple, si vous voulez un désert à l'est et pas trop au sud ou au nord, tous les points qui sont supérieurs à une certaine valeur X et dans une certaine plage Y auront un désert qui les entoure.
Associez chaque écran à l'un de ces points, ce qui se fait en prenant le centre de l'écran en coordonnées XY (disons 4,5, 8,5) et en retournant le point le plus proche du centre de l'écran.
Voici un dessin approximatif d'un diagramme de forme sur la grille d'écrans. Nous ne sommes pas vraiment concernés par les lignes entourant les formes, mais elles sont là pour illustrer comment les écrans commencent à se rapprocher des régions de forme.
Répétez l'opération pour chaque écran, en donnant à chacun son propre biome.
la source
Réponse 1:
faire pousser la neige et le désert, quand c'est fait, chercher les intersections (interdites) et y faire pousser (plus ou moins grand) des marais.
Rincez et répétez.
Réponse 2:
Pour la partie «blob», j'ai déplacé mon commentaire (comme demandé) vers le message:
Si vous vous développez par itération, c.-à-d. définissez 1 point de désert, puis grandissez au hasard autour de n'importe quel point du désert (à chaque fois, prenez au hasard l'un des points du désert existants et ajoutez 1 point sur l'un de ses côtés (où il n'y a encore rien)), vous devriez obtenir un effet blobby ( pas de longues files par exemple).
Vous pouvez également ajouter une règle afin que vous ne puissiez pas créer une tuile désert s'il y a de la neige sur une tuile à proximité.
la source