/// <summary> /// Déplace les animaux dans le tableau 2d (Refresh sera call plus tard). /// </summary> private void DeplacerAnimaux() { foreach (Entite e in ListeEntites.OfType <Animal>()) { (e as Animal).Deplacer(); } }
/// <summary> /// Affiche un message contenant les informations de l'entité cliquée, si la case contient une entité. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void CliqueDroit(object sender, MouseEventArgs e) { FrmInfos infos = new FrmInfos(); TuileZoo tuile = Terrain[e.X / 32, e.Y / 32]; foreach (Entite entite in ListeEntites.Where(entite => entite.Position == tuile)) { if (entite is Animal) { Animal a = entite as Animal; MontrerInformations(infos, a.Type.ToString(), a.Image, a.Sexe.ToString(), a.Age.ToString(), a.Enceinte ? "Enceinte" : "Pas enceinte", a.DerniereFoisNourri.AddMinutes(a.MinutesPourNourrir) > DateTime.Now ? "A mangé récemment" : "A faim depuis " + a.DerniereFoisNourri.ToShortTimeString()); } else if (entite is Visiteur) { Visiteur v = entite as Visiteur; MontrerInformations(infos, v.Nom, v.Image, v.SexeVisiteur.ToString(), (DateTime.Now - v.QuandEntreZoo).ToString()); } else if (entite is Concierge) { Concierge c = entite as Concierge; MontrerInformations(infos, c.GetType().ToString(), c.Image); } break; } }
/// <summary> /// Déplace les concierges dans le tableau 2d (Refresh sera call plus tard). /// </summary> private void DeplacerConcierges() { foreach (Entite e in ListeEntites.OfType <Concierge>()) { (e as Concierge).DeplacerEtModifierImage(); } }
/// <summary> /// Le clique gauche sur une tuile adjacente au Héros enlève les déchets /// </summary> /// <param name="tuile">La tuile cliquée</param> private void HerosRamasseDechet(TuileZoo tuile) { Dechet dechetEntite = null; foreach (Entite entite in ListeEntites.OfType <Dechet>().Where(e => e.Position == tuile)) { dechetEntite = entite as Dechet; } ListeEntites.Remove(dechetEntite); }
/// <summary> /// Nourrit un animal et il émet le son approprié. Si le temps pour nourrir l'animal est écoulé, ça coûtera 2$ au lieu de 1$. /// </summary> /// <param name="tuile"></param> private void NourrirAnimal(TuileZoo tuile) { if (Heros.AAssezDArgent(1)) { foreach (Entite e in ListeEntites.OfType <Animal>().Where(e => e.Position == tuile)) { Animal a = e as Animal; Heros.Argent -= a.DerniereFoisNourri.AddMinutes(a.MinutesPourNourrir) > DateTime.Now ? 1 : 2; a.DerniereFoisNourri = DateTime.Now; a.EmettreSon(); } } }
/// <summary> /// Kick les visiteurs hors du Zoo si ça fait plus d'une minute qu'ils sont entrés et qu'ils sont sur la case de sortie. /// </summary> private void KickVisiteur() { Visiteur visiteurAEnlever = null; foreach (Entite e in ListeEntites.OfType <Visiteur>() .Where(v => v.QuandEntreZoo.AddMinutes(1) <= DateTime.Now && v.Position == Terrain[26, 4])) { visiteurAEnlever = e as Visiteur; break; } ListeEntites.Remove(visiteurAEnlever); }
/// <summary> /// Déplace les visiteurs dans le tableau 2d (Refresh sera call plus tard). /// </summary> /// <returns>Une liste de TuileZoo comprenant la position des nouveaux déchets</returns> private List <TuileZoo> DeplacerVisiteursEtCreerDechets() { List <TuileZoo> emplacementsDechet = new List <TuileZoo>(); foreach (Entite e in ListeEntites.OfType <Visiteur>()) { if (_r.Next(0, DECHET_SPAWN_RATE) == 0 && !e.Position.ContientDechet()) { emplacementsDechet.Add(e.Position); } (e as Visiteur).DeplacerEtModifierImage(); } return(emplacementsDechet); }
/// <summary> /// Enlève les déchets de la ListeEntite qui ont la même position qu'un concierge /// </summary> private void RamasserDechets() { List <Dechet> dechetsAEnlever = new List <Dechet>(); foreach (Entite e in ListeEntites.OfType <Concierge>()) { foreach (Entite f in ListeEntites.OfType <Dechet>().Where(f => f.Position == e.Position)) { dechetsAEnlever.Add(f as Dechet); } } foreach (Dechet d in dechetsAEnlever) { ListeEntites.Remove(d); } }
internal static void ViellirEnfants() { foreach (Entite e in ListeEntites.OfType <Animal>().Where(a => a.Age == Animal.AgeAnimal.Bebe)) { Animal a = e as Animal; switch (a.JoursJusquaAdulte) { case 0: a.Age = Animal.AgeAnimal.Adulte; break; default: a.JoursJusquaAdulte--; break; } } }
/// <summary> /// Pour chaque animal enceinte, réduit le nombre de jours requis pour donner naissance de 1 ou si égal à 0, donne naissance. /// </summary> internal static void GestationnerAnimaux() { List <Animal> animauxDonnentNaissance = new List <Animal>(); foreach (Entite e in ListeEntites.OfType <Animal>().Where(a => a.Enceinte)) { Animal a = e as Animal; switch (a.JoursAvantNaissance) { case 0: animauxDonnentNaissance.Add(a); break; default: a.JoursAvantNaissance--; break; } } foreach (Animal a in animauxDonnentNaissance) { a.DonnerNaissance(); } }
/// <returns>True s'il y a plus d'animaux que de visiteurs, false sinon.</returns> private bool MoinsDeVisiteursQueDAnimaux() { return(ListeEntites.OfType <Animal>().Count() > ListeEntites.OfType <Visiteur>().Count()); }