public int getChoice(PocketMonster defender)
        {
            int    choice;
            double percent = defender.CurrentHP / defender.HP * 100;

            if (percent <= 10)
            {
                if (hasDamagingMove())
                {
                    if (hasPriorityMove())
                    {
                        choice = priorityMoveChoice();
                    }
                    else
                    {
                        choice = damageMoveChoice();
                    }
                }
                else
                {
                    choice = Utilities.RandomNumber(1, pokemon.Moveset.Count);
                }
            }
            else
            {
                choice = Utilities.RandomNumber(1, pokemon.Moveset.Count);
            }
            return(choice);
        }
Пример #2
0
        private double burn(PocketMonster attacker, string categoryMove)
        {
            double burn = 1;

            if (attacker.Status == (int)Enum.status.Burned)
            {
                if (categoryMove == "Physical")
                {
                    if (!(attacker.PkmnAbility.Name == "Guts"))
                    {
                        burn = 0.5;
                    }
                }
            }
            return(burn);
        }
        public int calculXPGain(bool wildPokemon, PocketMonster foe)
        {
            double a;

            if (wildPokemon)
            {
                a = 1;
            }
            else
            {
                a = 1.5;
            }

            double experience = a * Pokedex.getInfo(foe.PokedexID).BaseExperienceYield *foe.Level / 7;

            return((int)Math.Round(experience));
        }
Пример #4
0
        public int getDamage(PocketMonster attacker, PocketMonster defender, Move move, int weatherID)
        {
            double damage;

            //Physical Attack
            if (move.Category == "Physical")
            {
                double attackAttacker  = attacker.Attack * getStageMultiplicator(attacker.Stages[(int)Enum.stat.Attack]);
                double defenseDefender = defender.Defense * getStageMultiplicator(defender.Stages[(int)Enum.stat.Defense]);
                damage = ((((2 * attacker.Level / 5) + 2) * attackAttacker * move.Power / defenseDefender / 50) + 2) * modifier(weatherID, attacker, defender, move);
            }
            //Special Attack
            else
            {
                double specialAttackAttacker  = attacker.SpAttack * getStageMultiplicator(attacker.Stages[(int)Enum.stat.SpecialAttack]);
                double specialDefenseDefender = defender.SpDefense * getStageMultiplicator(defender.Stages[(int)Enum.stat.SpecialDefense]);
                damage = ((((2 * attacker.Level / 5) + 2) * specialAttackAttacker * move.Power / specialDefenseDefender / 50) + 2) * modifier(weatherID, attacker, defender, move);
            }
            return((int)Math.Round(damage, 0));
        }
Пример #5
0
        // Constructeur Player : selon les choix de l'utilisteur créer un Player avec diffents parametre
        public Player(string na, PocketMonster p, Objet i)
        {
            Name = na;
            Pet  = p;
            Item = i;

            Count_Inventaire = 0;
            Position         = 1;


            if (p == PocketMonster.Saicho)
            {
                PV    = 100;
                Level = 1;
            }
            else if (p == PocketMonster.Glouglou)
            {
                PV    = 150;
                Level = 1;
            }
        }
        public int shakes(PocketMonster pokemon, double pokeballBonus)
        {
            int nbShake = 0;

            double a = ((3 * pokemon.HP - 2 * pokemon.CurrentHP) * Pokedex.getInfo(pokemon.PokedexID).CatchRate *pokeballBonus) / (3 * pokemon.HP);

            if (pokemon.Status == (int)Enum.status.Sleep || pokemon.Status == (int)Enum.status.Frozen)
            {
                a *= 2;
            }
            else if (pokemon.Status != 0)
            {
                a *= 1.5;
            }

            double shakeProbability = 1048560 / Math.Sqrt(Math.Sqrt(16711680 / a));


            bool stillGoing = true;

            while (stillGoing)
            {
                int check = Utilities.RandomNumber(0, 65536);
                if (check >= shakeProbability)
                {
                    stillGoing = false;
                }
                else
                {
                    nbShake++;
                }
                if (nbShake == 4)
                {
                    stillGoing = false;
                }
            }

            //If the nb < 3, then the pokemon has been catched !
            return(nbShake);
        }
        public static void InvokeAdapter()
        {
            ConnectDatabase instance = ConnectDatabase.getInstance();
            PocketMonster   newOne   = new PocketMonster("New One", "Fuego", "Vento", 7.8);

            Console.WriteLine("Name: " + newOne.nome + " HP: " + newOne.hp);

            AdapterMega megaForm = new AdapterMega(true);

            newOne.transform(megaForm);
            Console.WriteLine("Name: " + newOne.nome + " HP: " + newOne.hp + "Mega Form");
            newOne.baseform(megaForm);

            AdapterReve reveForm = new AdapterReve();

            newOne.transform(reveForm);
            Console.WriteLine("Name: " + newOne.nome + " HP: " + newOne.hp + "Revest Form");
            newOne.baseform(reveForm);

            Console.WriteLine("Name: " + newOne.nome + " HP: " + newOne.hp);

            Console.ReadLine();
        }
Пример #8
0
        public void startWildBattle(Protagonist player, PocketMonster pocketMonster, int background)
        {
            DamageCalculator damageCalculator = new DamageCalculator();

            PkmnBattleInfo playerPokemon = new PkmnBattleInfo(getPlayerPokemon(player));
            PkmnBattleInfo wildPokemon   = new PkmnBattleInfo(pocketMonster);

            Field playerField = new Field(playerPokemon);
            Field wildField   = new Field(wildPokemon);

            BattleField battleField = new BattleField(playerField, wildField);

            WildPokemonAI ai           = new WildPokemonAI(wildPokemon.Pokemon);
            bool          battleIsOver = false;

            //Battle Music
            Thread music = new Thread(() => Utilities.startMusic(0, 1));

            music.Start();

            //TODO Battle Animation
            //LOOP until the wild pokemon is defeated or the player doesn't have any healty pokemon left
            while (!(battleIsOver))
            {
                //Graphic
                Utilities.changeForegroundColor(255, 255, 255);
                Console.WriteLine("Weather : " + battleField.Weather);
                Console.WriteLine("------------------------------");
                Utilities.changeForegroundColor(255, 0, 0);
                Console.WriteLine(wildPokemon.Pokemon.Nickname);
                Console.WriteLine("Lv. " + wildPokemon.Pokemon.Level);
                Utilities.changeForegroundColor(0, 255, 0);
                Console.WriteLine(wildPokemon.Pokemon.CurrentHP + "/" + wildPokemon.Pokemon.HP);
                Utilities.changeForegroundColor(255, 255, 255);
                Console.WriteLine("------------------------------");
                Utilities.changeForegroundColor(0, 255, 255);
                Console.WriteLine(playerPokemon.Pokemon.Nickname);
                Console.WriteLine("Lv. " + playerPokemon.Pokemon.Level);
                Utilities.changeForegroundColor(0, 255, 0);
                Console.WriteLine(playerPokemon.Pokemon.CurrentHP + "/" + playerPokemon.Pokemon.HP);
                Utilities.changeForegroundColor(255, 255, 255);
                Console.WriteLine("------------------------------");
                Utilities.changeForegroundColor(255, 255, 0);
                Console.WriteLine("Select your move");
                for (int i = 0; i < playerPokemon.Pokemon.Moveset.Count; i++)
                {
                    Console.WriteLine(i + "- " + playerPokemon.Pokemon.Moveset[i].Name);
                }
                //Make player choose his move
                int playerChoice = Convert.ToInt32(Console.ReadLine());
                //Make the AI choose his move


                //Effect : Protagonist player, Field attacker, Field defender, int WeatherID, int foeMove, int damage, int foeDamage
                int aiChoice = ai.getChoice(playerPokemon.Pokemon);
                //The player attack first !
                if (playerAttackFirst(playerPokemon, wildPokemon, playerPokemon.Pokemon.Moveset[playerChoice], wildPokemon.Pokemon.Moveset[aiChoice]))
                {
                    int damage = damageCalculator.getDamage(playerPokemon.Pokemon, wildPokemon.Pokemon, playerPokemon.Pokemon.Moveset[playerChoice], battleField.Weather);
                    if (playerPokemon.Pokemon.Moveset[playerChoice].Power == 0)
                    {
                        playerPokemon.Pokemon.Moveset[playerChoice].Effect.DynamicInvoke(player, playerField, wildField, battleField.Weather, aiChoice, 0, 0);
                    }
                    else
                    {
                        wildPokemon.Pokemon.CurrentHP -= damage;
                        playerPokemon.Pokemon.Moveset[playerChoice].Effect.DynamicInvoke(player, playerField, wildField, battleField.Weather, aiChoice, damage, 0);
                    }
                    if (wildPokemon.Pokemon.CurrentHP <= 0)
                    {
                        Console.WriteLine("The Wild Pokemon is dead !");
                        break;
                    }
                    int foeDamage = damageCalculator.getDamage(wildPokemon.Pokemon, playerPokemon.Pokemon, wildPokemon.Pokemon.Moveset[aiChoice], battleField.Weather);
                    if (wildPokemon.Pokemon.Moveset[aiChoice].Power == 0)
                    {
                        wildPokemon.Pokemon.Moveset[aiChoice].Effect.DynamicInvoke(player, wildField, playerField, battleField.Weather, playerChoice, 0, damage);
                    }
                    else
                    {
                        playerPokemon.Pokemon.CurrentHP -= damage;
                        wildPokemon.Pokemon.Moveset[playerChoice].Effect.DynamicInvoke(player, playerField, wildField, battleField.Weather, playerChoice, foeDamage, damage);
                    }
                    if (playerPokemon.Pokemon.CurrentHP <= 0)
                    {
                        Console.WriteLine("Your Pokemon is dead !");
                        break;
                    }
                }
                //The wild Pokemon attack first !
                else
                {
                    int damage = damageCalculator.getDamage(wildPokemon.Pokemon, playerPokemon.Pokemon, wildPokemon.Pokemon.Moveset[aiChoice], battleField.Weather);
                    if (wildPokemon.Pokemon.Moveset[aiChoice].Power == 0)
                    {
                        wildPokemon.Pokemon.Moveset[aiChoice].Effect.DynamicInvoke(player, wildField, playerField, battleField.Weather, playerChoice, 0, 0);
                    }
                    else
                    {
                        playerPokemon.Pokemon.CurrentHP -= damage;
                        wildPokemon.Pokemon.Moveset[playerChoice].Effect.DynamicInvoke(player, playerField, wildField, battleField.Weather, playerChoice, damage, 0);
                    }
                    if (playerPokemon.Pokemon.CurrentHP <= 0)
                    {
                        Console.WriteLine("Your Pokemon is dead !");
                        break;
                    }
                    //Player turn
                    int playerDamage = damageCalculator.getDamage(playerPokemon.Pokemon, wildPokemon.Pokemon, playerPokemon.Pokemon.Moveset[playerChoice], battleField.Weather);
                    if (playerPokemon.Pokemon.Moveset[playerChoice].Power == 0)
                    {
                        playerPokemon.Pokemon.Moveset[playerChoice].Effect.DynamicInvoke(player, playerField, wildField, battleField.Weather, aiChoice, 0, damage);
                    }
                    else
                    {
                        wildPokemon.Pokemon.CurrentHP -= damage;
                        playerPokemon.Pokemon.Moveset[playerChoice].Effect.DynamicInvoke(player, playerField, wildField, battleField.Weather, aiChoice, playerDamage, damage);
                    }
                    if (wildPokemon.Pokemon.CurrentHP <= 0)
                    {
                        Console.WriteLine("The Wild Pokemon is dead !");
                        break;
                    }
                }
                Console.Clear();
            }
        }
Пример #9
0
 //Modifier
 private double modifier(int weatherID, PocketMonster attacker, PocketMonster defender, Move move)
 {
     return(weather(weatherID, move.Type) * criticalHit(attacker.Stages[(int)Enum.stat.Critical]) * randomDamage() * stab(attacker.Types, move.Type) * effectiveness(move.Type, defender) * burn(attacker, move.Category) * other());
 }
Пример #10
0
 private double effectiveness(int typeMove, PocketMonster defender)
 {
     return(typeChart.effectivity(typeMove, defender));
 }
 public WildPokemonAI(PocketMonster pokemon)
 {
     this.pokemon = pokemon;
 }