21-06-2007, 11:58 AM
J'ai un peu réfléchi et cela ne me semble pas super compliqué à comprendre. Maintenant, il faut encore le programmer.
Tout d'abord, je me suis basé sur cette disposition de case :
Soit le tuple [x,y] le point d'arrivée et le tuple [u,v] le point de départ (Cela ressemble à une démonstration mathématique mais c'est pour la clarté).
Si tu voyages uniquement horizontalement, c'est simple ^^ cela veut déjà dire que y = v
Tu prends ton tuple [x,y] auquel tu soustrais ton tuple [u,v]. Cela te donne un nouveau tuple [x-u, 0]. Tu considères la valeur x-u. Tu la divises par 2 en prenant toujours le nombre entier supérieur. Cela te donne le nombre de déplacement à effectuer pour aller de [u,v] à [x,y].
Si tu voyages uniquement verticalement, c'est tout aussi simple. Cela veut dire que x = u.
Tu refais la même chose soit la soustraction de [u,v] à [x,y]. Cela te donne [0,y-v]. Tu ne considères que la valeur y-v. Tu multiplies par 2.
Là, c'était les deux cas simples ^^
J'avoue que la partie suivante ne sera peut-être pas claire. Mais n'hésitez pas à poser des questions
Tu regardes si x et u sont paires ou impaires.
Pour savoir combien de cases, il te reste à faire, c'est simple. Tu calcules la nouvelle coordonnée (en fonction du nombre de déplacements en diagonale que tu as effectué) que l'on va appeller par le tuple [a,b].
Là, c'est la même méthode que pour l'horizontale. Donc tu effectues (x-a)/2. Le nombre obtenu est le nombre de déplacements horizontaux.
J'espère avoir été suffisament clair et que tu as compris.
Bien entendu, c'est la distance en terme de cases à parcourir.
Tu peux naturellement inverser donc d'abord effecuter les déplacements horizontaux puis diagonaux.
L'image a été produite à l'aide du simulateur trouvé sur LaLex. Vous y trouverez aussi des articules sur le pathfinding (donc la traduction d'un article).
Tout d'abord, je me suis basé sur cette disposition de case :
Soit le tuple [x,y] le point d'arrivée et le tuple [u,v] le point de départ (Cela ressemble à une démonstration mathématique mais c'est pour la clarté).
Si tu voyages uniquement horizontalement, c'est simple ^^ cela veut déjà dire que y = v
Tu prends ton tuple [x,y] auquel tu soustrais ton tuple [u,v]. Cela te donne un nouveau tuple [x-u, 0]. Tu considères la valeur x-u. Tu la divises par 2 en prenant toujours le nombre entier supérieur. Cela te donne le nombre de déplacement à effectuer pour aller de [u,v] à [x,y].
Si tu voyages uniquement verticalement, c'est tout aussi simple. Cela veut dire que x = u.
Tu refais la même chose soit la soustraction de [u,v] à [x,y]. Cela te donne [0,y-v]. Tu ne considères que la valeur y-v. Tu multiplies par 2.
Là, c'était les deux cas simples ^^
J'avoue que la partie suivante ne sera peut-être pas claire. Mais n'hésitez pas à poser des questions
Tu regardes si x et u sont paires ou impaires.
- Si x et u sont tous les deux paires ou impaires, tu fais (y-v)*2. C'est le nombre de cases que tu effectues en diagonales (bas gauche, bas droite, haut gauche ou haut droite, peu importe).
Maintenant, pour toutes les deux cases que tu effectues en diagonales (soit y-v), tu vas bouger de 2,1 (ou de -2,1 ou 2,-1 ou encore -2,-1 en fonction de la direction ^^).
- Si x et u ne sont pas tous les deux paires ou impaires, tu fais (y-v)*2 + 1. C'est le nombre de cases que tu effectues en diagonales.
Maintenant, pour toutes les deux cases que tu effectues en diagonales (soit y-v), tu vas bouger de 2,1 (ou de -2,1 ou 2,-1 ou encore -2,-1 en fonction de la direction ^^).
Mais n'oublie pas que tu as effectué encore une case en plus en diagonale. Ce qui veut dire que tu as augmenté/diminué encore de 1 unité sur la première coordonnée.
Attention, car il faut savoir si tu as sauté d'une ligne complète ou non
Exemple si tu es en 2,0 et que tu descendes, tu seras en en 3,0. Mais si tu montais, tu aurais été en 1,-1
Pour savoir combien de cases, il te reste à faire, c'est simple. Tu calcules la nouvelle coordonnée (en fonction du nombre de déplacements en diagonale que tu as effectué) que l'on va appeller par le tuple [a,b].
Là, c'est la même méthode que pour l'horizontale. Donc tu effectues (x-a)/2. Le nombre obtenu est le nombre de déplacements horizontaux.
J'espère avoir été suffisament clair et que tu as compris.
Bien entendu, c'est la distance en terme de cases à parcourir.
Tu peux naturellement inverser donc d'abord effecuter les déplacements horizontaux puis diagonaux.
L'image a été produite à l'aide du simulateur trouvé sur LaLex. Vous y trouverez aussi des articules sur le pathfinding (donc la traduction d'un article).