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); }
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); }
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); }
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); }