Pathfinding, algo et ldv

Tous les jeux ont besoin de logiques mathématiques. Concernant les jeux de stratégie, comme Hoaza, il s’agit principalement de logiques de parcours de graph.

Voilà donc un tour d’horizon des choix qui ont été faits pour les différentes problématiques :

 

Déplacement, A* :

Hoaza étant un jeu basé sur des cases, qu’on pourrait représenter comme un tableau à deux dimensions, incliné de 45°, il me fallait une solution pour pouvoir trouver rapidement le chemin le plus court entre deux points, avec comme exigence, la possibilité de parcourir le « tableau »  via les 8 directions qui entourent une case.

L’algo A* (AStar, Wikipédia), particulièrement rapide et suffisamment précis dans notre cas, était tout destiné à cette utilisation.

 

Parcours de la portée disponible, Breadth-First Search :

Pour ce cas, c’est un choix discutable. Pour afficher la portée d’un sort (en faisant abstraction des lignes de vue pour le moment), j’aurais pu simplement utiliser des boucles basiques pour déployer une portée spécifique autour du joueur. En revanche, j’aimerais peut-être pouvoir donner une valeur aux cases parcourues dans le futur. Par exemple, un sort qui passe par une zone boisée (c’est un pur exemple, rien de prévu pour le moment), verra son coût en points de portée multiplié par deux pour chaque case boisée traversée. Un sort avec 10 points de portée qui traverse une zone de deux cases boisées aura donc une portée finale de 6.

L’algo BFS (Wikipédia) me paraissait particulièrement indiqué dans ce cas-là. Si dans le futur, l’idée des coûts spécifiques par case n’est pas retenue, je partirai sur une option plus légère afin d’éviter d’alourdir inutilement le serveur. En effet, BFS parcourt chaque voisin de chaque case explorée. C’est intéressant mais plutôt lourd (cf GIF, j’ai ajouté une pause à chaque itération pour que vous puissiez constater le fonctionnement au ralenti).

gif breadth first search Hoaza

 

 

Recherche des lignes de vue :

Alors là c’est un peu plus archaïque. La solution la plus cohérente a été de « tracer une ligne » entre la case du joueur, et chaque case dans la zone de portée. Lorsqu’un trait traverse une case obstacle, la case cible est définie comme non atteignable.

Ça marche très bien et c’est suffisamment rapide mais si jamais, quelqu’un a une solution qui lui paraît plus pertinente, elle sera la bienvenue !

gif lignes de vue hoaza

0 Commentaire(s)
Écrire un commentaire
Préinscription à l'alpha privée

Vous recevrez trois clefs d'accès à l'alpha privée, pour vous et vos amis, dès le lancement de celle-ci.