JeuWeb - Crée ton jeu par navigateur
Générateur de Map Hexagonale - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Générateur de Map Hexagonale (/showthread.php?tid=6488)

Pages : 1 2


RE: Générateur de Map Hexagonale - Lord-Gargoyle - 14-11-2012

Oui, moi je mets des hexagones partout, mais on peut faire ça avec une grille normale (mais les rivières auraient une tête bizarre dans ce cas, elles tourneraient à 90°, ou alors il faudrait les faire tourner à l'intérieur d'une case), voir une triangulation pour faire un générateur de terrain 3D. C'est d'ailleurs après avoir vu un générateur de terrain 3D que j'ai adapté le mien à la 2D ... Et il reste très très simple à programmer ...


RE: Générateur de Map Hexagonale - Klhz - 14-11-2012

Non non garde l'hexagonal! Je parlais uniquement de graphisme moi!
Je voulais dire rendre ta grille hexagonale invisible et ensuite, sur chaque hexagone, appliquer une texture (10 aléatoire par type de zones par exemple.).

Pour la riviere, avec un graphisme un peu épuré tu peux t'en sortir pour pas avoir de soucis avec l'ecoulement du courant. Mais javoue que si par code tu sais determiner l'orientation de la texture de chaque hexagone de riviere, ce serait la classe.


RE: Générateur de Map Hexagonale - Lord-Gargoyle - 16-11-2012

Oui ça serait une bonne idée.
Pour le sens des rivières, ce n'est pas très dur, puis que chaque case a une altitude, il faut aller dans le sens des altitudes décroissantes ....


RE: Générateur de Map Hexagonale - Thêta Tau Tau - 22-12-2012

Je remonte ce topic puisse que je suis en train de bidouiller un générateur de carte moi aussi.

J'ai utilisé l'équivalent de l'algorithme DiamondSquare pour les triangles. Je retrouve plus son nom et les tutos associés, mais pour résumer :
-On commence par un triangle dont on détermine l'altitude des 3 sommets aléatoirement.
-On calcule l'altitude des milieux des côtés du triangle en faisant la moyenne des deux sommets et en ajoutant un facteur aléatoire.
-Avec les 3 points initiaux plus les 3 qu'on viens de calculer, on fait 4 nouveaux triangles et on recommence pour diviser chaque sous-triangle en 4 jusqu'à ce qu'on ai la résolution qu'on veut.
-Bien sur il faut diviser par deux le facteur aléatoire qu'on ajoutte à la moyenne à chaque itération car on change d'échelle :
	scaledRoughness = function(iteration,roughness){
return roughness*(Math.random()-0.5)/Math.pow(iteration,2);
}
Plus roughness est élevé, plus on obtiendra un terrain accidenté (îlots, petits lacs, archipels...), à l'inverse, une valeur faible donnera de gros continents.

Si on rejoint les milieux des hexagones d'une carte on obtient des triangles, donc on peut utiliser les coordonnées des sommets de triangles obtenus précédemment directement dans la carte.
J'ai utilisé un seuil pour déterminer le type de terrain en fonction de l'altitude ainsi obtenue. Pour fixer mes seuils, je créé un tableau avec toutes les altitudes, je le tri, et je choisi mon seuil afin d'avoir la proportion de terre et de mer que je veux (j'ai fait avec seulement 2 types de terrain pour commencer, mais on peut en faire plus sans problème).

Exemple de résultat :
[Image: 146170map1.png]

Le gros problème de cette première version est qu'on ne maitrise pas du tout la forme du terrain généré. Le screen est vraiment choisi, souvent on obtient de gros pâtés ou à l'inverse des archipels de partout. Mais on peut tout à fait partir d'une carte basse résolution (faite à la main ou avec un autre algo) de la forme qu'on veut, et utiliser cette algoritme pour augmenter la résolution (et éventuellement retoucher derrière avec un autre algo, style retirer les îles d'une case, ajouter des rivières...).

De plus, on peut utiliser plusieurs "filtres" générés via cet algo en plus de l'altitude comme la température, l'humidité etc., puis les utiliser pour calculer les caractéristiques du terrain de manière très fine (par exemple une case de plaine peut être dérivée en désert, plaine, forêt, marais suivant le niveau d'humidité).

Voilà, c'était juste pour vous présenter cet algo, que je trouve à la fois puissant et très simple.

Je posterais des screens des prochaines versions.


EDIT:
J'ai refait tourné en partant d'une matrice d’altitude créée à la main (9*9), et le résultat est bien meilleurs!
[Image: 947645map2.png]
(j'ai fixé les altitude des bords de la carte très bas afin d'obtenir un continent au milieu, et défini quelques altitudes pour donner la forme globale du continent, même si le résultat ne ressemble que de loin à l'entrée)


RE: Générateur de Map Hexagonale - Thêta Tau Tau - 22-12-2012

La même chose, mais avec plus de terrains différents, parce que c'est plus joli Confusediffle:
[Image: 809168map2.png]


RE: Générateur de Map Hexagonale - archANJS - 23-12-2012

Pas mal Smile