[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) |
[PHP] Algorithme Astar sur tuile hexagonale - Maz - 20-08-2011 Bonjour, je suis toujours dans mon algorithme A* sur cases hexagonale:cogne:. J'ai commencer par développer le script pour des cases carrée, puis j'ai reprogrammer la fonction "casesAdjacentes" qui renvoi les cases adjacentes à celle analysé. Le script fonctionne (ou presque) puisqu'il arrives à trouver la case final, mais au moment de retracé le chemin, celui-ci est sacadé, voici un petit aperçu du dis problème: Case verte: départ. Case rouge: case cherché Case noir: franchissable Case bleu foncé: non-franchissable Case bleu clair: le chemin final Je penses que le problème est dût à l'update du parent si le score est plus faible, mais je n'arrives pas à trouver le problème... Voici le code de ma fonction:
Si vous voyez quelque chose de louche que je rates, même si je sais qu'un code brut comme ça est pas facile à corriger lorsqu'il n'est pas de soit-même.
RE: Algorithme Astar sur tuile hexagonale - niahoo - 20-08-2011 faudrait que tu divises un peu. Une fonction 'liste des cases adjacentes', une 'case la plus proche d'une case X dans une liste de cases', séparer un peu la gestion des pointeurs sur tes open list / closed list Et quand ce sera plus lisible non seulement on pourra t'aidear beaucoup plus mais tu trouveras le bug de toi-même RE: Algorithme Astar sur tuile hexagonale - popayan - 20-08-2011 J'aimerai savoir comment tu gères les coordonnées de tes cases hexagonales? RE: Algorithme Astar sur tuile hexagonale - Maz - 20-08-2011 Justement je suis en train de revoir ce système car actuellement, je les gères de la façon "classique". Et je suis en train de calculer pour passer sur un axe Y orienté à 60° de l'axe X et non 90°, comme ici. Ce seras certainement plus facile à gérer pour l'algorithme A star. Je posterais mes sources si celà t'intéresses, pour l'instant j'essaie de généré une map basique pour comprendre le placement des cases. RE: Algorithme Astar sur tuile hexagonale - popayan - 20-08-2011 Pour les coordonnées, y a ca qui pourrait t'intéresser RE: Algorithme Astar sur tuile hexagonale - Maz - 20-08-2011 Je suis déjà tomber sur ce topic il y a quelques temps, que je n'approuves pas pour le simple fait qu'ajouter une troisième coordonnée deviendrais ingérable pour le joueur, d'autant que le troisième paramètre est obsolète: Supprime la coordonnée Z dans chacune des cases, et tu verras que chaque cases est déjà parfaitement identifié et unique et ça revient donc à utiliser le système des deux axes orientés chacun l'un de l'autre à 60°. RE: Algorithme Astar sur tuile hexagonale - Hideaki - 21-08-2011 Comme indiqué sur ma pièce joint, je transpose de cette manière les tuiles hexagonales en tableau. On peut apercevoir que seul les 2 cases en diagonale ont un déplacement impossible (en un seul mouvement d'une case). Cette transposition à l'intérêt d'être plus compréhensible pour nous humain Pour ton code, je suis de l'avis de nihaoo ... Tu pourrais utiliser la conception objet pour t'aider ce qui rendrait ton code plus compréhensible ou plus simple. RE: Algorithme Astar sur tuile hexagonale - Maz - 21-08-2011 (21-08-2011, 02:23 PM)Hideaki a écrit : Comme indiqué sur ma pièce joint, je transpose de cette manière les tuiles hexagonales en tableau. Ton schéma est juste, dans ce cas là, mais quand je me suis lancé sur une map hexagonal, je ne m'attendais pas à tomber sur autant de soucis. Par exemple: les cases adjacentes dans le tableau ne sont pas les mêmes selon si x est pair ou impair, voir pièce jointe. J'ai fait le script de façon universelle de façon à le proposer à la communauté. Il gère déjà parfaitement: les cases carré avec mouvement D G B H les cases carré avec juste les diagonales (façon jeu de dames) les cases carré avec 8 directions Maintenant il ne me reste plus qu'à réglé ce petit soucis. J'ai quasiment fini de restructure ma carte avec le nouveau système de coordonnée, une fois que c'est fini je reprendrais ce script. RE: Algorithme Astar sur tuile hexagonale - Hideaki - 21-08-2011 Oui cela dépend mais une petite condition est toujours mieux qu'un long calcul Si tu pouvais simplifier ton algo (voir le post de Nihaoo) et nous fournir aussi ton algo de la fonction coût RE: Algorithme Astar sur tuile hexagonale - Maz - 21-08-2011 Je suis en train de simplifier, en attendant, voici la fonction coutCase:
Et maintenant que je me relis, je ne suis pas très sur de:
EDIT: Finalement simplifier... En fait je ne fait que déplacer du code, ajouter des intermédiaires etc... Je vais directement retranscrire mes fonctions dans une classe où se seras vraiment plus lisible. |