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); }
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)); }
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)); }
// 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(); }
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(); } }
//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()); }
private double effectiveness(int typeMove, PocketMonster defender) { return(typeChart.effectivity(typeMove, defender)); }
public WildPokemonAI(PocketMonster pokemon) { this.pokemon = pokemon; }