Пример #1
0
 public FourmiOuvriere(string nom, ZoneAbstraite b, int id, EnvironnementAbstrait env) : base(nom, b, id, env)
 {
     nourriturePortee   = false;
     this.champDeVision = 10;
     this.pointDeVie    = 20;
     this.comportement  = new ChercherAManger();
 }
Пример #2
0
        public override ZoneAbstraite creerZone(string nom, Coordonnees coordonnees, EnvironnementAbstrait env)
        {
            ZoneAbstraite zone = new BoutDeTerrain(nom, coordonnees);

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

            env.ZoneAbstraiteList[pos.coordonnes.x].zoneAbstraiteList[pos.coordonnes.y].SupprimerPheromone();
            return(evenements);
        }
Пример #4
0
        public ZoneAbstraite repererZone(PersonnageAbstrait personnage, Type type, EnvironnementAbstrait env)
        {
            //champs de vision
            int champsVision = personnage.champDeVision;

            ZoneAbstraite pos         = env.ZoneAbstraiteList[personnage.position.coordonnes.x].zoneAbstraiteList[personnage.position.coordonnes.y];
            ZoneAbstraite zoneTrouvee = null;

            if (pos.containsObjet(type, env))
            {
                zoneTrouvee = pos;
            }
            for (int i = -1 * champsVision; i <= champsVision && i >= -1 * champsVision && zoneTrouvee == null; i++)
            {
                bool iOk = false;
                if (i < 0 && pos.AccesAbstraitList[(int)FourmiliereConstante.direction.gauche] != null)
                {
                    pos = pos.AccesAbstraitList[(int)FourmiliereConstante.direction.gauche].accesAbstrait.getFin(env);
                    iOk = true;
                }
                else if (i > 0 && pos.AccesAbstraitList[(int)FourmiliereConstante.direction.droite] != null)
                {
                    pos = pos.AccesAbstraitList[(int)FourmiliereConstante.direction.droite].accesAbstrait.getFin(env);
                    iOk = true;
                }
                else if (i == 0)
                {
                    iOk = true;
                }
                if (pos.containsObjet(type, env) || pos.containsObjet(type.BaseType, env))
                {
                    zoneTrouvee = pos;
                }
                if (iOk)
                {
                    for (int j = -1 * champsVision; j <= champsVision && j >= -1 * champsVision && zoneTrouvee == null; j++)
                    {
                        if (j < 0 && pos.AccesAbstraitList[(int)FourmiliereConstante.direction.bas] != null)
                        {
                            pos = pos.AccesAbstraitList[(int)FourmiliereConstante.direction.bas].accesAbstrait.getFin(env);
                        }
                        else if (j > 0 && pos.AccesAbstraitList[(int)FourmiliereConstante.direction.haut] != null)
                        {
                            pos = pos.AccesAbstraitList[(int)FourmiliereConstante.direction.haut].accesAbstrait.getFin(env);
                        }
                        if (pos.containsObjet(type, env))
                        {
                            zoneTrouvee = pos;
                        }
                    }
                }
            }

            /*if(zoneNourriture!=null)
             *  personnage.position = zoneNourriture;*/

            return(zoneTrouvee);
        }
Пример #5
0
 public Evenement depotNourriture(PersonnageAbstrait personnage, EnvironnementAbstrait env)
 {
     if (personnage.GetType() == typeof(Fourmi))
     {
         ((Fourmi)personnage).nourriturePortee = false;
         personnage.comportement = new ChercherAManger();
         //env.fourmiliere.valeurNutritiveTotalFourmiliere++;
     }
     return(new Evenement(personnage, (int)FourmiliereConstante.typeEvenement.passeLeTour));
 }
Пример #6
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);
        }
Пример #7
0
        public override List <Evenement> executer(PersonnageAbstrait personnage, EnvironnementAbstrait env)
        {
            List <Evenement>          evenements  = comportement.executer(personnage, env);
            ZoneAbstraite             newPosition = personnage.position;
            List <PersonnageAbstrait> listeFourmi = newPosition.ListeFourmiAlentours(env);

            foreach (PersonnageAbstrait f in listeFourmi)
            {
                Fourmi fourmi = (Fourmi)f;
                f.pointDeVie++;
            }
            return(evenements);
        }
Пример #8
0
        public override ZoneAbstraite AnalyserSituation(EnvironnementAbstrait env)
        {
            if (this.position.containsObjet(typeof(Nourriture), env))
            {
                if (this.GetType().BaseType == typeof(Fourmi))
                {
                    Fourmi f = this;

                    f.nourriturePortee = true;
                    this.position.getNourriture(env).valeurNutritive--;
                }
                if (this.position.containsObjet(typeof(Nourriture), env))
                {
                    this.comportement = new RentrerFourmiliere();
                }
                else
                {
                    DecorateurSupprimerPheromone deco = new DecorateurSupprimerPheromone();
                    deco.ajouterComportement(new RentrerFourmiliere());
                    this.comportement = deco;
                }
                return(null);
            }
            else
            {
                ZoneAbstraite zoneOuAller = this.repererZone(this, typeof(PheromoneDroite), env);
                if (zoneOuAller == null)
                {
                    zoneOuAller = this.repererZone(this, typeof(PheromoneGauche), env);
                }
                if (zoneOuAller == null)
                {
                    zoneOuAller = this.repererZone(this, typeof(PheromoneHaut), env);
                }
                if (zoneOuAller == null)
                {
                    zoneOuAller = this.repererZone(this, typeof(PheromoneBas), env);
                }
                if (zoneOuAller == null)
                {
                    zoneOuAller = this.repererZone(this, typeof(Nourriture), env);
                }
                else
                {
                    this.comportement = new SuivrePheromone();
                    this.executerComportement(env);
                }
                return(zoneOuAller);
            }
        }
Пример #9
0
        public override List <Evenement> executer(PersonnageAbstrait personnage, EnvironnementAbstrait env)
        {
            FabriqueAbstraite fabriqueFourmiliere = new FabriqueFourmiliere();
            List <Evenement>  evenements          = new List <Evenement>();

            if (personnage.GetType() == typeof(Oeuf))
            {
                Oeuf oeuf = (Oeuf)personnage;
                oeuf.timer--;
                if (oeuf.timer == 0)
                {
                    evenements.Add(new Evenement(personnage, (int)FourmiliereConstante.typeEvenement.eclore));
                    oeuf.pointDeVie = 0;
                }
            }
            return(evenements);
        }
Пример #10
0
        public override List <Evenement> executer(PersonnageAbstrait personnage, EnvironnementAbstrait env)
        {
            FabriqueAbstraite fabriqueFourmiliere = new FabriqueFourmiliere();
            List <Evenement>  evenements          = new List <Evenement>();

            if (env.fourmiliere.valeurNutritiveTotalFourmiliere >= 2)
            {
                Console.Write("Ponte oeuf/n");
                Random r   = new Random((int)DateTime.Now.Ticks);
                int    rnd = r.Next((int)FourmiliereConstante.typeFourmie.oeufFourmiOuvriere, (int)FourmiliereConstante.typeFourmie.oeufFourmiChaman);

                env.AjouterPersonnage(fabriqueFourmiliere.creerPersonnage("oeuf" + FabriqueFourmiliere.id, rnd, env.fourmiliere.position, env));
                evenements.Add(new Evenement(personnage, (int)FourmiliereConstante.typeEvenement.pondreOeuf));
                env.fourmiliere.valeurNutritiveTotalFourmiliere -= 2;
            }
            return(evenements);
        }
Пример #11
0
        static void Main(string[] args)
        {
            Console.WriteLine("----- Fourmilière -----");

            FabriqueAbstraite uneFabrique = new FabriqueFourmiliere();

            EnvironnementAbstrait fourmiPalace = uneFabrique.CreerEnvironment();

            fourmiPalace.ChargerEnvironnement(uneFabrique);
            fourmiPalace.ChargerPersonnages(uneFabrique);

            Console.WriteLine(fourmiPalace.Statistiques());

            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(fourmiPalace.Simuler());
            }

            Console.ReadLine();
        }
Пример #12
0
 public override void actualiser(bool etatPluie, EnvironnementAbstrait env)
 {
     if (etatPluie == true)
     {
         if (this.GetType() == typeof(FourmiGuerriere) || this.GetType() == typeof(FourmiGuerriere) || this.GetType() == typeof(FourmiChaman))
         {
             this.comportement = new RentrerFourmiliere();
             this.executerComportement(env);
         }
     }
     else
     {
         if (this.GetType() == typeof(FourmiGuerriere) || this.GetType() == typeof(FourmiGuerriere))
         {
             this.comportement = new ChercherAManger();
             this.executerComportement(env);
         }
         else if (this.GetType() == typeof(FourmiChaman))
         {
             this.comportement = new ComportementChaman();
             this.executerComportement(env);
         }
     }
 }
Пример #13
0
 public FabriqueAbstraite()
 {
     env = EnvironnementConcret.getInstance();
 }
Пример #14
0
 public abstract ZoneAbstraite AnalyserSituation(EnvironnementAbstrait env);
Пример #15
0
 public abstract void actualiser(bool etatPluie, EnvironnementAbstrait env);
Пример #16
0
 public override List <Evenement> executerComportement(EnvironnementAbstrait env)
 {
     return(this.comportement.executer(this, env));
 }
Пример #17
0
 public abstract ObjetAbstrait creerObjet(string nom, int TypeObjet, ZoneAbstraite coordonnes, EnvironnementAbstrait env);
Пример #18
0
 public Fourmi(string nom, ZoneAbstraite c, int id, EnvironnementAbstrait env) : base(nom, id, env)
 {
     this.position = c;
 }
Пример #19
0
 public FourmiGuerriere(string nom, ZoneAbstraite b, int id, EnvironnementAbstrait env) : base(nom, b, id, env)
 {
     this.champDeVision = 4;
     this.pointDeVie    = 100;
     this.comportement  = new ChercherAManger();
 }
Пример #20
0
 public FourmiChaman(String nom, ZoneAbstraite c, int id, EnvironnementAbstrait env) : base(nom, c, id, env)
 {
     this.comportement = new ComportementChaman();
     this.pointDeVie   = 200;
 }
Пример #21
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);
        }
Пример #22
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);
        }
Пример #23
0
 public abstract ZoneAbstraite creerZone(string nom, Coordonnees coordonnees, EnvironnementAbstrait env);
Пример #24
0
 public PersonnageAbstrait(int id, EnvironnementAbstrait env)
 {
     this.nom = nom;
     this.env = env;
 }
Пример #25
0
 public abstract PersonnageAbstrait creerPersonnage(string nom, int typeFourmi, ZoneAbstraite zoneFourmiliere, EnvironnementAbstrait env);
Пример #26
0
 public abstract List <Evenement> executerComportement(EnvironnementAbstrait env);
        public override List <Evenement> executer(PersonnageAbstrait personnage, EnvironnementAbstrait env)
        {
            List <Evenement> evenements = comportement.executer(personnage, env);

            return(evenements);
        }
Пример #28
0
 public FourmiReine(string nom, ZoneAbstraite b, int id, EnvironnementAbstrait env) : base(nom, b, id, env)
 {
     this.champDeVision = 0;
     this.pointDeVie    = 400;
     this.comportement  = new PondreOeufs();
 }
Пример #29
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);
        }
Пример #30
0
 public PersonnageAbstrait(String nom, int id, EnvironnementAbstrait env)
 {
     this.nom = nom;
     this.id  = id;
     this.env = env;
 }