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(); }
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); }
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); }
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); }
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)); }
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 = 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); }
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); } }
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); }
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); }
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(); }
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); } } }
public FabriqueAbstraite() { env = EnvironnementConcret.getInstance(); }
public abstract ZoneAbstraite AnalyserSituation(EnvironnementAbstrait env);
public abstract void actualiser(bool etatPluie, EnvironnementAbstrait env);
public override List <Evenement> executerComportement(EnvironnementAbstrait env) { return(this.comportement.executer(this, env)); }
public abstract ObjetAbstrait creerObjet(string nom, int TypeObjet, ZoneAbstraite coordonnes, EnvironnementAbstrait env);
public Fourmi(string nom, ZoneAbstraite c, int id, EnvironnementAbstrait env) : base(nom, id, env) { this.position = c; }
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(); }
public FourmiChaman(String nom, ZoneAbstraite c, int id, EnvironnementAbstrait env) : base(nom, c, id, env) { this.comportement = new ComportementChaman(); this.pointDeVie = 200; }
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); }
public abstract ZoneAbstraite creerZone(string nom, Coordonnees coordonnees, EnvironnementAbstrait env);
public PersonnageAbstrait(int id, EnvironnementAbstrait env) { this.nom = nom; this.env = env; }
public abstract PersonnageAbstrait creerPersonnage(string nom, int typeFourmi, ZoneAbstraite zoneFourmiliere, EnvironnementAbstrait env);
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); }
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(); }
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 PersonnageAbstrait(String nom, int id, EnvironnementAbstrait env) { this.nom = nom; this.id = id; this.env = env; }