Пример #1
0
        public override List <Evenement> executer(PersonnageAbstrait personnage, EnvironnementAbstrait env)
        {
            List <Evenement> evenements = new List <Evenement>();

            if (personnage.position.coordonnes.x < FourmiliereConstante.fourmiliere.x)
            {
                ZoneAbstraite pos = env.ZoneAbstraiteList[personnage.position.coordonnes.x].zoneAbstraiteList[personnage.position.coordonnes.y].AccesAbstraitList[(int)FourmiliereConstante.direction.droite].accesAbstrait.getFin(env);
                if (!pos.ZoneBloquee())
                {
                    personnage.Bouger(pos);
                    env.ZoneAbstraiteList[pos.coordonnes.x].zoneAbstraiteList[pos.coordonnes.y].AjouteObjet(new PheromoneGauche());
                    evenements.Add(new Evenement(personnage, (int)FourmiliereConstante.typeEvenement.mouvementDroit));
                }
            }
            else if (personnage.position.coordonnes.x > FourmiliereConstante.fourmiliere.x)
            {
                ZoneAbstraite pos = env.ZoneAbstraiteList[personnage.position.coordonnes.x].zoneAbstraiteList[personnage.position.coordonnes.y].AccesAbstraitList[(int)FourmiliereConstante.direction.gauche].accesAbstrait.getFin(env);
                if (!pos.ZoneBloquee())
                {
                    personnage.Bouger(pos);
                    env.ZoneAbstraiteList[pos.coordonnes.x].zoneAbstraiteList[pos.coordonnes.y].AjouteObjet(new PheromoneDroite());
                    evenements.Add(new Evenement(personnage, (int)FourmiliereConstante.typeEvenement.mouvementGauche));
                }
            }
            else if (personnage.position.coordonnes.y < FourmiliereConstante.fourmiliere.y)
            {
                //haut
                ZoneAbstraite pos = env.ZoneAbstraiteList[personnage.position.coordonnes.x].zoneAbstraiteList[personnage.position.coordonnes.y].AccesAbstraitList[(int)FourmiliereConstante.direction.haut].accesAbstrait.getFin(env);
                if (!pos.ZoneBloquee())
                {
                    personnage.Bouger(pos);
                    env.ZoneAbstraiteList[pos.coordonnes.x].zoneAbstraiteList[pos.coordonnes.y].AjouteObjet(new PheromoneBas());
                    evenements.Add(new Evenement(personnage, (int)FourmiliereConstante.typeEvenement.mouvementHaut));
                }
            }
            else if (personnage.position.coordonnes.y > FourmiliereConstante.fourmiliere.y)
            {
                ZoneAbstraite pos = env.ZoneAbstraiteList[personnage.position.coordonnes.x].zoneAbstraiteList[personnage.position.coordonnes.y].AccesAbstraitList[(int)FourmiliereConstante.direction.bas].accesAbstrait.getFin(env);
                if (!pos.ZoneBloquee())
                {
                    personnage.Bouger(pos);
                    env.ZoneAbstraiteList[pos.coordonnes.x].zoneAbstraiteList[pos.coordonnes.y].AjouteObjet(new PheromoneHaut());
                    evenements.Add(new Evenement(personnage, (int)FourmiliereConstante.typeEvenement.mouvementBas));
                }
            }

            if (personnage.position.coordonnes.equals(FourmiliereConstante.fourmiliere) && ((Fourmi)personnage).nourriturePortee == true)
            {
                evenements.Add(depotNourriture(personnage, env));
                ((Fourmi)personnage).nourriturePortee = false;
                personnage.comportement = new ChercherAManger();
                env.fourmiliere.valeurNutritiveTotalFourmiliere++;
            }
            return(evenements);
        }
Пример #2
0
        public override List <Evenement> executer(PersonnageAbstrait personnage, EnvironnementAbstrait env)
        {
            List <Evenement> evenements = new List <Evenement>();

            if (((Fourmi)personnage).nourriturePortee == true)
            {
                personnage.comportement = new RentrerFourmiliere();
                return(evenements);
            }
            if (env.ZoneAbstraiteList[personnage.position.coordonnes.x].zoneAbstraiteList[personnage.position.coordonnes.y].containsObjet(typeof(Nourriture), env))
            {
                Console.WriteLine("out");
                if (personnage.GetType().BaseType == typeof(Fourmi))
                {
                    Fourmi f = (Fourmi)personnage;

                    f.nourriturePortee = true;
                    env.ZoneAbstraiteList[personnage.position.coordonnes.x].zoneAbstraiteList[personnage.position.coordonnes.y].getNourriture(env).valeurNutritive--;
                }
                if (env.ZoneAbstraiteList[personnage.position.coordonnes.x].zoneAbstraiteList[personnage.position.coordonnes.y].containsObjet(typeof(Nourriture), env))
                {
                    personnage.comportement = new RentrerFourmiliere();
                }
                else
                {
                    DecorateurSupprimerPheromone deco = new DecorateurSupprimerPheromone();
                    deco.ajouterComportement(new RentrerFourmiliere());
                    personnage.comportement = deco;
                }
                evenements.Add(new Evenement(personnage, (int)FourmiliereConstante.typeEvenement.passeLeTour));
            }

            else
            {
                ZoneAbstraite zone = env.ZoneAbstraiteList[personnage.position.coordonnes.x].zoneAbstraiteList[personnage.position.coordonnes.y];

                if (zone.getPheromone() != null && !zone.AccesAbstraitList[zone.getPheromone().direction]
                    .accesAbstrait.getFin(env).ZoneBloquee())
                {
                    personnage.Bouger(
                        zone.AccesAbstraitList[zone.getPheromone().direction]
                        .accesAbstrait.getFin(env));
                }
                else
                {
                    personnage.comportement = new DeplacementAleatoire();
                    personnage.comportement.executer(personnage, env);
                }
                if (zone.getPheromone() != null)
                {
                    switch (zone.getPheromone().direction)
                    {
                    case ((int)FourmiliereConstante.direction.bas):
                    {
                        evenements.Add(new Evenement(personnage, (int)FourmiliereConstante.typeEvenement.mouvementBas));
                        break;
                    }

                    case ((int)FourmiliereConstante.direction.haut):
                    {
                        evenements.Add(new Evenement(personnage, (int)FourmiliereConstante.typeEvenement.mouvementHaut));
                        break;
                    }

                    case ((int)FourmiliereConstante.direction.gauche):
                    {
                        evenements.Add(new Evenement(personnage, (int)FourmiliereConstante.typeEvenement.mouvementGauche));
                        break;
                    }

                    case ((int)FourmiliereConstante.direction.droite):
                    {
                        evenements.Add(new Evenement(personnage, (int)FourmiliereConstante.typeEvenement.mouvementDroit));
                        break;
                    }
                    }
                }
            }


            return(evenements);
        }
Пример #3
0
        public override List <Evenement> executer(PersonnageAbstrait personnage, EnvironnementAbstrait env)
        {
            List <Evenement> evenements  = new List <Evenement>();
            ZoneAbstraite    zoneOuAller = ((Fourmi)personnage).AnalyserSituation(env);

            if (zoneOuAller == null)
            {
                personnage.comportement = new DeplacementAleatoire();
                evenements.AddRange(personnage.executerComportement(env));
            }
            else
            {
                int diffX = personnage.position.coordonnes.x - zoneOuAller.coordonnes.x;
                int diffY = personnage.position.coordonnes.y - zoneOuAller.coordonnes.y;
                if (diffX < 0)
                {
                    //droite
                    ZoneAbstraite pos = env.ZoneAbstraiteList[personnage.position.coordonnes.x].zoneAbstraiteList[personnage.position.coordonnes.y].AccesAbstraitList[(int)FourmiliereConstante.direction.droite].accesAbstrait.getFin(env);
                    if (!pos.ZoneBloquee())
                    {
                        personnage.Bouger(pos);
                        evenements.Add(new Evenement(personnage, (int)FourmiliereConstante.typeEvenement.mouvementDroit));
                    }
                    else
                    {
                        personnage.comportement = new DeplacementAleatoire();
                        evenements.AddRange(personnage.executerComportement(env));
                    }
                }
                else if (diffX > 0)
                {
                    ZoneAbstraite pos = env.ZoneAbstraiteList[personnage.position.coordonnes.x].zoneAbstraiteList[personnage.position.coordonnes.y].AccesAbstraitList[(int)FourmiliereConstante.direction.gauche].accesAbstrait.getFin(env);
                    if (!pos.ZoneBloquee())
                    {
                        personnage.Bouger(pos);
                        evenements.Add(new Evenement(personnage, (int)FourmiliereConstante.typeEvenement.mouvementGauche));
                    }
                    else
                    {
                        personnage.comportement = new DeplacementAleatoire();
                        evenements.AddRange(personnage.executerComportement(env));
                    };
                }
                else if (diffY < 0)
                {
                    ZoneAbstraite pos = env.ZoneAbstraiteList[personnage.position.coordonnes.x].zoneAbstraiteList[personnage.position.coordonnes.y].AccesAbstraitList[(int)FourmiliereConstante.direction.haut].accesAbstrait.getFin(env);
                    if (!pos.ZoneBloquee())
                    {
                        personnage.Bouger(pos);
                        evenements.Add(new Evenement(personnage, (int)FourmiliereConstante.typeEvenement.mouvementHaut));
                    }
                    else
                    {
                        personnage.comportement = new DeplacementAleatoire();
                        evenements.AddRange(personnage.executerComportement(env));
                    }
                }
                else if (diffY > 0)
                {
                    ZoneAbstraite pos = env.ZoneAbstraiteList[personnage.position.coordonnes.x].zoneAbstraiteList[personnage.position.coordonnes.y].AccesAbstraitList[(int)FourmiliereConstante.direction.bas].accesAbstrait.getFin(env);
                    if (!pos.ZoneBloquee())
                    {
                        personnage.Bouger(pos);
                        evenements.Add(new Evenement(personnage, (int)FourmiliereConstante.typeEvenement.mouvementBas));
                    }
                    else
                    {
                        personnage.comportement = new DeplacementAleatoire();
                        evenements.AddRange(personnage.executerComportement(env));
                    }
                }
            }

            return(evenements);
        }
Пример #4
0
        public override List <Evenement> executer(PersonnageAbstrait personnage, EnvironnementAbstrait env)
        {
            List <Evenement> evenements = new List <Evenement>();
            ZoneAbstraite    position   = env.ZoneAbstraiteList[personnage.position.coordonnes.x].zoneAbstraiteList[personnage.position.coordonnes.y];

            if (!position.TousAccesBloque(env))
            {
                bool   zoneTrouvee = false;
                int    rnd         = 0;
                Random r           = new Random((int)DateTime.Now.Ticks);
                int    cpt         = 0;
                while (!zoneTrouvee)
                {
                    if (cpt < 5)
                    {
                        rnd = r.Next(0, 3);
                    }
                    if (cpt == 6)
                    {
                        rnd = 0;
                    }
                    if (cpt == 7)
                    {
                        rnd = 1;
                    }
                    if (cpt == 8)
                    {
                        rnd = 2;
                    }
                    if (cpt == 9)
                    {
                        rnd = 3;
                    }
                    if (position.AccesAbstraitList[rnd] != null && !position.AccesAbstraitList[rnd].accesAbstrait.getFin(env).ZoneBloquee())
                    {
                        zoneTrouvee = true;
                    }
                    cpt++;
                }

                personnage.Bouger(position.AccesAbstraitList[rnd].accesAbstrait.getFin(env));
                switch (rnd)
                {
                case (int)FourmiliereConstante.direction.bas:
                    evenements.Add(new Evenement(personnage, (int)FourmiliereConstante.typeEvenement.mouvementBas));
                    break;

                case (int)FourmiliereConstante.direction.haut:
                    evenements.Add(new Evenement(personnage, (int)FourmiliereConstante.typeEvenement.mouvementHaut));
                    break;

                case (int)FourmiliereConstante.direction.gauche:
                    evenements.Add(new Evenement(personnage, (int)FourmiliereConstante.typeEvenement.mouvementGauche));
                    break;

                case (int)FourmiliereConstante.direction.droite:
                    evenements.Add(new Evenement(personnage, (int)FourmiliereConstante.typeEvenement.mouvementDroit));
                    break;
                }
            }
            else
            {
                evenements.Add(new Evenement(personnage, (int)FourmiliereConstante.typeEvenement.passeLeTour));
            }
            if (personnage.GetType().BaseType == typeof(Fourmi))
            {
                if (((Fourmi)personnage).nourriturePortee == false && personnage.GetType() != typeof(FourmiChaman))
                {
                    personnage.comportement = new ChercherAManger();
                }
                else if (personnage.GetType() == typeof(FourmiChaman))
                {
                    personnage.comportement = new ComportementChaman();
                }
                else
                {
                    personnage.comportement = new RentrerFourmiliere();
                }
            }
            return(evenements);
        }