Développement XNA pour la XBox et le PC
192
public Map(byte[,] table)
{
tileList = new Tile[table.GetLength(0),table.GetLength(1)];
for (int y = 0; y < table.GetLength(0); y++)
{
for (int x = 0; x < table.GetLength(1); x++)
{
tileList[y, x] = new Tile(y, x, table[y, x]);
}
}
}
public void Draw(SpriteBatch spriteBatch)
{
foreach (Tile tile in tileList)
{
tile.Draw(spriteBatch);
}
}
public bool ValidCoordinates(int x, int y)
{
if (x < 0)
return false;
if (y < 0)
return false;
if (x >= tileList.GetLength(1))
return false;
if (y >= tileList.GetLength(0))
return false;
return true;
}
}
Lier les nœuds aux cases : la distance de Manhattan
La prochaine classe à ajouter est celle des nœuds, appelez-la Node. Chaque nœud doit être
lié à une case Tile, doit pouvoir avoir un nœud parent et enfin, et doit connaître l’estimation
de la distance vers le nœud de destination. Nous utiliserons ici la distance de Manhattan.
Dans ce calcul, n’oubliez pas d’ajouter le coût de la case (les valeurs étant fixées dans
l’énumération TileType). La méthode GetPossibleNode() va chercher les nœuds voisins
(uniquement sur les axes horizontaux et verticaux) qui sont des cases valides et ne sont
pas des murs. Elle renvoie ensuite une collection List contenant les nœuds ainsi
trouvés.
La classe Node
class Node
{
Tile tile;
=Labat FM.book Page 192 Vendredi, 19. juin 2009 4:01 16
Précédent

- 213/366

Suivant