18-09-2019, 10:24 AM
(Modification du message : 18-09-2019, 10:35 AM par Thêta Tau Tau.)
Je me suis pas mal inspiré des conseils présentés ici (pour générer des grottes à la base).
A) Automate cellulaire
Les automates cellulaires sont quelque chose d'ultra classique.
J'utilise les règles suggérées dans le premier lien, en me basant sur le total de cases de sol parmi les 8 voisins d'une cellule + la cellule elle même:
- 4 itérations : case de sol si 5 à 8 cases de sol
- 3 itérations : case de sol si 5 à 9 cases de sol
B) Réduction de l'échelle
Un truc important que j'ai changé par rapport au lien précédent, c'est que je génère une grille 2x plus grande que ce que je veut obtenir à la fin (en hauteur et en largeur, donc 4x plus grande en fait). Et qu'après avoir fait tourner l'automate cellulaire, je réduit la grille. La probabilité qu'une cellule de la grille réduite aie une certaine valeur étant la fréquence de cette valeur dans le carré de 4 cases qui lui correspond dans la grille non réduite.
Ca permet de réduire l'échelle des "salles" et "couloir" par 2. En effet l'automate cellulaire génère des "couloirs" de 5 ou 6 cases de large en moyenne, ce qui est trop pour ce que je veut. Sur mon screen on voit que les couloirs font 2 à 3 cases de large (parfois même 1).
C) Placement de l'entrée
Une fois mes arbres ainsi placés, je prends un point placé au hasard sur un cercle centré sur la carte, avec un rayon suffisant pour que le cercle soit entièrement en dehors de la carte. Je trace ensuite un trait entre ce point et le centre de la carte, et la première case sur ce trait qui est une case vide sera l'entrée du niveau (en vert).
D) Nettoyage
Je liste toute les cases connectées à mon entrée.
S'il n'y en a pas assez, je recommence de zéro (l'algo est très rapide c'est pas un souci).
S'il y en a assez, je met des arbres dans toutes les cases non connectées.
E) Placement de la sortie
Pareil que pour l'entrée, en tourant le point sur le cercle extérieur de 120° à 240° de façon à ce que la sortie soit plus ou moins opposée à l'entrée.
F) Placement des points d'intérêt
Les points d'intérêts sont les groupes de monstres, trésors etc.
Je reprends la liste de cellules connectés (étape D), je la mélange au hasard, puis je tire les cellules une par une, si la cellule ainsi choisie est suffisamment éloignée de l'entrée, de la sortie et des autres points d'intérêt, je la sélectionne comme point d'intérêt. Je fais ça jusqu'à avoir suffisamment de points d'intérêt. Si je n'a pas assez de points d'intérêt après avoir parcouru toutes les cellules je recommence l'algo de 0.
Entrée Sortie Points d'intérêt
Pour l'instant il n'y a que des petits arbres pour simplifier, j'améliorerais ça plus tard pour que ce soit plus joli.
A) Automate cellulaire
Les automates cellulaires sont quelque chose d'ultra classique.
J'utilise les règles suggérées dans le premier lien, en me basant sur le total de cases de sol parmi les 8 voisins d'une cellule + la cellule elle même:
- 4 itérations : case de sol si 5 à 8 cases de sol
- 3 itérations : case de sol si 5 à 9 cases de sol
B) Réduction de l'échelle
Un truc important que j'ai changé par rapport au lien précédent, c'est que je génère une grille 2x plus grande que ce que je veut obtenir à la fin (en hauteur et en largeur, donc 4x plus grande en fait). Et qu'après avoir fait tourner l'automate cellulaire, je réduit la grille. La probabilité qu'une cellule de la grille réduite aie une certaine valeur étant la fréquence de cette valeur dans le carré de 4 cases qui lui correspond dans la grille non réduite.
Ca permet de réduire l'échelle des "salles" et "couloir" par 2. En effet l'automate cellulaire génère des "couloirs" de 5 ou 6 cases de large en moyenne, ce qui est trop pour ce que je veut. Sur mon screen on voit que les couloirs font 2 à 3 cases de large (parfois même 1).
C) Placement de l'entrée
Une fois mes arbres ainsi placés, je prends un point placé au hasard sur un cercle centré sur la carte, avec un rayon suffisant pour que le cercle soit entièrement en dehors de la carte. Je trace ensuite un trait entre ce point et le centre de la carte, et la première case sur ce trait qui est une case vide sera l'entrée du niveau (en vert).
D) Nettoyage
Je liste toute les cases connectées à mon entrée.
S'il n'y en a pas assez, je recommence de zéro (l'algo est très rapide c'est pas un souci).
S'il y en a assez, je met des arbres dans toutes les cases non connectées.
E) Placement de la sortie
Pareil que pour l'entrée, en tourant le point sur le cercle extérieur de 120° à 240° de façon à ce que la sortie soit plus ou moins opposée à l'entrée.
F) Placement des points d'intérêt
Les points d'intérêts sont les groupes de monstres, trésors etc.
Je reprends la liste de cellules connectés (étape D), je la mélange au hasard, puis je tire les cellules une par une, si la cellule ainsi choisie est suffisamment éloignée de l'entrée, de la sortie et des autres points d'intérêt, je la sélectionne comme point d'intérêt. Je fais ça jusqu'à avoir suffisamment de points d'intérêt. Si je n'a pas assez de points d'intérêt après avoir parcouru toutes les cellules je recommence l'algo de 0.
Entrée Sortie Points d'intérêt
Pour l'instant il n'y a que des petits arbres pour simplifier, j'améliorerais ça plus tard pour que ce soit plus joli.