Calcul de chemins optimaux (pathfinding)

Pour illustrer deux articles sur le calcul des chemins optimaux pour les jeux vidéo, publiés dans les numéros 53 (septembre 2003) et 54 (octobre 2003) du GNU/Linux Magazine, j'ai développé une petite application Java qui propose une implémentation des différents algorithmes présentés (en particulier l'algorithme de Dijkstra et l'algorithme A*). Le logiciel est sous licence GPL et toute collaboration est la bienvenue.

Présentation

Pour l'instant, il n'y a aucune autre documentation que les commentaires du code, les articles de Linux Magazine et cette page ! La version actuelle a été testée uniquement sous Linux, avec le jdk 1.4.2 de SUN. Comme les fichiers qui décrivent les terrains sont écrits en XML, le fonctionnement avec une version antérieure du jdk demanderait au minimum l'installation d'un parser XML externe. Notez bien que le programme est assez bourré de bogues...

La version 0.0 disponible actuellement est plus que rudimentaire. Elle se présente sous d'un fichier jar qu'on lance classiquement avec la commande java -jar pathfinding.jar.

Avant de lancer l'application, il faut aussi avoir téléchargé et décompressé les descriptions de terrains (cf au dessous).

Utilisation

Une fois l'application démarrée, la première chose à faire est d'ouvrir un terrain par le menu File (entrée Open). Les fichiers xml de terrain sont très simples et faciles à modifier, mais pour l'instant, vous devrez deviner comment ! Une fois le fichier choisi, le terrain s'affiche. On peut zoomer et dézoomer grâce aux touches + et -. La touche g permet d'afficher la grille sous-jacente au terrain. Les touches de direction permettent de bouger le terrain.

On peut ensuite faire toutes sortes de réglages sur le modèle de terrain et sur l'algorithme utilisé :

Une fois les réglagles effectués, il suffit de cliquer sur le point de départ et sur le point d'arrivée pour voir le chemin se tracer, après un petit calcul. La barre d'état affiche une estimation du temps de calcul, le coût du chemin trouvé, le nombre de cases dans les listes Ouverts et Fermés. De plus, la représentation de la carte comporte la liste Ouverts (les cercles bleus) et la liste Fermés (les cercles verts). La touche o active (ou désactive) l'affiche de la liste Ouverts, la touche c jouant le même rôle pour la liste Fermés. La touche f propose un affichage sous forme de disques pleins, alors que la touche e permet de revenir à l'affichage de départ.

Pour faciliter la comparaison de l'effet des différents choix, on peut redemander le calcul d'un chemin grâce à l'entrée Recalculate Path du menu Path finder.

J'insiste sur le fait que le programme contient des bogues. Le plus important est lié au fait que le calcul du chemin se fait dans un thread dédié, ce qui provoque parfois un affichage étrange (dans l'animation) ou des plantages liés à des accès parallèles à une structure partagée entre l'affichage et les algorithmes. De plus, je me suis focalisé sur les algorithmes sans tenir compte de l'occupation mémoire qui est en fait assez importante. Toute collaboration est la bienvenue !

Téléchargement