public override void Deplacement(int dimX, int dimY, PersonnageAbstrait unPerso) { ObservableCollection <ZoneAbstrait> zoneAccessible = new ObservableCollection <ZoneAbstrait>(); ZoneAbstrait zoneFourmille = null; foreach (ZoneAbstrait uneZone in unPerso.ChoixZoneSuivante.Zonesaccessibles) { /*si on trouve une Fourmille on l'attaque*/ if (uneZone.PersonnageList.Where(x => x.GetType().Equals(typeof(Reine))).Count() > 0) { zoneFourmille = uneZone; break; } else if (uneZone.PersonnageList.Where(x => x.GetType().Equals(typeof(Ouvriere))).Count() > 0) { zoneFourmille = uneZone; break; } else if (uneZone.PersonnageList.Where(x => x.GetType().Equals(typeof(Guerriere))).Count() > 0) { zoneFourmille = uneZone; break; } else { zoneAccessible.Add(uneZone); } } if (zoneFourmille != null) { unPerso.Position.X = zoneFourmille.Position.X; unPerso.Position.Y = zoneFourmille.Position.Y; } else { int maCase = Hazard.Next(zoneAccessible.Count); zoneAccessible.OrderByDescending(x => x.Position.X); if (unPerso.Position.X > unPerso.Maison.X) { if (zoneAccessible[maCase].Position.X != unPerso.Position.X && (unPerso.Position.X - unPerso.Maison.X) > zoneAccessible[maCase].Position.X - unPerso.Maison.X) { unPerso.Position.X = zoneAccessible[maCase].Position.X; } } else { if (zoneAccessible[maCase].Position.X != unPerso.Position.X && (unPerso.Position.X - unPerso.Maison.X) < zoneAccessible[maCase].Position.X - unPerso.Maison.X) { unPerso.Position.X = zoneAccessible[maCase].Position.X; } } if (unPerso.Position.Y > unPerso.Maison.Y) { if (zoneAccessible[maCase].Position.Y != unPerso.Position.Y && (unPerso.Position.Y - unPerso.Maison.Y) > zoneAccessible[maCase].Position.Y - unPerso.Maison.Y) { unPerso.Position.Y = zoneAccessible[maCase].Position.Y; } } else { if (zoneAccessible[maCase].Position.Y != unPerso.Position.Y && (unPerso.Position.Y - unPerso.Maison.Y) < zoneAccessible[maCase].Position.Y - unPerso.Maison.Y) { unPerso.Position.Y = zoneAccessible[maCase].Position.Y; } } } /* * int newX = unPerso.Position.X + Hazard.Next(3) - 1; * int newY = unPerso.Position.Y + Hazard.Next(3) - 1; * if ((newX >= 0) && (newX < dimX) && (newX<=unPerso.Maison.X+5) && (newX>=unPerso.Maison.X-5)) unPerso.Position.X = newX; * if ((newY >= 0) && (newY < dimX) && (newY <= unPerso.Maison.Y + 5) && (newY >= unPerso.Maison.Y - 5)) unPerso.Position.Y = newY; */ }
public override void Deplacement(int dimX, int dimY, PersonnageAbstrait unPerso) { ObservableCollection <ZoneAbstrait> zonePheromone = new ObservableCollection <ZoneAbstrait>(); ObservableCollection <ZoneAbstrait> zoneAccessible = new ObservableCollection <ZoneAbstrait>(); ZoneAbstrait zoneNourriture = null; //Console.WriteLine(unPerso.ChoixZoneSuivante.Zonesaccessibles.Count); foreach (ZoneAbstrait uneZone in unPerso.ChoixZoneSuivante.Zonesaccessibles) { if (uneZone.PersonnageList.Where(x => x.GetType().Equals(typeof(Termite))).Count() == 0) { /*si on trouve de la nourriture on go*/ try { if (uneZone.ObjetList.Where(x => x.GetType().Equals(typeof(Nourriture))).Count() > 0) { zoneNourriture = uneZone; break; } else if (uneZone.ObjetList.Where(x => x.GetType().Equals(typeof(Pheromone))).Count() > 0) { zonePheromone.Add(uneZone); } else { zoneAccessible.Add(uneZone); } }catch (Exception e) { e.ToString(); } } } if (zoneNourriture != null) { unPerso.Position.X = zoneNourriture.Position.X; unPerso.Position.Y = zoneNourriture.Position.Y; } else if (zonePheromone.Count > 0) { ZoneAbstrait zoneMinPhero = null; int dureeDeVeMin = Pheromone.DureeVieOriginale; foreach (ZoneAbstrait uneZone in zonePheromone) { foreach (Pheromone phermonoe in uneZone.ObjetList.Where(x => x.GetType().Equals(typeof(Pheromone)))) { if (phermonoe.Dureevie < dureeDeVeMin) { dureeDeVeMin = phermonoe.Dureevie; zoneMinPhero = uneZone; } } } unPerso.Position.X = zoneMinPhero.Position.X; unPerso.Position.Y = zoneMinPhero.Position.Y; } else { /*Selectionne une case vide au harzard*/ int maCase = Hazard.Next(zoneAccessible.Count); /*Récupération de l'ancienne case pour ne pas retourner en arriere*/ int oldX = unPerso.ListEtape[unPerso.ListEtape.Count - 1].position.X; int oldY = unPerso.ListEtape[unPerso.ListEtape.Count - 1].position.Y; while ((unPerso.Position.Y == zoneAccessible[maCase].Position.Y && unPerso.Position.X == zoneAccessible[maCase].Position.X) || (zoneAccessible[maCase].Position.X == oldX && zoneAccessible[maCase].Position.Y == oldY)) { maCase = Hazard.Next(zoneAccessible.Count); } unPerso.Position.X = zoneAccessible[maCase].Position.X; unPerso.Position.Y = zoneAccessible[maCase].Position.Y; /*int newX = unPerso.Position.X + Hazard.Next(3) - 1; * int newY = unPerso.Position.Y + Hazard.Next(3) - 1; * if ((newX >= 0) && (newX < dimX)) unPerso.Position.X = newX; * if ((newY >= 0) && (newY < dimX)) unPerso.Position.Y = newY;*/ } }
public override void Deplacement(int dimX, int dimY, PersonnageAbstrait unPerso) { ObservableCollection <ZoneAbstrait> zoneAccessible = new ObservableCollection <ZoneAbstrait>(); ZoneAbstrait zoneTermite = null; foreach (ZoneAbstrait uneZone in unPerso.ChoixZoneSuivante.Zonesaccessibles) { if (uneZone.Position.Y >= unPerso.Maison.Y - 5 && uneZone.Position.Y <= unPerso.Maison.Y + 5 && uneZone.Position.X >= unPerso.Maison.X - 5 && uneZone.Position.X <= unPerso.Maison.X + 5) { /*si on un termite on l'attaque*/ if (uneZone.PersonnageList.Where(x => x.GetType().Equals(typeof(Termite))).Count() > 0) { zoneTermite = uneZone; break; } else { zoneAccessible.Add(uneZone); } } } if (zoneTermite != null) { unPerso.Position.X = zoneTermite.Position.X; unPerso.Position.Y = zoneTermite.Position.Y; } else { int maCase = Hazard.Next(zoneAccessible.Count); if (zoneAccessible.Count > 0) { unPerso.Position.X = zoneAccessible[maCase].Position.X; unPerso.Position.Y = zoneAccessible[maCase].Position.Y; } /*retour a la fourmilliere si elle a bougé a plus de 5 y et 5 x*/ else { if (unPerso.Position.Y != unPerso.Maison.Y) { if (unPerso.Position.Y < unPerso.Maison.Y) { unPerso.Position.Y++; } else { unPerso.Position.Y--; } } else if (unPerso.Position.X != unPerso.Maison.X) { if (unPerso.Position.X < unPerso.Maison.X) { unPerso.Position.X++; } else { unPerso.Position.X--; } } } } /* * int newX = unPerso.Position.X + Hazard.Next(3) - 1; * int newY = unPerso.Position.Y + Hazard.Next(3) - 1; * if ((newX >= 0) && (newX < dimX) && (newX<=unPerso.Maison.X+5) && (newX>=unPerso.Maison.X-5)) unPerso.Position.X = newX; * if ((newY >= 0) && (newY < dimX) && (newY <= unPerso.Maison.Y + 5) && (newY >= unPerso.Maison.Y - 5)) unPerso.Position.Y = newY; */ }
public Chemin(ZoneAbstrait zFin, ZoneAbstrait zDebut) { this.Debut = zDebut; this.Fin = zFin; }