public override void Deplacement(int dimX, int dimY, PersonnageAbstrait unPerso) { int maCase = Hazard.Next(unPerso.ChoixZoneSuivante.Zonesaccessibles.Count); unPerso.Position.X = unPerso.ChoixZoneSuivante.Zonesaccessibles[maCase].Position.X; unPerso.Position.Y = unPerso.ChoixZoneSuivante.Zonesaccessibles[maCase].Position.Y; }
public void AjouteNourriture() { CoordonneesAbstrait position = new Coordonnees(Hazard.Next(1, DimensionX), Hazard.Next(1, DimensionY)); while (position.X.Equals(coordMaison.X) || position.Y.Equals(coordMaison.Y)) { position = new Coordonnees(Hazard.Next(1, DimensionX), Hazard.Next(1, DimensionY)); } ObjetList.Add(Fabrique.CreerNourriture("Nourriture N " + ObjetList.Count, position)); }
public void meteoChange() { int rand = Hazard.Next(1, 100); if (rand > 0 && rand < Config.probaPluie) { meteo.Etat = "pluie"; meteo.Notify(); } else if (rand > Config.probaPluie && rand < (Config.probaPluie + Config.probaBrouillard)) { meteo.Etat = "brouillard"; meteo.Notify(); } else { meteo.Etat = "soleil"; meteo.Notify(); } }
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> 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 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 TourSuivant() { if (!ReineMorte()) { if (reine.sousAttaque == false) { if (Etat != "normal") { Etat = "normal"; Notify(); } } if (reine.sousAttaque == true) { Etat = "attaque"; Notify(); reine.sousAttaque = false; } if (TourActuel % 10 == 0) { meteoChange(); } reine = (Reine)PersonnagesList.Where(x => x.GetType().Equals(typeof(Reine))).FirstOrDefault(); if (reine.OeufPondu != null) { List <ObjetAbstrait> morceaux = ObjetList.Where(x => x.GetType().Equals(typeof(MorceauNourriture)) && x.Position.toString().Equals(reine.Position.toString())).ToList(); if (morceaux.Count > 0) { ObjetList.Remove(morceaux[0]); ObjetList.Add(reine.OeufPondu); } } reine.OeufPondu = null; foreach (Oeuf unOeuf in ObjetList.Where(x => x.GetType().Equals(typeof(Oeuf))).ToList()) { if (unOeuf.Age > Oeuf.DureeAvantEclosion - 1) { PersonnageAbstrait fourmi = unOeuf.fourmiARetourner; fourmi.Nom += PersonnagesList.Count; AjouterFourmi(fourmi); ObjetList.Remove(unOeuf); } } foreach (Pheromone unePheromone in ObjetList.Where(x => x.GetType().Equals(typeof(Pheromone))).ToList()) { if (unePheromone.Dureevie < 1) { ObjetList.Remove(unePheromone); } } foreach (Nourriture nourriture in ObjetList.Where(x => x.GetType().Equals(typeof(Nourriture))).ToList()) { if (nourriture.ListMorceaux.Count < 1 || nourriture.Dureevie < 1) { ObjetList.Remove(nourriture); } } foreach (ObjetAbstrait unObjet in ObjetList) { unObjet.TourPasse(meteo); } Repositioner(); FournirAcces(); foreach (PersonnageAbstrait unInsecte in PersonnagesList.ToList()) { unInsecte.Avance1Tour(DimensionX, DimensionY, TourActuel); if (unInsecte.GetType().Equals(typeof(Ouvriere)) && unInsecte.TransporteNourriture == true) { if (unInsecte.Position.toString().Equals(coordMaison.toString())) { Ouvriere ouvriere = (Ouvriere)unInsecte; MorceauNourriture morceau = ouvriere.DeposeMorceau(); ObjetList.Add(morceau); } Coordonnees coordonnees = new Coordonnees(unInsecte.Position.X, unInsecte.Position.Y); Pheromone unPheromone = new Pheromone("pheromone", coordonnees); ObjetList.Add(unPheromone); } } List <PersonnageAbstrait> persosMorts = PersonnagesList.Where(x => x.PV < 1).ToList(); foreach (PersonnageAbstrait persomort in persosMorts) { Mourrir(persomort); } if (Hazard.Next(1, 7) == 1) { AjouteNourriture(); } if (TourActuel % 50 == 0) { for (int i = 0; i < Config.nbrTermites; i++) { AjouterTermite(); } } TourActuel++; } }