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