Example #1
0
        // 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;
        }
Example #2
0
        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;
        }