Exemple #1
0
        private bool KeepBattleGoingWhileBothPlayersHavePokemonLeft()
        {
            bool playerWon = false, keepBattleGoing, isChangingToNextAvailablePokemon;

            while (Player.HasAvailablePokemon() && EnemyTrainer.HasAvailablePokemon())
            {
                keepBattleGoing = false;
                isChangingToNextAvailablePokemon = false;

                if (Player.GetCurrentPokemon().HasFainted() && EnemyTrainer.HasAvailablePokemon())
                {
                    PromptPlayerToSelectPokemonAfterOwnPokemonFainted();
                    PlayerAction.PlayerSendsPokemon(Player.GetCurrentPokemon());
                    isChangingToNextAvailablePokemon = true;
                }
                else
                {
                    ConsoleBattleInfoPokemon.ShowBothPokemonStats(Player.GetCurrentPokemon(), EnemyTrainer.GetCurrentPokemon());
                    keepBattleGoing = PlayerMove();
                }

                if (keepBattleGoing && !isChangingToNextAvailablePokemon)
                {
                    if (EnemyTrainer.GetCurrentPokemon().HasFainted() && Player.HasAvailablePokemon())
                    {
                        if (BattleAux.CannotSendNextAvailablePokemon(isEnemyTrainer: true))
                        {
                            break;
                        }
                        else
                        {
                            PromptPlayerToSelectPokemonAfterEnemyPokemonFainted();
                            BattleAux.ShowTrainerSentPokemonMessage(isEnemyTrainer: true);
                            PlayerAction.PlayerSendsPokemon(Player.GetCurrentPokemon());
                        }
                    }
                    else
                    {
                        EnemyMove();
                    }
                }
            }

            if (Player.HasAvailablePokemon())
            {
                playerWon = true;
            }

            return(playerWon);
        }
Exemple #2
0
        private static void ProcessAttack(IPokemon attackingPokemon, IPokemon targetPokemon, IMove move)
        {
            TypeEffect moveEffectOnPokemon = TypeComparer.GetMoveEffectivenessBasedOnPokemonType(move.Type, targetPokemon.Types.FirstOrDefault());

            int calculatedDamage = TypeDamageCalculator.CalculateDamage(attackingPokemon, targetPokemon, move, moveEffectOnPokemon);

            attackingPokemon.UseMove(move);

            if (move.StatusMoves != null)
            {
                BattleAux.ProcessStatusAttack(attackingPokemon, targetPokemon, move);
            }
            else
            {
                targetPokemon.ReceiveDamage(calculatedDamage);
                ConsoleBattleInfoPokemon.ShowPokemonReceivedDamage(targetPokemon, calculatedDamage);
                ConsoleBattleInfoTypes.ShowHowEffectiveTheMoveWas(moveEffectOnPokemon);
            }
        }
Exemple #3
0
        private void PokemonAttack(IPokemon attackingPokemon, IPokemon targetPokemon, int chosenMove)
        {
            IMove move = attackingPokemon.Moves[chosenMove];

            if (ConsoleBattleInfoMove.MoveDoesNotHavePowerPointsLeft(move))
            {
                PromptTrainerForPokemonMove();
                return;
            }

            ConsoleBattleInfoPokemon.ShowPokemonUsedMove(attackingPokemon, move.GetType().Name);

            if (TypeComparer.PokemonTypeDoesNotMakeContactWithMove(targetPokemon.Types, move))
            {
                ConsoleUtils.ShowMessageAndWaitOneSecond($"It didn't affect {targetPokemon.GetType().Name}!");
            }
            else
            {
                ProcessAttack(attackingPokemon, targetPokemon, move);
            }

            ConsoleUtils.ClearScreen();
        }
Exemple #4
0
        private void SwitchCurrentPokemon(int chosenPokemon, bool isChangingAfterOwnPokemonFainted = false)
        {
            TrainerPokemon pokemon = Player.PokemonTeam[chosenPokemon];

            if (pokemon is null || (pokemon.Current && isChangingAfterOwnPokemonFainted))
            {
                return;
            }

            if (pokemon.Fainted)
            {
                ConsoleBattleInfoPokemon.ShowChosenPokemonIsNotAvailable();
                PlayerMove();
                return;
            }
            else if (pokemon.Current)
            {
                ConsoleBattleInfoPokemon.ShowChosenPokemonIsAlreadyInBattle();
                PlayerMove();
                return;
            }

            BattleAux.ShowDrawbackMessageAndSetChosenPokemonIndexAsCurrent(chosenPokemon);
        }