[Javascript] Implémentation simple d'AStar
| Arcanis |
Posté le 12 Nov 2008 à 14:33
|
|
![]() Messages : 35 GCPoints : 14109 |
Salut ! Vu que je rend mon projet public, autant que je fasse la même chose pour certaines des briques qu'il utilise. Et notamment sur cette classe, dont je suis relativement fier, vu que je l'ai faite sans avoir de documentation, n'ayant aucun accès à internet. Elle permet de retrouver rapidement le plus court chemin entre deux points. Pour l'utiliser, il n'y a que deux fonctions à connaitre: le constructeur et la méthode process(). Voici la documentation des fonctions: Code : <void> function AStar(array Map [, object Config]); @Map contient un objet qui devra contenir la carte. Par exemple, le tableau suivant est valide et contiendra une carte où tout les déplacements couteront 1: [ [ 1 , 1 ] , [ 1 , 1 ] ] @Config contient un objet recensant la configuration du moteur AStar. Il est optionnel, et s'il est mentionné, tous les paramètres qui ne sont pas indiqués seront remplacés par ceux par défaut. Consultez la documentation des options pour plus de détails. Code : <array> function AStar.process(int startX, int startY, int endX, int endY); @startX et @startY contiennent simplement les coordonnées de départ. @endX et @endY contiennent simplement les coordonnées de fin. La fonction retourne un tableau, contenant deux ou trois valeurs: 1: (int / bool) Contient false si aucun chemin n'a été trouvé, et dans le cas contraire le coût total 2: (array / bool) Contient false si aucun chemin n'a été trouvé, et dans le cas contraire le chemin trouvé 3: (int) N'est présent que si une erreur s'est déroulée. Contient le numéro de l'erreur. Consultez la documentation des erreurs pour plus de détails. Documentation des codes d'erreur:
1 Nombre maximal d'itérations atteint, et aucun chemin trouvé. 2 Pas de chemin disponible. Documentation des options:
debug Si true, affiche quelques informations à l'écran. Pas besoin de l'utiliser, normalement. false par défaut. ondbg Contient une fonction callback appelée lorsqu'il y a un débugguage. Par défaut: Code : function(msg){document.write(msg);}diagonal Si true, le moteur AStar recherchera également les chemins avec les diagonales. Par défaut, false. cost Contient une fonction callback appelée pour calculer le cout de déplacement sur une case. Par défaut: Code : function(obj, fromX, fromY, toX, toY) { return obj.map[toY][toX]; }heuristic Contient une fonction callback appelée pour calculer le cout avec l'heuristique. Par défaut, l'heuristique de Manhattan est utilisée. Code : function(obj, x, y) { return ( Math.abs(obj.endX - x) + Math.abs(obj.endY - y) ); }wall Contient une fonction callback appelée pour savoir si une case est un mur ou non. Par défaut: Code : function(obj, fromX, fromY, toX, toY) { return false; }Dans toutes les fonctions callback, @obj représente l'objet AStar lui-même, et @obj.map permet d'accéder à la carte précédement enregistrée lors de la création de l'objet. Notez qu'il est tout à fait possible de remplir le case du tableau avec des objets, puis de redéfinir les fonctions calklback afin de tenir compte de plusieurs paramètres (par exemple, pour Kyria, j'ai pris en compte les autorisations de déplacement vers la gauche/droite/haut/bas). Je ne sais pas si j'ai été assez clair ... Quoi qu'il en soit, tout est disponible à l'intérieur même du fichier, et ça devrait être plus précis. http://www.arcanis.fr/demos/kyria/2008-11-08/public/js/astar.object.js Enjoy
Dernière édition le 12 Nov 2008 à 14:34
Le PHP fait des jeux vidéos (enfin ... quand même pas de la 3D en temps réel ...).
Le PHP fait des sites internet. Le PHP ne fait pas votre café. |
|
