/// <summary> /// Methode de combat entre rats et pigeons un des deux doit sortir vivant et l'autre est mort, il est supprimer de la liste via l'appelle de la methode MortNuisible /// Elle ne fait rien si les deux objet sont de la meme origine /// </summary> /// <param name="firstChallenger">Premier objet nuisible</param> /// <param name="secondChallenger">Second objet nuisible</param> /// <param name="random"> variable random permettant de definir quiva vivre et qui va mourrir</param> /// <param name="vivant"> La liste des vivant qui sera modifier en conseqence dans cette methode</param> private static void Combat(Nuisible firstChallenger, Nuisible secondChallenger, int random, List <Nuisible> vivant) { Console.WriteLine("-------- Regular Fight --------"); string firstOrigin = firstChallenger.GetChildClass(); string secondOrigin = secondChallenger.GetChildClass(); if (firstOrigin == "rat" && random == 0 && secondOrigin == "pigeon" || firstOrigin == "pigeon" && random == 1 && secondOrigin == "rat") { Console.WriteLine("Le nuisible ID : " + secondChallenger.ID + " " + secondOrigin + " a tuer le nuisible ID : " + firstChallenger.ID + " " + firstOrigin); Nuisible.MortNuisible(firstChallenger, vivant); firstChallenger.Etat = "MORT"; } else { if (firstOrigin == "rat" && random == 1 && secondOrigin == "pigeon" || firstOrigin == "pigeon" && random == 0 && secondOrigin == "rat") { Console.WriteLine("Le nuisible ID : " + firstChallenger.ID + " " + firstOrigin + " a tuer le nuisible ID : " + secondChallenger.ID + " " + secondOrigin); Nuisible.MortNuisible(secondChallenger, vivant); secondChallenger.Etat = "MORT"; } else { Console.WriteLine("impossible de faire combattre un " + firstOrigin + " et un " + secondOrigin); } } Console.WriteLine("\n"); }
/// <summary> /// Methode factory pour la creation des nuisibles suivant les parametre /// </summary> /// <param name="nbRat">Nombre de rat a cree dans l'ecosysteme</param> /// <param name="nbPigeon">Nombre de pigeon a cree dans l'ecosysteme</param> /// <param name="nbZombie">Nombre de zombie a cree dans l'ecosysteme</param> /// <param name="mesNuisibles">Listes des nuisibles qui vont evoluer dans l'ecosysteme</param> protected static void FactoryCreator(int nbRat, int nbPigeon, int nbZombie, List <Nuisible> mesNuisibles) { int nbTotalNuisible = nbRat + nbPigeon + nbZombie; // Tableau de creation NuisibleFactory[] creators = new NuisibleFactory[nbTotalNuisible]; int globalCount = 0; for (int y = 0; y < nbRat; y++) { creators[globalCount] = new RatFactory(); globalCount++; } for (int y = 0; y < nbPigeon; y++) { creators[globalCount] = new PigeonFactory(); globalCount++; } for (int y = 0; y < nbZombie; y++) { creators[globalCount] = new ZombieFactory(); globalCount++; } // Ajout de chaque nuisible cree dans la liste : nuisible foreach (NuisibleFactory creator in creators) { Nuisible leNouveau = creator.Create(); mesNuisibles.Add(leNouveau); } }
// Methode de zombification private static void Zombification(Nuisible newZombie) { if (newZombie.Etat != "MORT-VIVANT") { Console.WriteLine("-------- Zombification --------"); Console.WriteLine("Le nuisible ID : " + newZombie.ID + " est devenu un zombie"); newZombie.Etat = "MORT-VIVANT"; } // newZombie.VitesseDeplacement = 5; }
/// Methodes Static Public : /// <summary> /// Methode de test de collision entre les nuisibles de la liste. /// Envoie a la methode collisionsplit les deux nuisibles etant sur la meme case ainsi que la liste des nuisible et un random /// /// La methode parcours le tableau en recuperant les positions de chaque nuisibles et les comparent entre elles. /// </summary> /// <param name="nuisibles">Liste des nuisibles evoluant dans l'ecosysteme</param> public static void TestCollision(List <Nuisible> nuisibles) { Random aleatoire = new Random(); foreach (Nuisible nuisible in nuisibles.ToList()) { IEnumerable <Nuisible> memePos = nuisibles.Where((x) => x != nuisible && x.PositionX == nuisible.PositionX && x.PositionY == nuisible.PositionY); var memePasArray = memePos.ToArray(); //Console.WriteLine("L'objet numero : " + nuisible.ID + " est en collision avec : " + test1.Length + " Objet(s) "); for (int y = 0; y < memePasArray.Length; y++) { if (memePasArray[y].ID > nuisible.ID) { Console.WriteLine("Le nuisible ID : " + nuisible.ID + " est en collision avec le nuisible ID : " + memePasArray[y].ID); int temprandom = aleatoire.Next(0, 2); Nuisible.CollisionSplit(memePasArray[y], nuisible, temprandom, nuisibles); } } } }
// Methode de test suite a une collision /// <summary> /// La methode split permet de comparer l'origine des objet et d'appeller la methode adapter en foction de cette origine. /// Elle s'ocupe de renvoyer vers la methode zombification si un des deux objets est un zombie et l'autre non /// Elle s'occupe de renvoyer vers la methode combat si ce sont des rats ou des pigeons /// </summary> /// <param name="firstChallenger">Premier objet nuisible</param> /// <param name="secondChallenger">Second objet nuisible</param> /// <param name="random"> Variable pour la future bataille</param> /// <param name="vivant"> list des nuisible vivant evoluant dans l'ecosysteme</param> private static void CollisionSplit(Nuisible firstChallenger, Nuisible secondChallenger, int random, List <Nuisible> vivant) { if (firstChallenger.Etat == "MORT-VIVANT" || secondChallenger.Etat == "MORT-VIVANT") { if (firstChallenger.Etat != "MORT-VIVANT" && secondChallenger.Etat == "MORT-VIVANT") { Nuisible.Zombification(firstChallenger); Console.WriteLine("Il c'est fait transformer par le nuisible ID : " + secondChallenger.ID); Console.WriteLine("\n"); } else { if (secondChallenger.Etat != "MORT-VIVANT" && firstChallenger.Etat == "MORT-VIVANT") { Nuisible.Zombification(secondChallenger); Console.WriteLine("Il c'est fait transforme par le nuisible ID : " + firstChallenger.ID); Console.WriteLine("\n"); } else { if (firstChallenger.Etat == "MORT-VIVANT" && secondChallenger.Etat == "MORT-VIVANT") { Console.WriteLine("Les nuisibles : " + firstChallenger.ID + " et " + secondChallenger.ID + " sont tout deux des Zombies"); } else { Console.WriteLine("L'etat de first challenger est : " + firstChallenger.Etat); Console.WriteLine("L'etat du second challenger est :" + secondChallenger.Etat); Console.WriteLine("Il y a clairement un bug dans la matrice !"); } } } } else { Nuisible.Combat(firstChallenger, secondChallenger, random, vivant); } }
static void Main(string[] args) { // Initialisation des variables de parametrages List <Nuisible> nuisibles = new List <Nuisible>(); int ecosytemeLimX = 100; int ecosytemeLimY = 100; int maxNuisible = 200; int nbTics = 1000; // Initialisation de la variable random Random aleatoire = new Random(); //Nuisible zombieLabo = new Zombie(); //PigeonMutantDecorator monMutant = new PigeonMutantDecorator(zombieLabo); //var testMutant = monMutant.Force; //var ttestZombeLabo = zombieLabo; //Console.WriteLine(testMutant); // Choix du Type d'ecosysteme et generation des nuisibles Console.WriteLine("Pour initialiser la simulation veuillez choisir un type d'ecosysteme : Aleatoire, UmbrellaCorp ou Citadin"); string chooseEcoType = Console.ReadLine(); while (chooseEcoType != "Aleatoire" && chooseEcoType != "UmbrellaCorp" && chooseEcoType != "Citadin") { Console.WriteLine("Desoler type d'ecosysteme : " + chooseEcoType + " n'existe pas :/ "); Console.WriteLine("Veuillez choisir le type d'ecosysteme parmi ceux proposer ci-dessus!"); Console.WriteLine(); chooseEcoType = Console.ReadLine(); Console.WriteLine("\n"); } // Initialisation de l'ecosysteme en fonction du choix Ecosysteme.InitEcoSysteme(chooseEcoType, maxNuisible, nuisibles, ecosytemeLimX, ecosytemeLimY); Console.WriteLine("\n"); Console.WriteLine("--------------------------------- "); Console.WriteLine("-- Debut de l'initialisation des positions -- "); Console.WriteLine("--------------------------------- "); Console.WriteLine("\n"); // initialisation des positions et des ID pour chaque nuisible present dans la liste int i = 0; foreach (Nuisible nuisible in nuisibles) { i = i + 1; int minPos = 0; int maxPosX = ecosytemeLimX + 1; int maxPosY = ecosytemeLimY + 1; int tempx = aleatoire.Next(minPos, maxPosX); int tempy = aleatoire.Next(minPos, maxPosY); nuisible.PositionX = tempx; nuisible.PositionY = tempy; nuisible.ID = i; string tempChildClass = nuisible.GetChildClass(); Console.WriteLine("--------------------------------- "); Console.WriteLine("La position initial du " + tempChildClass + " ayant pour ID : " + nuisible.ID + " est : " + nuisible.PositionX + "X" + nuisible.PositionY + "Y"); } Console.WriteLine("\n"); Console.WriteLine("--------------------------------- "); Console.WriteLine("-- Fin de l'initialisation des positions -- "); Console.WriteLine("--------------------------------- "); Console.WriteLine("\n"); Console.ReadLine(); Console.WriteLine("--------------------------------- "); Console.WriteLine("-- Debut de la simulation -- "); Console.WriteLine("--------------------------------- "); /// BOUCLE D'EVOLUTION DE L'ECOSYSTEME for (int z = 0; z < nbTics; z++) { Console.WriteLine("\n"); Console.WriteLine("--------------------------------- "); Console.WriteLine("-- Debut des deplacement des nuisibles pour ce tour -- "); Console.WriteLine("--------------------------------- "); Console.WriteLine("\n"); // Deplacement aleatoire des nuisibles Nuisible.Deplacement(ecosytemeLimX, ecosytemeLimY, nuisibles); Console.WriteLine("\n"); Console.WriteLine("--------------------------------- "); Console.WriteLine("-- Fin des deplacement des nuisibles pour ce tour -- "); Console.WriteLine("--------------------------------- "); Console.WriteLine("\n"); Console.WriteLine("\n"); Console.WriteLine("--------------------------------- "); Console.WriteLine("-- Debut des evenements -- "); Console.WriteLine("--------------------------------- "); Console.WriteLine("\n"); // Collisions entre les nuisibles application de la methode adapte a chaque situation Nuisible.TestCollision(nuisibles); Console.WriteLine("\n"); Console.WriteLine("--------------------------------- "); Console.WriteLine("-- Fin des evenements -- "); Console.WriteLine("--------------------------------- "); Console.WriteLine("\n"); Console.WriteLine("\n"); Console.WriteLine("--------------------------------- "); Console.WriteLine("-- Etat de l'ecosysteme a la fin de ce tour -- "); Console.WriteLine("--------------------------------- "); Console.WriteLine("\n"); // Lecture du tableau nuisble foreach (Nuisible nuisible in nuisibles) { string tempClass = nuisible.GetChildClass(); Console.WriteLine("--------------------------------- "); Console.WriteLine("Le Nuisible d'ID : " + nuisible.ID + " est un " + tempClass + " son etat actuel est : " + nuisible.Etat); //Console.WriteLine("La position final de " + nuisible.ID + " est : " + nuisible.PositionX + "X" + nuisible.PositionY + "Y ayant pour orientation " + orientation + " et se deplace a une vitesse de " + nuisible.VitesseDeplacement); } Console.WriteLine("\n"); int affichTour = z + 1; Console.WriteLine("Vous venez de terminer le tour numero : " + affichTour); //Console.ReadLine(); } Console.WriteLine("--------------------------------- "); Console.WriteLine("-- Fin de la simulation -- "); Console.WriteLine("--------------------------------- "); Console.ReadLine(); }
public Decorator(Nuisible monNuisible) { this.monNuisible = monNuisible; }
/// Methodes Static Private : // Methode de suppression d'instance et suppression dans la liste des vivants private static void MortNuisible(Nuisible obj, List <Nuisible> vivant) { vivant.Remove(obj); obj = null; }