Unité uGBEPathFinder.pas - gbegreg/GBE3D GitHub Wiki

Unité uGBEPathFinder.pas

Cette unité implémente l'algorithme A* de recherche de chemin entre un point de départ et un point d'arrivée. Vous trouverez un exemple d'utilisation avec la démo PathFinder fournie.

TGBENoeud

Représente un élément de base qui servira au traitement. Il est constitué des propriétés suivantes :

  • coutDeplacement de type integer, permet de définir le cout de déplacement du noeud parent vers ce noeud;

  • heuristique de type integer, permet de définir le cout de déplacement de ce noeud jusqu'au noeud d'arrivée;

  • estimationCout de type integer, c'est la somme de coutDeplacement et de heuristique;

  • position de type TPoint, indique la position du noeud;

  • parent de type TPoint, indique la position du noeud parent.

TGBEPathFinderMode

C'est une énumération qui permet de spécifier le mode de traitement qui sera utilisé lors du traitement (deplacementsMinimum ou coutMinimum).

TGBEPathFinder

Représente l'objet qui réalisera le traitement.

Propriétés

NoeudDepart : de type TGBENoeud, indique le TGBENoeud de départ;

NoeudArrivee : de type TGBENoeud, indique le TGBENoeud d'arrivée;

LargeurGrille : de type integer, indique la largeur de la grille;

HauteurGrille : de type integer, indique la heuteur de la grille;

CoutDeplacementCote : de type integer, indique le cout de déplacement d'une case à une case adjacente;

CoutDeplacementDiagonal : de type integer, indique le cout de déplacement d'une case à une case en diagonal;

AutoriserDeplacementDiagonal : de type boolean, indique si les déplacements en diagonal sont autorisé;

QuePremiereEtape : de type boolean, indique si seulement la première étape de l'algorithme est réalisée;

Mode : de type TGBEPathFinderMode, indique le mode de traitement;

listeChemin : de type TDictionary<TPoint, TGBENoeud>, cette liste de noeuds contient le résultat du traitement : le chemin trouvé si QuePremiereEtape est à false, les cases possibles étudiées sinon.

listeNoeudsObstacles : de type TDictionary<TPoint, TGBENoeud>, cette liste de noeuds contient les noeuds considérés comme obstacles et donc infranchissables.

Méthodes

function RechercherChemin:boolean

Cette méthode lance le traitement de recherche de chemin. Elle renvoie true si un chemin est trouvé et listeChemin contiendra les noeuds constituant le chemin, false si aucun chemin n'est trouvé.