(21-08-2011, 05:59 PM)niahoo a écrit : peut être
En tout cas je ne comprends pas le coup des 14 puisque on est en cases hexagonales ! elles sont toutes équidistantes.
Ok, je comprends pourquoi vous vous obstiné sur ce 14 et c'est entièrement de ma faute.
Dans le soucis de proposer à la communauté un script qui gères les cases carrés & hexagonales, on peut choisir le mode, les trois premier mode sont pour les tuiles carré. Donc si on regarde de plus près:
if($coutParent !== NULL AND $xParent !== NULL AND $yParent !== NULL) {
$couts["g"] = (($mode == 2) AND (!is_int(($xCourrant-$xParent)/2) OR !is_int(($yCourrant-$yParent)/2))) ? $coutParent["g"] + 14 : $coutParent["g"] + 10; parent
Ceci ne seras exécuté que sur les carte à tuile carré!J'aurais du vous montrer la fonction casesAdjacentes, où tout est expliqué:
private function casesAdjacentes($x, $y) {
/* Mode:
1: Tuile carré classique(4 directions)
2: Tuile carré façon jeu de dames(4 diagonales)
3: Tuile carré avancé(4 directions + 4 diagonales)
4: Tuile hexagonal orienté verticalement(partie "plate" en haut & en bas) X pair
5: Tuile hexagonal orienté verticalement(partie "plate" en haut & en bas) X impair -- Réservé
6: Tuile hexagonal orienté horizontalement(partie "plate" à droite & à gauche) Y pair
7: Tuile hexagonal orienté horizontalement(partie "plate" à droite & à gauche) Y impair -- Réservé */
$mode = $this->mode;
if($mode == 4 AND !is_int($x/2)) $mode = 5;
else if ($mode == 6 AND !is_int($y/2)) $mode = 7;
$casesAdjacentes = array();
if(in_array($mode, array(1,3,4,5,6,7)) AND isset($this->map[$x][$y-1]) AND $this->map[$x][$y-1] == "franchissable") // X; Y-1
$casesAdjacentes[] = array($x, $y-1);
if(in_array($mode, array(2,3,4,6)) AND isset($this->map[$x+1][$y-1]) AND $this->map[$x+1][$y-1] == "franchissable") // X+1; Y-1
$casesAdjacentes[] = array($x+1, $y-1);
if(in_array($mode, array(1,3,4,5,6,7)) AND isset($this->map[$x+1][$y]) AND $this->map[$x+1][$y] == "franchissable") // X+1; Y
$casesAdjacentes[] = array($x+1, $y);
if(in_array($mode, array(2,3,5,6)) AND isset($this->map[$x+1][$y+1]) AND $this->map[$x+1][$y+1] == "franchissable") // X+1; Y+1
$casesAdjacentes[] = array($x+1, $y+1);
if(in_array($mode, array(1,3,4,5,6,7)) AND isset($this->map[$x][$y+1]) AND $this->map[$x][$y+1] == "franchissable") // X; Y+1
$casesAdjacentes[] = array($x, $y+1);
if(in_array($mode, array(2,3,5,7)) AND isset($this->map[$x-1][$y+1]) AND $this->map[$x-1][$y+1] == "franchissable") // X-1; Y+1
$casesAdjacentes[] = array($x-1, $y+1);
if(in_array($mode, array(1,3,4,5,6,7)) AND isset($this->map[$x-1][$y]) AND $this->map[$x-1][$y] == "franchissable") // X-1; Y
$casesAdjacentes[] = array($x-1, $y);
if(in_array($mode, array(2,3,4,7)) AND isset($this->map[$x-1][$y-1]) AND $this->map[$x-1][$y-1] == "franchissable") // X-1; Y-1
$casesAdjacentes[] = array($x-1, $y-1);
return $casesAdjacentes;
}
EDIT: d'ailleurs c'est éronné, celà devrait etre if $mode == 3, je viens de le corriger sur mon code local
EDIT²: vous pouvez voir le rendu pour les carte à tuiles carrés ici.
EDIT^3: après quelque F5 en mode 3, j'ai remarqué que le problème de parenté se posé ici aussi. (voir pièce jointe).
EDIT^4: et pire en mode 1... Mon script à vraiment un problème =(
EDIT^5: ma classe actuelle est la suivante: http://mazdesign.free.fr/aStar/class-highlight.html au vue des derniers rendu en mode "carré", je vais plutôt me pencher sur un problème sur la liste ouverte et non parent.