// Aide à deboguer public static string Draw(Noeud[,] Map) { string MapString = ""; for (int j = 0; j < Map.GetLength(1); j++) { for (int i = 0; i < Map.GetLength(0); i++) if (Map[i,j].IsWalkable) MapString += " "; else MapString += "X"; MapString += "\n"; } MapString += "\n"; return MapString; }
static List<Noeud> Voisins(Noeud current, Noeud[,] Map, bool enableDiagonales) { Noeud noeud = null; List<Noeud> voisins = new List<Noeud> { }; // TOP if (current.Position.Y - 1 >= 0 && Map[(int)current.Position.X, (int)current.Position.Y - 1].IsWalkable) { noeud = Map[(int)current.Position.X, (int)current.Position.Y - 1]; voisins.Add(noeud); } // RIGHT if (current.Position.X + 1 < Map.GetLength(0) && Map[(int)current.Position.X + 1, (int)current.Position.Y].IsWalkable) { noeud = Map[(int)current.Position.X + 1, (int)current.Position.Y]; voisins.Add(noeud); } // BOT if (current.Position.Y + 1 < Map.GetLength(1) && Map[(int)current.Position.X, (int)current.Position.Y + 1].IsWalkable) { noeud = Map[(int)current.Position.X, (int)current.Position.Y + 1]; voisins.Add(noeud); } // LEFT if (current.Position.X - 1 >= 0 && Map[(int)current.Position.X - 1, (int)current.Position.Y].IsWalkable) { noeud = Map[(int)current.Position.X - 1, (int)current.Position.Y]; voisins.Add(noeud); } // TOP LEFT if (current.Position.Y - 1 >= 0 && current.Position.X - 1 >= 0 && Map[(int)current.Position.X - 1, (int)current.Position.Y - 1].IsWalkable && Map[(int)current.Position.X - 1, (int)current.Position.Y].IsWalkable && Map[(int)current.Position.X, (int)current.Position.Y - 1].IsWalkable) { noeud = Map[(int)current.Position.X - 1, (int)current.Position.Y - 1]; noeud.CoutF -= 1; voisins.Add(noeud); } // TOP RIGHT if (current.Position.Y - 1 >= 0 && current.Position.X + 1 < Map.GetLength(0) && Map[(int)current.Position.X + 1, (int)current.Position.Y - 1].IsWalkable && Map[(int)current.Position.X, (int)current.Position.Y - 1].IsWalkable && Map[(int)current.Position.X + 1, (int)current.Position.Y].IsWalkable) { noeud = Map[(int)current.Position.X + 1, (int)current.Position.Y - 1]; noeud.CoutF -= 1; voisins.Add(noeud); } // BOT LEFT if (current.Position.X - 1 >= 0 && current.Position.Y + 1 < Map.GetLength(1) && Map[(int)current.Position.X - 1, (int)current.Position.Y + 1].IsWalkable && Map[(int)current.Position.X - 1, (int)current.Position.Y].IsWalkable && Map[(int)current.Position.X, (int)current.Position.Y + 1].IsWalkable) { noeud = Map[(int)current.Position.X - 1, (int)current.Position.Y + 1]; noeud.CoutF -= 1; voisins.Add(noeud); } // BOT RIGHT if (current.Position.X + 1 < Map.GetLength(0) && current.Position.Y + 1 < Map.GetLength(1) && Map[(int)current.Position.X + 1, (int)current.Position.Y + 1].IsWalkable && Map[(int)current.Position.X, (int)current.Position.Y + 1].IsWalkable && Map[(int)current.Position.X + 1, (int)current.Position.Y].IsWalkable) { noeud = Map[(int)current.Position.X + 1, (int)current.Position.Y + 1]; noeud.CoutF -= 1; voisins.Add(noeud); } return voisins; }