Example #1
0
    public List <TuileManager> CreerGrapheTuilesAPortee(TuileManager tuileOrigine, float portee, bool peutEmbarquer)
    {
        ReinitGraphe();
        List <TuileManager> grapheAPortee = new List <TuileManager>();

        Queue <TuileManager> fileTuiles = new Queue <TuileManager>();

        fileTuiles.Enqueue(tuileOrigine);
        tuileOrigine.parcouru = true;

        //Parcours en largeur (BFS)
        while (fileTuiles.Count > 0)
        {
            TuileManager tuileObservee = fileTuiles.Dequeue();

            tuileObservee.EstAPortee();

            if (tuileObservee.distance < portee)
            {
                for (int i = 0; i < tuileObservee.connections.Count; i++)
                {
                    if (tuileObservee.connections[i] != null)
                    {
                        TuileManager tuileFille = tuileObservee.connections[i];

                        if (!tuileFille.parcouru && tuileFille.estOccupee == false) //On demande si la tuile a déjà été explorée par l'algo et si elle est occupée
                        {
                            if (peutEmbarquer)                                      // si on peut embarquer, aucune restriction concernant l'eau
                            {
                                tuileFille.parcouru     = true;
                                tuileFille.predecesseur = tuileObservee;
                                tuileFille.distance    += tuileObservee.connectionsDistance[i] + tuileObservee.distance;
                                fileTuiles.Enqueue(tuileFille);

                                grapheAPortee.Add(tuileFille);
                            }
                            else if (!tuileFille.terrainTuile.ettendueEau)// si on ne peut peux pas embarquer, alors l'algo ne prend pas en compte les tuiles d'eau
                            {
                                tuileFille.parcouru     = true;
                                tuileFille.predecesseur = tuileObservee;
                                tuileFille.distance    += tuileObservee.connectionsDistance[i] + tuileObservee.distance;
                                fileTuiles.Enqueue(tuileFille);

                                grapheAPortee.Add(tuileFille);
                            }
                        }
                    }
                }
            }
        }
        return(grapheAPortee);
    }
Example #2
0
    //Génère le graphe de toutes les tuiles à portée
    public List <TuileManager> CreerGrapheTuilesAPortee(TuileManager tuileOrigine, float portee)
    {
        ReinitGraphe();
        List <TuileManager> grapheAPortee = new List <TuileManager>();

        Queue <TuileManager> fileTuiles = new Queue <TuileManager>();

        fileTuiles.Enqueue(tuileOrigine);
        tuileOrigine.parcouru = true;

        //Parcours en largeur (BFS)
        while (fileTuiles.Count > 0)
        {
            TuileManager tuileObservee = fileTuiles.Dequeue();

            tuileObservee.EstAPortee();

            if (tuileObservee.distance < portee)
            {
                for (int i = 0; i < tuileObservee.connections.Count; i++)
                {
                    if (tuileObservee.connections[i] != null)
                    {
                        TuileManager tuileFille = tuileObservee.connections[i];

                        if (!tuileFille.parcouru && tuileFille.estOccupee == false)//On demande si la tuile a déjà été explorée par l'algo et si elle est occupée
                        {
                            tuileFille.parcouru     = true;
                            tuileFille.predecesseur = tuileObservee;
                            tuileFille.distance    += tuileObservee.connectionsDistance[i] + tuileObservee.distance;
                            fileTuiles.Enqueue(tuileFille);

                            grapheAPortee.Add(tuileFille);
                        }
                    }
                }
            }
        }
        return(grapheAPortee);
    }