Une façon simple de faire pour un tablier orthogonale c'est de considérer pour chaque case de terre les quatre cases qui sont autours de lui pour les quatre points cardinaux de base (i.e. nord, sud, est & ouest).
Ce qui donne, pour une case de terre, 6 types de tuiles possibles :
- 1 tuile de terre pleine sans aucune case d'eau autour (c'est ta tuile de base)
- 4 tuiles avec 1 case d'eau autour (au nord, au sud, à l'est ou à l'ouest)
- 6 tuiles avec 2 cases d'eau autour dont :
- 4 tuiles avec deux cases d'eau autour "en coin" (i.e nord-ouest, nord-est, sud-est ou sud-ouest)
- 2 tuiles avec deux cases d'eau autour opposées (i.e nord-sud ou est-ouest)
- 4 tuiles avec 3 cases d'eau autour (i.e. avec 1 case de terre autour au nord, au sud, à l'est ou à l'ouest)
- 1 tuile avec 4 cases d'eau autour (i.e. une île).
Ce qui fait 16 tuiles différentes en tout, avec 6 types de tuiles distinct.
Il faudra donc dessiner ces 16 tuiles (ou récupérer les assets correspondant). En vérité, ça ne demande réellement que 5 nouvelles tuiles (si on fait symétrique) puisque toutes les tuiles sont des variations des 6 types de tuile de base ci-dessus (par rotation) et que tu as déjà, normalement, la tuile de case de terre pleine.Lorsque tu dessine le sable il faut aussi faire attention à ce que les différentes tuiles "s'emboitent bien", c'est à dire que les séparations terre/sable/eau s'arrêtent bien au même niveau sur les bords de la tuile).
Ensuite il faut simplement une fonction qui retourne la tuile adéquate en fonction de l'un des 16 cas dans lequel se trouve la case de terre.
Il y a parfois un codage sur 4 bits qui est utilisé : il consiste à dire que chaque bit indique la présence ou non d'une case d'eau sur l'un des quatre points cardinaux (par exemple 15 = '1111' en binaire représente une tuile avec 4 case d'eau autour ; 14 = '1110', 13 = '1101', 11 = '1011' et 7 = '0111' représentent des tuiles avec 3 cases d'eau autour ; 0 = '0000' indique une tuile sans aucune case d'eau autour, etc.). Ensuite il suffit d'ordonner les tuiles dans un tableau de façon à ce que le codage de l'indice de la tuile coïncide avec sa représentation.
Remarque : on peut aussi prendre en compte les cases diagonales pour affiner encore plus la représentation et c'est le même principe mais avec beaucoup plus de cas à gérer (le codage est sur 8 bits donc il y a 256 cas possibles).
Je ne sais pas si c'était ce genre de réponse que tu voulais ; c'est comme ça que j'ai compris la question.
Ce qui donne, pour une case de terre, 6 types de tuiles possibles :
- 1 tuile de terre pleine sans aucune case d'eau autour (c'est ta tuile de base)
- 4 tuiles avec 1 case d'eau autour (au nord, au sud, à l'est ou à l'ouest)
- 6 tuiles avec 2 cases d'eau autour dont :
- 4 tuiles avec deux cases d'eau autour "en coin" (i.e nord-ouest, nord-est, sud-est ou sud-ouest)
- 2 tuiles avec deux cases d'eau autour opposées (i.e nord-sud ou est-ouest)
- 4 tuiles avec 3 cases d'eau autour (i.e. avec 1 case de terre autour au nord, au sud, à l'est ou à l'ouest)
- 1 tuile avec 4 cases d'eau autour (i.e. une île).
Ce qui fait 16 tuiles différentes en tout, avec 6 types de tuiles distinct.
Il faudra donc dessiner ces 16 tuiles (ou récupérer les assets correspondant). En vérité, ça ne demande réellement que 5 nouvelles tuiles (si on fait symétrique) puisque toutes les tuiles sont des variations des 6 types de tuile de base ci-dessus (par rotation) et que tu as déjà, normalement, la tuile de case de terre pleine.Lorsque tu dessine le sable il faut aussi faire attention à ce que les différentes tuiles "s'emboitent bien", c'est à dire que les séparations terre/sable/eau s'arrêtent bien au même niveau sur les bords de la tuile).
Ensuite il faut simplement une fonction qui retourne la tuile adéquate en fonction de l'un des 16 cas dans lequel se trouve la case de terre.
Il y a parfois un codage sur 4 bits qui est utilisé : il consiste à dire que chaque bit indique la présence ou non d'une case d'eau sur l'un des quatre points cardinaux (par exemple 15 = '1111' en binaire représente une tuile avec 4 case d'eau autour ; 14 = '1110', 13 = '1101', 11 = '1011' et 7 = '0111' représentent des tuiles avec 3 cases d'eau autour ; 0 = '0000' indique une tuile sans aucune case d'eau autour, etc.). Ensuite il suffit d'ordonner les tuiles dans un tableau de façon à ce que le codage de l'indice de la tuile coïncide avec sa représentation.
Remarque : on peut aussi prendre en compte les cases diagonales pour affiner encore plus la représentation et c'est le même principe mais avec beaucoup plus de cas à gérer (le codage est sur 8 bits donc il y a 256 cas possibles).
Je ne sais pas si c'était ce genre de réponse que tu voulais ; c'est comme ça que j'ai compris la question.