Pathfinding : programmer les déplacements des personnages
CHAPITRE 9
197
List sol = new List();
while (current.Parent != null)
{
sol.Add(current.Tile);
current = current.Parent;
}
return sol;
}
possibleNodes = current.GetPossibleNode(map, endTile);
possibleNodesCount = possibleNodes.Count;
for (int i = 0; i < possibleNodesCount; i++)
{
if (!closedList.Contains(possibleNodes[i]))
{
if (openList.Contains(possibleNodes[i]))
{
if (possibleNodes[i].EstimatedMovement < openList
➥[possibleNodes[i]].EstimatedMovement)
openList[possibleNodes[i]].Parent = current;
}
else
openList.DichotomicInsertion(possibleNodes[i]);
}
}
}
return null;
}
}
Phase de test
Il ne reste plus qu’à utiliser tout cela dans la classe ChapitreNeuf. Créez un objet de type
Map et initialisez-le via un tableau de byte. Dans la classe ci-dessous, la taille de la fenêtre
s’adapte automatiquement à la taille de la carte. Pour cela, il suffit de multiplier la taille
de chaque dimension de la carte par 32 (taille d’une case).
Dans la méthode Initialize(), vous allez créer un objet Tile pour le point de départ et un
autre pour le point d’arrivée. Modifiez la couleur du point de départ afin qu’il soit plus
facilement reconnaissable, stockez le résultat de CalculatePathWithAStar() dans une liste
de cases et parcourez-la de manière à coloriser toutes les cases qui composent le chemin.
Le premier élément de cette liste est le point d’arrivée, vous pouvez donc employer une
couleur différente. Enfin, il n’est pas nécessaire de revenir sur le contenu des méthodes
LoadContent() et Draw()…
Une classe pour tester l’algorithme
public class ChapitreNeuf : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
=Labat FM.book Page 197 Vendredi, 19. juin 2009 4:01 16
Précédent

- 218/366

Suivant