Esempio n. 1
0
        public void Déplacer(Fourmi uneFourmi)
        {
            if (uneFourmi.Position == null || uneFourmi.Position.PrendreObjet() is Fourmiliere)
            {
                return;
            }

            if (uneFourmi.Position.Chemins.Count(x => x.autreBout(uneFourmi.Position).Occupant == null) == 0)
            {
                return;
            }

            Parcelle uneParcelle = uneFourmi.Position.Chemins.Cast <Tunnel>().Where(x => x.autreBout(uneFourmi.Position).Occupant == null)
                                   .ElementAt(rand.Next(0, uneFourmi.Position.Chemins.Count(x => x.autreBout(uneFourmi.Position).Occupant == null)))
                                   .autreBout(uneFourmi.Position) as Parcelle;

            uneFourmi.Position = uneParcelle;

            if (uneFourmi.Position.PrendreObjet() is Objectif)
            {
                // Ne devrait pas arriver si les déplacements n'étaient pas aléatoires
                return;
            }
            if (uneFourmi.Position.PrendreObjet() is Fourmiliere)
            {
                uneFourmi.Etat = EtatRentrée.GetInstance;
            }
            else if (uneFourmi.DeposerPheromone() > 0)
            {
                if (uneFourmi.Position.estVide())
                {
                    uneFourmi.Position.AjouterObjet(new Pheromone(uneFourmi.Position));
                    (uneFourmi.Position.PrendreObjet() as Pheromone).poids += uneFourmi.DeposerPheromone();
                }
                else if (uneFourmi.Position.PrendreObjet() is Pheromone)
                {
                    (uneFourmi.Position.PrendreObjet() as Pheromone).poids += uneFourmi.DeposerPheromone();
                }
            }
        }
Esempio n. 2
0
        public void Déplacer(Fourmi uneFourmi)
        {
            if (uneFourmi.Position.Chemins.Count(x => x.autreBout(uneFourmi.Position).Occupant == null) == 0)
            {
                return;
            }

            Parcelle uneParcelle = uneFourmi.Position.Chemins.Cast <Tunnel>().Where(x => x.autreBout(uneFourmi.Position).Occupant == null)
                                   .ElementAt(rand.Next(0, uneFourmi.Position.Chemins.Count(x => x.autreBout(uneFourmi.Position).Occupant == null)))
                                   .autreBout(uneFourmi.Position) as Parcelle;

            uneFourmi.Position = uneParcelle;

            if (uneFourmi.Position.PrendreObjet() is Fourmiliere)
            {
                // Ne devrait pas arriver si les déplacements n'étaient pas aléatoires
                return;
            }
            if (uneFourmi.Position.PrendreObjet() is Objectif)
            {
                uneFourmi.Strategie = DéplacementRetour.GetInstance;
            }
        }