//FONCTIONS public Pokemon SwitchPokemon(Pokemon poke, Dresseur dress) { Console.WriteLine("Voulez-vous changer de pokémon ?\n0- OUI\n1-NON"); int a = int.Parse(Console.ReadLine()); while ((a != 0) && (a != 1)) { Console.WriteLine("Veuillez choisir un chiffre entre 0 (OUI, je vaux changer de Pokémon) et 1 (NON, je ne veux pas)."); } if (a == 0) //il veut changer { //Du moment où il veut changer, son pokemon perd ses victoires consecutives poke.VictoiresConsecutives = 0; return(dress.ChoixPokemonActif()); } return(poke); }
/// <summary> /// Lance le combat /// </summary> /// <param name="d1"></param> /// <param name="d2"></param> /// <returns></returns> public Dresseur LancerCombat(Dresseur d1, Dresseur d2) //d2 est potentiellement un joueur { bool FH = false; if ((d1 is Joueur) || (d2 is Joueur)) { FH = true; } if (FH) { PresentationParticipants(d1, d2); } //On définit le gagnant par défaut Dresseur vainqueurCombat = d1; //Autres variables bool premiereBoucle = true; //pour indiquer qu'il ne faut pas demander de changement de pokemon bool changementRecent = false; //On choisi les pokémons une première fois Pokemon pok1 = d1.ChoixPokemonActif(); Pokemon pok2 = d2.ChoixPokemonActif(); while ((d1.DresseurKO() == false) && (d2.DresseurKO() == false)) //tant que les deux ont au moins un pokemon en vie { //Attaque 1 if (pok1.PVProvisoire == 0) //Si le pokemon en court est mort { pok1 = d1.ChoixPokemonActif(); //et le pokémon mort est remplacé changementRecent = true; } else { if ((d1 is Joueur) && (premiereBoucle == false) && (changementRecent == false)) { pok1 = SwitchPokemon(pok1, d1); //si le pokemon n'est pas mort, il peu changer (sauf si c'est le tout début du combat, où qu'il vient de le changer) } } changementRecent = false; pok1.Attaque(pok2); //d1 est forcément non-KO, car on vient de rentrer dans le while //AFFICHAGE if (FH) { Program.ColorerTexte(ConsoleColor.White, "\nNOUVEAU ROUND "); Console.WriteLine(pok1.Nom + " attaque " + pok2.Nom + " !\n"); pok1.ToStringCombat(); pok2.ToStringCombat(); } if (pok2.PVProvisoire == 0) //si le pokemon attaqué est mort... { pok1.VictoiresConsecutives++; //...on attribue la victoire à l'autre if (pok1.VictoiresConsecutives == 2) { pok1.EvolutionPokemon(FH); } } else //si il est pas ko { pok1.VictoiresConsecutives = 0; //on annule les victoires consécutives de ce pokémon } //Attaque 2 if (pok2.PVProvisoire == 0) //si le pokemon attaqué est mort... { pok2 = d2.ChoixPokemonActif(); //... on le change (peut renvoyer null si d2 n'a plus de pokemon actifs) changementRecent = true; } if (pok2 != null) //Si cette condition ne s'applique pas, cela signifie que d2 est KO, donc on va sortir du while; { if ((d2 is Joueur) && (changementRecent == false)) { pok2 = SwitchPokemon(pok2, d2); } changementRecent = false; pok2.Attaque(pok1); //AFFICHAGE if (FH) { Program.ColorerTexte(ConsoleColor.White, "\nCONTRE-ATTAQUE"); Console.WriteLine(pok2.Nom + " attaque " + pok1.Nom + " !\n"); pok1.ToStringCombat(); pok2.ToStringCombat(); } if (pok1.PVProvisoire == 0) //si le pokemon attaqué est mort... { pok2.VictoiresConsecutives++; //...on attribue la victoire à l'autre if (pok2.VictoiresConsecutives == 2) { pok2.EvolutionPokemon(FH); } } else //si il est pas ko { pok2.VictoiresConsecutives = 0; //on annule les victoires consécutives de ce pokémon } } if (premiereBoucle == true) { premiereBoucle = false; } } //Déclaration du gagnant et élimination de l'autre (NbrJoueurs--) if (d1.DresseurKO() == true) { vainqueurCombat = d2; } NbrJoueurs--; return(vainqueurCombat); }