JeuWeb - Crée ton jeu par navigateur
[PHP] Algorithme Astar sur tuile hexagonale - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [PHP] Algorithme Astar sur tuile hexagonale (/showthread.php?tid=5653)

Pages : 1 2 3


RE: Algorithme Astar sur tuile hexagonale - niahoo - 21-08-2011

Et même avant ça, il vaut mieux faire un implémentation qui fonctionne comme on le souhaite sur un seul type de données.
(en isolant dans des méthodes/fonctions chaque type de traitement)

Comme ça si il reste un bug on pourra trouver les bugs.

Ensuite seulemen abstraire (ça se dit ?) le calcul des cases adjacentes et des distances pour pouvoir traiter différentes formes.

Il faudra le faire en gardant à l'esprit que tu veux pouvoir ajouter des modes. (voire en enlever).

Actuellement si tu veux ajouter un mode il te faut modifier pas mal d'endroits.


RE: Algorithme Astar sur tuile hexagonale - Maz - 21-08-2011

C'est ce que je comptais faire au début mais me je suis dis que ça ne serais pas beaucoup moins gérable de n'en faire qu'une seule... je vais diviser tout ça.
Et je vais faire un rendu des cartes SVG pour m'amuser et m'entraîner.

Edit: niahoo > Personnellement je n'utiliserais qu'une seule de ces classes pour mes jeux (je suis pro-hexagonale), mais coder les autres me permettes de m'entraîner et surtout mieux comprendre l'algorithme. Je me compliques toujours les tâches pour qu'ensuite les autres me paraissent vraiment facile.

Edit²: Yess!! je crois avoir trouver le gros du problème. En fait je me bases toujours sur la case ayant le plus petit F parmi les cases adjacentes, et non parmi toute la liste ouverte!

Edit^3: Les trois classes pour les tuiles carrés sont opérationnels =) dispo ici:
Mode classique: Aperçu - Fichier.class.php
Mode dames: Aperçu - Fichier.class.php
Mode omnidirectionnel: Aperçu - Fichier.class.php
J'ai limité les mouvements en diagonales dans le mode omnidirectionnel, il est par exemple impossible d'effectuer ce mouvement: 0,0 > 1,1 si la case 0,1 est infranchissable car cela aurait pour effet de "survoler" cette case infranchissable, ce que je ne trouves pas réaliste. Libre à vous de modifier ensuite.
Je posterais les classes demain dans la partie ressources.