/// <summary> /// Fonction de transition qui fait le tour du joueur et renvoie à l'état IN_BATTLE pour compléter le tour. /// </summary> void GérerTransitionTOUR_USER() { GamePad.SetVibration(PlayerIndex.One, 1, 0); NomOpponentPokemon.Visible = true; VieOpponentPokemon.Visible = true; if (UserPokemon.EstEnVie) { EffectuerTourUser(MainMenu.NuméroChoisi); VieOpponentPokemon.RemplacerMessage(OpponentPokemon.VieToString()); TourUserComplété = true; if (CombatState != CombatState.END) { CombatState = CombatState.IN_BATTLE; } } else { if (MainMenu.PokémonChangé) { TourOpponentComplété = false; TourUserComplété = false; ChangerUserPokémon(MainMenu.NuméroChoisi); MainMenu.BattleMenuState = BattleMenuState.MAIN; CombatState = CombatState.BATTLE_MENU; } } }
/// <summary> /// Fonction qui change le Pokémon de l'adversaire s'il lui en reste qui sont vivants. /// </summary> void ChangerOpponentPokemon() { TourOpponentComplété = false; TourUserComplété = false; AfficheurTexte messageA = new AfficheurTexte(Game, PositionBox, Jeu.LargeurBoxMessage, Jeu.HauteurBoxMessage, OpponentTrainer.Nom + "'s " + OpponentPokemon.Nom + " fainted!", IntervalMAJ); Game.Components.Add(messageA); OpponentPokemon = OpponentTrainer.NextPokemonEnVie(); NomOpponentPokemon.RemplacerMessage(OpponentPokemon.ToString()); VieOpponentPokemon.RemplacerMessage(OpponentPokemon.VieToString()); string messageTour = OpponentTrainer.Nom + " send out " + OpponentPokemon.Nom + "!"; AfficheurTexte messageB = new AfficheurTexte(Game, PositionBox, Jeu.LargeurBoxMessage, Jeu.HauteurBoxMessage, messageTour, IntervalMAJ); Game.Components.Add(messageB); }
/// <summary> /// Fonction qui ajoute les textes de vie et de nom des pokémons en combat. /// </summary> private void AjouterLesTextesFixes() { PositionInfoUserPokemon = new Vector2(Game.Window.ClientBounds.Width - (UserPokemon.ToString().Count() + 3) * Cadre.TAILLE_TILE, Game.Window.ClientBounds.Height - Cadre.TAILLE_TILE * 9); PositionInfoOpponentPokemon = new Vector2(Cadre.TAILLE_TILE, Game.Window.ClientBounds.Height / 10); NomOpponentPokemon = new TexteFixe(Game, PositionInfoOpponentPokemon, OpponentPokemon.ToString()); Game.Components.Add(NomOpponentPokemon); NomUserPokemon = new TexteFixe(Game, PositionInfoUserPokemon, UserPokemon.ToString()); Game.Components.Add(NomUserPokemon); VieOpponentPokemon = new TexteFixe(Game, new Vector2(PositionInfoOpponentPokemon.X, PositionInfoOpponentPokemon.Y + Cadre.TAILLE_TILE), OpponentPokemon.VieToString()); Game.Components.Add(VieOpponentPokemon); VieUserPokemon = new TexteFixe(Game, new Vector2(PositionInfoUserPokemon.X, PositionInfoUserPokemon.Y + Cadre.TAILLE_TILE), UserPokemon.VieToString()); Game.Components.Add(VieUserPokemon); NomOpponentPokemon.Visible = false; NomUserPokemon.Visible = false; VieOpponentPokemon.Visible = false; VieUserPokemon.Visible = false; }
public override void Update(GameTime gameTime)//mise à jour des tours tant que en vie (both trainer et son pokémon) { bool UserPkmPrioritaire; while (UserTrainer.EstEnVie() && OpponentTrainer.EstEnVie()) { //UserPkmPrioritaire = true; while (UserPokemon.EstEnVie && OpponentPokemon.EstEnVie) { //Système de tours entre pkmns ici AfficherMenuAttaques(); //On va commencer par savoir comment choisir une attaque, après on fera un menu pour fight/bag/pokemons/run if (UserPokemon.Speed < OpponentPokemon.Speed) //le tour du joueur sauf si prouvé du contraire { UserPkmPrioritaire = false; } else { UserPkmPrioritaire = true; } //Important de garder dans la boucle, si la vitesse est changée par une attaque effect, et que l'adversaire ou le user devient plus rapide, il a droit de frapper deux fois if (UserPkmPrioritaire) //Si le pokémon User est plus rapide { OpponentPokemon.Défendre(CalculPointsDamage(UserPokemon, OpponentPokemon, numéroAttaqueChoisie)); //fonctions temporaires, à modifier pour calculer les points de dommages avec la formule UserPokemon.Défendre(CalculPointsDamage(OpponentPokemon, UserPokemon, OpponentPokemon.AttaqueAléatoire())); UserPkmPrioritaire = false; //fin de son tour } else //Si le pokémon adverse est le plus rapide { UserPokemon.Défendre(CalculPointsDamage(OpponentPokemon, UserPokemon, OpponentPokemon.AttaqueAléatoire())); // c'est le tour du pokémon adverse OpponentPokemon.Défendre(CalculPointsDamage(UserPokemon, OpponentPokemon, numéroAttaqueChoisie)); UserPkmPrioritaire = true; } } if (!OpponentPokemon.EstEnVie)//sorti de la boucle de combat: l'un des deux est mort { //Message/animation/whatever, opponent has been defeated! UserPokemon.GainExp(OpponentPokemon.Level * 10); OpponentPokemon = LancerPokémon(0, OpponentTrainer); //Throw next pokemon } else { //trainer pokemon fainted! Tu dois choisir un autre pokémon dans ton inventaire //Ouvrir inventaire, sélectionner un index int prochainPokemon = SélectionnerUnPokémonEnInventaire(); UserPokemon = LancerPokémon(prochainPokemon, UserTrainer); } } //Trainer has been defeated! ou Opponent has been defeated! if (UserTrainer.EstEnVie()) {//le User a gagné //Changement de la toune? //Gagne du cash, ptit message genre "wow le ptit con m'a battu holyshit man" } else {//Le User a perdu //Donne du cash, ptit message genre "wow t'es ben faible ptit con" //User wrap au pokémon center (une méthode de téléportation dans le trainer pour le déplacer perhaps?) } //Le combat est fini EnCombat = false; //Ou on pourrait changer le gamestate? base.Update(gameTime); //Utile? }
/// <summary> /// Fonction pour attribuer les points d'expérience au Pokémon du joueur. /// </summary> private void DonnerExp() { float exp = OpponentPokemon.GiveExp(); UserPokemon.GainExp(exp); }