Exemplo n.º 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);
        }
Exemplo n.º 2
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);
        }