Une carte simple, quatre biomes et comment les distribuer


16

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:

maquette d'une carte du monde possible avec les villes et le lieu de départ, mais pas d'entrée de donjon

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.


Êtes-vous prêt à utiliser des bibliothèques tierces ou souhaitez-vous coder votre propre solution?
William Mariager

Je préfère coder le mien.
Kawa

Les tailles du biome sont fixes?
kaoD

Pourriez-vous modifier le message avec une liste de points des règles exactes que vous souhaitez que la génération de carte suive? Il serait plus facile pour nous de régler le problème en sachant exactement ce que nous recherchons.
William Mariager

Modifié, et les tailles de biome, eh bien, je suis allé avec ceux par exemple. Pour un monde 16x16, Desert pourrait encore être un quart de la zone et ainsi de suite, mais c'est principalement pour garantir que certaines zones seront là.
Kawa

Réponses:


8

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.


Vote pour la suggestion de l'AC. Cela correspond bien au commentaire de Valmond.
Kawa

Vous seriez surpris de voir à quel point une solution CA peut être simple pour résoudre ce problème. Des règles simples et une carte de départ aléatoire peuvent produire des paysages d'aspect remarquablement détaillé et «réaliste».
DampeS8N

Je suis allé avec le principe CA. Ce n'est pas encore tout à fait correct car la seule chose qui sépare le désert et la neige sont des règles de position absolues, mais cela fonctionne bien pour l'instant.
Kawa

1
Une solution facultative au problème neige / désert est d'avoir une règle en place pour créer un type de biome différent où la neige rencontre le désert. Dis, marais. Ensuite, le marais peut continuer à croître normalement. Vous pouvez toujours avoir des frontières de neige / désert, mais en réalité c'est quelque peu naturel. En fait, la majeure partie du désert sur terre est recouverte de neige. - en bref, la neige pourrait avoir la règle telle que si un voisin est désert, il se transforme en marais.
DampeS8N

11

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.

Voronoi-grid

Répétez l'opération pour chaque écran, en donnant à chacun son propre biome.


J'ai déjà vu celui-là auparavant, et c'est un peu trop de bazooka sur un moustique à mon goût.
Kawa

Bon d'accord, c'est un euphémisme. C'est très bazooka sur un moustique. L'exemple 8x8 n'était pas seulement un exemple - le monde ne sera vraiment pas assez grand pour justifier cette solution.
Kawa

D'accord, je vois maintenant. Vous n'avez vraiment pas besoin de différencier les biomes de chaque tuile de la carte. De plus, le concept proposé dans l'article semble sur mesure pour l'auteur, mais certaines parties peuvent être choisies. J'édite ma réponse pour la rendre plus claire.
ChrisC

Une solution encore trop complexe. Il n'y a pas de hauteur ou d'humidité à utiliser ici. Tout ce dont j'avais besoin, tout ce que je voulais demander, c'était un moyen de "répartir" les taches de désert, de marais et de neige jusqu'aux quantités requises, en suivant des règles supplémentaires telles que "la neige ne peut pas s'approcher trop près du désert" .
Kawa

@Kawa: On dirait que vous êtes prêt à creuser et à écrire votre propre solution! D'après ce que je peux dire, vous avez tout visualisé dans votre esprit, faites-le! :) N'oubliez pas qu'il ne doit pas être le générateur de cartes ultime dans le monde, tant qu'il A l'air comme ça. ;)
Zolomon

1

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é.


Cela n'aide pas vraiment avec l'aspect blobby du problème.
Kawa

2
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)), alors vous devriez obtenir un effet blobby ( pas de longues files par exemple).
Valmond

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é.
Valmond

Valmond, mettez ça dans une réponse.
Kawa
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.