//dodrio, hypno, joleon, victrebel, venusaur, sandslash, articuno, moltres, kingler
//plays pokemon
//12-13-12
#include <iostream>
#include <string>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <cmath>
using namespace std;
int player_pokemon=0;
int enemy_pokemon=0;
int your_choice;
int enemy_choice;
int your_switch=0;
int enemy_switch=0;
int damage;
int move_choices;
float reflect=1.00;
int reflect_ctr=-1;
float t_speed=1;
float t_def=1;
float t_spc=1;
float evasion=1.00;
int confusion=0;
int confusion_ctr;
int substitute=0;
int counter_power=0;
int mimic_choice=-1;
int recharge=0;
int enemy_recharge=0;
void enemy_r_switch();
void player_switch();
void enemy_death();
void player_death();
//MOVESET Constants
void initialize_deck();
void output_deck();
void output_moves();
void move_list();
void output_party();
void instructions();
void teambuilder();
void create_enemy_team();
void your_battlecode();
void enemy_battlecode();
class Moves
{
friend ostream&operator<<(ostream& os, const Moves& pmoves);
public:
Moves(string move, string move_type, int power, int acr, int pp, int cat);
string get_move() const;
string get_move_type() const;
int get_power() const;
int get_acr() const;
int get_pp() const;
int get_cat() const;
string m_move;
string m_move_type;
int m_power;
int m_acr;
int m_pp;
int m_cat;
private:
};
class Pokemon_card
{
friend ostream&operator<<(ostream& os, const Pokemon_card& pcard);
public:
Pokemon_card(string name, string type1, string type2, float max_hp, float hp, float atk, float def, float spc, float speed, float health);
string get_name() const;
string get_type1() const;
string get_type2() const;
int get_max_hp() const;
int get_hp() const;
int get_atk() const;
int get_def() const;
int get_spc() const;
int get_speed() const;
int get_health() const;
string m_name;
string m_type1;
string m_type2;
int m_max_hp;
int m_hp;
int m_atk;
int m_def;
int m_spc;
int m_speed;
int m_health;
vector<Moves> m_moves;
vector<Moves> m_party_moves;
private:
};
string Pokemon_card::get_name() const
{
return m_name;
}
string Pokemon_card::get_type1() const
{
return m_type1;
}
string Pokemon_card::get_type2() const
{
return m_type2;
}
int Pokemon_card::get_max_hp() const
{
return m_max_hp;
}
int Pokemon_card::get_hp() const
{
return m_hp;
}
int Pokemon_card::get_atk() const
{
return m_atk;
}
int Pokemon_card::get_def() const
{
return m_def;
}
int Pokemon_card::get_spc() const
{
return m_spc;
}
int Pokemon_card::get_speed() const
{
return m_speed;
}
int Pokemon_card::get_health() const
{
return m_health;
}
//
string Moves::get_move() const
{
return m_move;
}
string Moves::get_move_type() const
{
return m_move_type;
}
int Moves::get_power() const
{
return m_power;
}
int Moves::get_acr() const
{
return m_acr;
}
int Moves::get_pp() const
{
return m_pp;
}
int Moves::get_cat() const
{
return m_cat;
}
ostream&operator<<(ostream& os, const Pokemon_card& pcard);
Pokemon_card::Pokemon_card(string name, string type1, string type2, float max_hp, float hp, float atk, float def, float spc, float speed, float health):
m_name(name), m_type1(type1), m_type2(type2), m_max_hp(max_hp), m_hp(hp), m_atk(atk), m_def(def), m_spc(spc), m_speed(speed), m_health(health)
{}
ostream&operator<<(ostream& os, const Moves& pmove);
Moves::Moves(string move, string move_type, int power, int acr, int pp, int cat):
m_move(move), m_move_type(move_type), m_power(power), m_acr(acr), m_pp(pp), m_cat(cat)
{}
vector<Pokemon_card> deck;
vector<Moves> list;
vector<Pokemon_card>::iterator my_interator;
vector<Pokemon_card>::const_iterator iter;
vector<Pokemon_card>enemy_team;
vector<Pokemon_card>party;
vector<Moves>your_moves;
vector<Moves>enemy_moves;
vector<Pokemon_card>temp_team;
vector<Moves>temp_moves;
void initialize_deck()
{
temp_team.push_back(Pokemon_card("Temp Pokemon", "Psychic", "", 313, 313,198,188,368,338, 1));
temp_team[temp_team.size()-1].m_moves.push_back(Moves("Temp Move", "Psychic", 90, 100, 16, 3));
deck.push_back(Pokemon_card("Alakazam ", "Psychic", "", 313, 313,198,188,368,338, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Psychic", "Psychic", 90, 100, 16, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Recover","Normal", 0, 100, 16, 0));
deck[deck.size()-1].m_moves.push_back(Moves("Thunder Wave","Electric",0, 100, 32, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Seismic Toss","Fighting", 100, 100, 32, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Reflect","Psychic", 0, 100, 32, 0));
deck[deck.size()-1].m_moves.push_back(Moves("Kinesis","Psychic", 0, 80, 24, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Counter","Fighting", 0, 100, 32, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Mimic","Normal", 0, 100, 16, 1));
deck.push_back(Pokemon_card("Chansey ", "Normal", "",703, 703,108,108,308,198, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Ice Beam", "Ice", 95, 100, 16, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Softboiled","Psychic", 0, 100, 16, 0));
deck[deck.size()-1].m_moves.push_back(Moves("Counter","Fighting", 0, 100, 32, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Thunderbolt", "Electric", 95, 100, 24, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Thunder Wave","Electric",0, 100, 32, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Reflect","Psychic", 0, 100, 32, 0));
deck[deck.size()-1].m_moves.push_back(Moves("Sing","Psychic", 0, 55, 24, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Blizzard","Ice",120, 90, 8, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Flash","Normal", 0, 70, 32, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Seismic Toss","Fighting", 100, 100, 32, 1));
// deck[deck.size()-1].m_moves.push_back(Moves("Defense Curl","Normal", 0, 100, 64, 0));
deck.push_back(Pokemon_card("Cloyster ", "Water", "Ice",303, 303,288,458,268,238, 1));
// deck[deck.size()-1].m_moves.push_back(Moves("Clamp","Water",35, 75, 16, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Blizzard","Ice",120, 90, 8, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Hyper Beam","Normal",150, 90, 8, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Explosion","Normal",340, 100, 8, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Double Edge", "Normal", 100, 100, 24, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Rest","Psychic", 0, 100, 16, 0));
deck[deck.size()-1].m_moves.push_back(Moves("Surf", "Water", 95, 100, 24, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Supersonic","Normal", 0, 55, 32, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Mimic","Normal", 0, 100, 16, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Substitute","Normal", 0, 100, 16, 0));
deck[deck.size()-1].m_moves.push_back(Moves("Reflect","Psychic", 0, 100, 32, 0));
deck.push_back(Pokemon_card("Dragonite", "Dragon", "Flying",385, 385,366,288,298,258, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Agility","Psychic", 0, 100, 48, 0));
// deck[deck.size()-1].m_moves.push_back(Moves("Wrap","Normal",15, 85, 32, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Hyper Beam","Normal",150, 90, 8, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Surf", "Water", 95, 100, 24, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Blizzard","Ice",120, 90, 8, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Thunderbolt", "Electric", 95, 100, 24, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Thunder Wave","Electric",0, 100, 32, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Body Slam", "Normal", 85, 100, 24, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Double Edge", "Normal", 100, 100, 24, 2));
deck.push_back(Pokemon_card("Exeggutor", "Grass", "Psychic",393, 393,288,268,348,208, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Sleep Powder","Grass", 0, 75, 24, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Psychic", "Psychic", 90, 100, 16, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Explosion","Normal",340, 100, 8, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Mega Drain","Grass",40, 100, 16, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Double Edge", "Normal", 100, 100, 24, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Stun Spore","Grass", 0, 75, 48, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Rest","Psychic", 0, 100, 16, 0));
deck[deck.size()-1].m_moves.push_back(Moves("Hyper Beam","Normal",150, 90, 8, 2));
// deck[deck.size()-1].m_moves.push_back(Moves("Leech Seed","Grass", 0, 90, 16, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Reflect","Psychic", 0, 100, 32, 0));
deck[deck.size()-1].m_moves.push_back(Moves("Egg Bomb", "Normal", 100, 75, 16, 2));
deck.push_back(Pokemon_card("Gengar ", "Ghost", "Poison",323, 323,228,218,358,318, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Hypnosis","Psychic", 0, 60, 32, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Explosion","Normal",340, 100, 8, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Thunderbolt", "Electric", 95, 100, 24, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Mega Drain","Grass",40, 100, 16, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Confuse Ray","Psychic", 0, 100, 16, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Psychic", "Psychic", 90, 100, 16, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Seismic Toss","Fighting", 100, 100, 32, 1));
deck.push_back(Pokemon_card("Golem ", "Ground", "Rock",363, 363,318,358,208,188, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Body Slam", "Normal", 85, 100, 24, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Earthquake", "Ground", 100, 100, 16, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Rock Slide", "Rock", 75, 90, 16, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Explosion","Normal",340, 100, 8, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Substitute","Normal", 0, 100, 16, 0));
deck.push_back(Pokemon_card("Jynx ", "Ice", "Psychic",333, 333,198,168,288,288, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Lovely Kiss","Psychic", 0, 75, 16, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Blizzard","Ice",120, 90, 8, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Psychic", "Psychic", 90, 100, 16, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Mimic","Normal", 0, 100, 16, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Body Slam", "Normal", 85, 100, 24, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Counter","Fighting", 0, 100, 32, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Rest","Psychic", 0, 100, 16, 0));
deck.push_back(Pokemon_card("Lapras ", "Water", "Ice",463, 463,268,258,288,218, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Blizzard","Ice",120, 90, 8, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Ice Beam", "Ice", 95, 100, 16, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Thunderbolt", "Electric", 95, 100, 24, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Rest","Psychic", 0, 100, 16, 0));
deck[deck.size()-1].m_moves.push_back(Moves("Body Slam", "Normal", 85, 100, 24, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Confuse Ray","Psychic", 0, 100, 16, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Mimic","Normal", 0, 100, 16, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Reflect","Psychic", 0, 100, 32, 0));
deck[deck.size()-1].m_moves.push_back(Moves("Sing","Psychic", 0, 55, 24, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Surf", "Water", 95, 100, 24, 3));
deck.push_back(Pokemon_card("Persian ", "Normal", "",333, 333,238,218,228,328, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Slash", "Normal",140, 100, 32, 2));
deck[deck.size()-1].m_moves.push_back(Moves("BubbleBeam", "Water", 65, 100, 32, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Hyper Beam","Normal",150, 90, 8, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Thunderbolt", "Electric", 95, 100, 24, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Body Slam", "Normal", 85, 100, 24, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Screech","Psychic", 0, 85, 64, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Mimic","Normal", 0, 100, 16, 1));
deck.push_back(Pokemon_card("Rhydon ", "Ground", "Rock",413, 413,358,338,188,178, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Body Slam", "Normal", 85, 100, 24, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Earthquake", "Ground", 100, 100, 16, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Rock Slide", "Rock", 75, 90, 16, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Substitute","Normal", 0, 100, 16, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Hyper Beam","Normal",150, 90, 8, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Rest","Psychic", 0, 100, 16, 0));
deck.push_back(Pokemon_card("Slowbro ", "Water", "Psychic",393, 393,248,318,258,158, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Amnesia","Psychic", 0, 100, 32, 0));
deck[deck.size()-1].m_moves.push_back(Moves("Surf", "Water", 95, 100, 24, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Thunder Wave","Electric",0, 100, 32, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Rest","Psychic", 0, 100, 16, 0));
deck[deck.size()-1].m_moves.push_back(Moves("Psychic", "Psychic", 90, 100, 16, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Ice Beam", "Ice", 95, 100, 16, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Withdraw","Normal", 0, 100, 64, 0));
deck[deck.size()-1].m_moves.push_back(Moves("Reflect","Psychic", 0, 100, 32, 0));
deck[deck.size()-1].m_moves.push_back(Moves("Counter","Fighting", 0, 100, 32, 1));
deck.push_back(Pokemon_card("Snorlax ", "Normal", "",523, 523,318,228,228,158, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Body Slam", "Normal", 85, 100, 24, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Hyper Beam","Normal",150, 90, 8, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Surf", "Water", 95, 100, 24, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Earthquake", "Ground", 100, 100, 16, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Selfdestruct","Normal",260, 100, 8, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Amnesia","Psychic", 0, 100, 32, 0));
deck[deck.size()-1].m_moves.push_back(Moves("Ice Beam", "Ice", 95, 100, 16, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Blizzard","Ice",120, 90, 8, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Thunderbolt", "Electric", 95, 100, 24, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Rest","Psychic", 0, 100, 16, 0));
deck[deck.size()-1].m_moves.push_back(Moves("Reflect","Psychic", 0, 100, 32, 0));
deck[deck.size()-1].m_moves.push_back(Moves("Counter","Fighting", 0, 100, 32, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Thunder", "Electric", 120, 75, 16, 3));
deck.push_back(Pokemon_card("Starmie ", "Water", "Psychic",323, 323,248,268,298,328, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Blizzard","Ice",120, 90, 8, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Surf", "Water", 95, 100, 24, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Thunder Wave","Electric",0, 100, 32, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Thunderbolt", "Electric", 95, 100, 24, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Recover","Normal", 0, 100, 16, 0));
deck[deck.size()-1].m_moves.push_back(Moves("Hydro Pump", "Water", 120, 80, 8, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Reflect","Psychic", 0, 100, 32, 0));
deck[deck.size()-1].m_moves.push_back(Moves("Psychic", "Psychic", 90, 100, 16, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Hyper Beam","Normal",150, 90, 8, 2));
deck.push_back(Pokemon_card("Tauros ", "Normal", "",353, 353,298,288,238,318, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Body Slam", "Normal", 85, 100, 24, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Hyper Beam","Normal",150, 90, 8, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Earthquake", "Ground", 100, 100, 16, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Blizzard","Ice",120, 90, 8, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Thunderbolt", "Electric", 95, 100, 24, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Thunder", "Electric", 120, 75, 16, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Substitute","Normal", 0, 100, 16, 0));
deck.push_back(Pokemon_card("Zapdos ", "Electric", "Flying",383, 383,278,268,348,298, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Thunderbolt", "Electric", 95, 100, 24, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Drill Peck", "Flying", 80, 100, 32, 2));
deck[deck.size()-1].m_moves.push_back(Moves("Thunder Wave","Electric",0, 100, 32, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Agility","Psychic", 0, 100, 48, 0));
deck[deck.size()-1].m_moves.push_back(Moves("Thunder", "Electric", 120, 75, 16, 3));
deck[deck.size()-1].m_moves.push_back(Moves("Mimic","Normal", 0, 100, 16, 1));
// deck[deck.size()-1].m_moves.push_back(Moves("Toxic","Poison", 0, 85, 16, 1));
deck[deck.size()-1].m_moves.push_back(Moves("Rest","Psychic", 0, 100, 16, 0));
deck[deck.size()-1].m_moves.push_back(Moves("Reflect","Psychic", 0, 100, 32, 0));
return;
}
void create_enemy_team()
{
enemy_team.push_back(Pokemon_card("Tauros ", "Normal", "",353, 353,298,288,238,318, 1));
enemy_team[enemy_team.size()-1].m_moves.push_back(Moves("Body Slam", "Normal", 85, 100, 24, 2));
enemy_team[enemy_team.size()-1].m_moves.push_back(Moves("Hyper Beam","Normal",150, 90, 8, 2));
enemy_team[enemy_team.size()-1].m_moves.push_back(Moves("Earthquake", "Ground", 100, 100, 16, 2));
enemy_team[enemy_team.size()-1].m_moves.push_back(Moves("Blizzard","Ice",120, 90, 8, 3));
enemy_team.push_back(Pokemon_card("Alakazam ", "Psychic", "", 313, 313,198,188,368,338, 1));
enemy_team[enemy_team.size()-1].m_moves.push_back(Moves("Psychic", "Psychic", 90, 100, 16, 3));
enemy_team[enemy_team.size()-1].m_moves.push_back(Moves("Recover","Normal", 0, 100, 16, 0));
enemy_team[enemy_team.size()-1].m_moves.push_back(Moves("Thunder Wave","Electric",0, 100, 32, 1));
enemy_team[enemy_team.size()-1].m_moves.push_back(Moves("Seismic Toss","Fighting", 100, 100, 32, 1));
enemy_team.push_back(Pokemon_card("Chansey ", "Normal", "",703, 703,108,108,308,198, 1));
enemy_team[enemy_team.size()-1].m_moves.push_back(Moves("Ice Beam", "Ice", 95, 100, 16, 3));
enemy_team[enemy_team.size()-1].m_moves.push_back(Moves("Softboiled","Psychic", 0, 100, 16, 0));
enemy_team[enemy_team.size()-1].m_moves.push_back(Moves("Thunderbolt", "Electric", 95, 100, 24, 3));
enemy_team[enemy_team.size()-1].m_moves.push_back(Moves("Thunder Wave","Electric",0, 100, 32, 1));
enemy_team.push_back(Pokemon_card("Golem ", "Ground", "Rock",363, 363,318,358,208,188, 1));
enemy_team[enemy_team.size()-1].m_moves.push_back(Moves("Body Slam", "Normal", 85, 100, 24, 2));
enemy_team[enemy_team.size()-1].m_moves.push_back(Moves("Earthquake", "Ground", 100, 100, 16, 2));
enemy_team[enemy_team.size()-1].m_moves.push_back(Moves("Rock Slide", "Rock", 75, 90, 16, 2));
enemy_team[enemy_team.size()-1].m_moves.push_back(Moves("Explosion","Normal",340, 100, 8, 2));
enemy_team.push_back(Pokemon_card("Exeggutor", "Grass", "Psychic",393, 393,288,268,348,208, 1));
enemy_team[enemy_team.size()-1].m_moves.push_back(Moves("Sleep Powder","Grass", 0, 75, 24, 1));
enemy_team[enemy_team.size()-1].m_moves.push_back(Moves("Psychic", "Psychic", 90, 100, 16, 3));
enemy_team[enemy_team.size()-1].m_moves.push_back(Moves("Explosion","Normal",340, 100, 8, 2));
enemy_team[enemy_team.size()-1].m_moves.push_back(Moves("Mega Drain","Grass",40, 100, 16, 3));
enemy_team.push_back(Pokemon_card("Starmie ", "Water", "Psychic",323, 323,248,268,298,328, 1));
enemy_team[enemy_team.size()-1].m_moves.push_back(Moves("Blizzard","Ice",120, 90, 8, 3));
enemy_team[enemy_team.size()-1].m_moves.push_back(Moves("Thunder Wave","Electric",0, 100, 32, 1));
enemy_team[enemy_team.size()-1].m_moves.push_back(Moves("Thunderbolt", "Electric", 95, 100, 24, 3));
enemy_team[enemy_team.size()-1].m_moves.push_back(Moves("Recover","Normal", 0, 100, 16, 0));
}
ostream&operator<<(ostream& os, const Pokemon_card& pcard)
{
os << pcard.m_name << " | " << pcard.m_type1 << "/"<< pcard.m_type2;
return os;
}
ostream&operator<<(ostream& os, const Moves& pmove)
{
os << pmove.m_move;
return os;
}
void output_deck()
{
int i=0;
cout << "# Pokemon | Types" << endl;
for (iter = deck.begin(); iter != deck.end(); iter++)
{
cout << i << " " << *iter << endl;
i++;
}
}
void output_moves(int input)
{
int i=0;
cout << "# Move" << endl;
for (vector<Moves>::const_iterator iter = deck[input].m_moves.begin(); iter!=deck[input].m_moves.end(); iter++)
{
cout << i << " " << *iter << endl;
i++;
}
move_choices = deck[input].m_moves.size();
cout << "Choose a move" << endl;
}
void instructions()
{
cout << "POKEMON GENERATION 1 SIMULATOR" << endl;
cout << "Welcome to the pokemon battle simulator" << endl;
cout << "Here you will battle against a fearsome opponent in a pokemon battle" << endl;
cout << "First choose each member of your 6 man team and all 4 of their Moves" << endl;
cout << "After that the battle begins" << endl;
cout << "During each turn of the battle you will select your pokemon's Moves" << endl;
cout << "The goal is to be the last man standing as pokemon pummel each other" << endl;
cout << "Good luck!" << endl << endl;
}
void output_party()
{
cout << "Your final team is" << endl;
for (int t=0; t<6; t++)
{
cout << party[t].get_name() << endl;
for (int k=0; k<4; k++)
{
cout << "-" << party[t].m_moves[k].get_move() << endl;
}
}
}
void teambuilder()
{
int input=0;
for (int ctr=0; ctr<6; ctr++)
{
output_deck();
cout << endl << "Choose a pokemon" << endl;
cin >> input;
while ((input < 0) || (input > deck.size()-1))
{
cout << "Error: enter a valid pokemon number" << endl;
cin >> input;
}
party.push_back(deck.at(input));
string choosen = deck[input].get_name();
cout << choosen << " has been added" << endl<< endl;
for (int j=0; j<4; j++)
{
output_moves(input);
int choice;
string move_choice;
cin >> choice;
move_choices--;
while ((choice < 0) || (choice > move_choices))
{
cout << "Error: enter a valid numbered move" << endl;
cin >> choice;
}
party[party.size()-1].m_moves.push_back(Moves(deck[input].m_moves.at(choice)));
party[ctr].m_moves.at(j) = deck[input].m_moves.at(choice);
cout << party[ctr].m_moves[j] << " was added." << endl;
// deck.erase(Alakazam_moves.begin() + choice);
deck[input].m_moves.erase(deck[input].m_moves.begin()+ choice);
cout << endl;
}
deck.erase(deck.begin() + input );
}
cout << endl;
}
void enemy_r_switch()
{
int temp=0;
temp = enemy_pokemon;
while (temp == enemy_pokemon)
{
enemy_pokemon=rand() % enemy_team.size();
}
cout << "The enemy switch in "<< enemy_team[enemy_pokemon].get_name() << endl;
confusion=0;
evasion=1.00;
t_def=1;
}
void enemy_death ()
{
enemy_team.erase(enemy_team.begin() + enemy_pokemon);
enemy_pokemon=rand() % enemy_team.size();
cout << "The enemy switch in "<< enemy_team[enemy_pokemon].get_name() << endl;
confusion=0;
evasion=1.00;
t_def=1;
}
void player_death()
{
if (mimic_choice!=-1)
{
party[player_pokemon].m_moves.at(mimic_choice) = temp_team[0].m_moves.at(0);
mimic_choice=-1;
}
party.erase(party.begin() + player_pokemon);
for (int t = 0; t<party.size(); t++)
{
cout << t << " " << party[t].get_name() << endl;
}
cout << "Choose a pokemon" << endl;
cin >> player_pokemon;
while ((player_pokemon<0) || (player_pokemon>=party.size()))
{
cout << "Enter a valid pokemon number" << endl;
cin >> player_pokemon;
}
cout << "You switch in "<< party[player_pokemon].get_name() << endl;
counter_power=0;
t_spc=1;
t_speed=1;
}
void player_switch()
{
if (mimic_choice!=-1)
{
party[player_pokemon].m_moves.at(mimic_choice) = temp_team[0].m_moves.at(0);
mimic_choice=-1;
}
for (int t = 0; t<party.size(); t++)
{
cout << t << " " << party[t].get_name() << endl;
}
int temp=0;
temp = player_pokemon;
while ((temp == player_pokemon) || (player_pokemon>(party.size())) || (player_pokemon<0))
{
cout << "Choose a pokemon that is not currently on the field" << endl;
cin >> player_pokemon;
}
cout << "You switched in "<< party[player_pokemon].get_name() << endl;
counter_power=0;
t_spc=1;
t_speed=1;
}
void your_battlecode()
{
int accuracy;
int C=1;
float M=1;
float super=1;
int para_chance;
para_chance = rand() % 4;
int critical_hit=0;
int crit_rand;
crit_rand=rand() % 100;
if ((crit_rand) < (floor(ceil(((party[player_pokemon].get_speed()-5)/2)-47)*100 / 512)))
{
critical_hit=1;
}
if ((your_switch != 1) && (recharge==0))
{
if (party[player_pokemon].get_health()>=20)
{
cout << party[player_pokemon].get_name() << " is fast asleep" << endl;
if (party[player_pokemon].get_health()==20)
{
cout << party[player_pokemon].get_name() << " woke up" << endl;
party[player_pokemon].m_health = 1;
}
}
else if ((para_chance==2) && (party[player_pokemon].get_health()==2))
{
cout << party[player_pokemon].get_name() << " is paralized!" << endl;
}
else
{
cout << party[player_pokemon].get_name() << " used " << party[player_pokemon].m_moves[your_choice].get_move() << endl;
accuracy = rand() % 100;
if(accuracy< party[player_pokemon].m_moves[your_choice].get_acr())
{
if ((party[player_pokemon].get_type1() == party[player_pokemon].m_moves[your_choice].get_move_type()) || (party[player_pokemon].get_type2() == party[player_pokemon].m_moves[your_choice].get_move_type()))
{
M *= 1.50;
}
if (party[player_pokemon].m_moves[your_choice].get_move_type()== "Psychic")
{
if ((enemy_team[enemy_pokemon].get_type1() == "Psychic") || (enemy_team[enemy_pokemon].get_type2() == "Psychic"))
{
super /= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Fighting") || (enemy_team[enemy_pokemon].get_type2() == "Fighting"))
{
super *= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Poison") || (enemy_team[enemy_pokemon].get_type2() == "Poison"))
{
super *= 2.00;
}
}
if (party[player_pokemon].m_moves[your_choice].get_move_type()== "Water")
{
if ((enemy_team[enemy_pokemon].get_type1() == "Ground") || (enemy_team[enemy_pokemon].get_type2() == "Ground"))
{
super *= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Rock") || (enemy_team[enemy_pokemon].get_type2() == "Rock"))
{
super *= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Water") || (enemy_team[enemy_pokemon].get_type2() == "Water"))
{
super /= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Grass") || (enemy_team[enemy_pokemon].get_type2() == "Grass"))
{
super /= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Dragon") || (enemy_team[enemy_pokemon].get_type2() == "Dragon"))
{
super /= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Fire") || (enemy_team[enemy_pokemon].get_type2() == "Fire"))
{
super *= 2.00;
}
}
if (party[player_pokemon].m_moves[your_choice].get_move_type()== "Grass")
{
if ((enemy_team[enemy_pokemon].get_type1() == "Grass") || (enemy_team[enemy_pokemon].get_type2() == "Grass"))
{
super /= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Water") || (enemy_team[enemy_pokemon].get_type2() == "Water"))
{
super *= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Grass") || (enemy_team[enemy_pokemon].get_type2() == "Grass"))
{
super /= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Flying") || (enemy_team[enemy_pokemon].get_type2() == "Flying"))
{
super /= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Rock") || (enemy_team[enemy_pokemon].get_type2() == "Rock"))
{
super *= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Ground") || (enemy_team[enemy_pokemon].get_type2() == "Ground"))
{
super *= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Poison") || (enemy_team[enemy_pokemon].get_type2() == "Poison"))
{
super /= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Dragon") || (enemy_team[enemy_pokemon].get_type2() == "Dragon"))
{
super /= 2.00;
}
}
if (party[player_pokemon].m_moves[your_choice].get_move_type()== "Electric")
{
if ((enemy_team[enemy_pokemon].get_type1() == "Dragon") || (enemy_team[enemy_pokemon].get_type2() == "Dragon"))
{
super /= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Grass") || (enemy_team[enemy_pokemon].get_type2() == "Grass"))
{
super /= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Water") || (enemy_team[enemy_pokemon].get_type2() == "Water"))
{
super *= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Electric") || (enemy_team[enemy_pokemon].get_type2() == "Electric"))
{
super /= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Flying") || (enemy_team[enemy_pokemon].get_type2() == "Flying"))
{
super /= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Ground") || (enemy_team[enemy_pokemon].get_type2() == "Ground"))
{
super *= 0;
}
}
if (party[player_pokemon].m_moves[your_choice].get_move_type()== "Ice")
{
if ((enemy_team[enemy_pokemon].get_type1() == "Water") || (enemy_team[enemy_pokemon].get_type2() == "Water"))
{
super /= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Grass") || (enemy_team[enemy_pokemon].get_type2() == "Grass"))
{
super *= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Ice") || (enemy_team[enemy_pokemon].get_type2() == "Ice"))
{
super /= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Flying") || (enemy_team[enemy_pokemon].get_type2() == "Flying"))
{
super *= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Ground") || (enemy_team[enemy_pokemon].get_type2() == "Ground"))
{
super *= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Dragon") || (enemy_team[enemy_pokemon].get_type2() == "Dragon"))
{
super /= 2.00;
}
}
if (party[player_pokemon].m_moves[your_choice].get_move_type()== "Normal")
{
if ((enemy_team[enemy_pokemon].get_type1() == "Rock") || (enemy_team[enemy_pokemon].get_type2() == "Rock"))
{
super /= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Ghost") || (enemy_team[enemy_pokemon].get_type2() == "Ghost"))
{
super *= 0;
}
}
if (party[player_pokemon].m_moves[your_choice].get_move_type()== "Flying")
{
if ((enemy_team[enemy_pokemon].get_type1() == "Rock") || (enemy_team[enemy_pokemon].get_type2() == "Rock"))
{
super /= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Electric") || (enemy_team[enemy_pokemon].get_type2() == "Electric"))
{
super /= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Grass") || (enemy_team[enemy_pokemon].get_type2() == "Grass"))
{
super *= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Fighting") || (enemy_team[enemy_pokemon].get_type2() == "Fighting"))
{
super *= 2.00;
}
}
if (party[player_pokemon].m_moves[your_choice].get_move_type()== "Ground")
{
if ((enemy_team[enemy_pokemon].get_type1() == "Fire") || (enemy_team[enemy_pokemon].get_type2() == "Fire"))
{
super *= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Electric") || (enemy_team[enemy_pokemon].get_type2() == "Electric"))
{
super *= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Rock") || (enemy_team[enemy_pokemon].get_type2() == "Rock"))
{
super *= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Poison") || (enemy_team[enemy_pokemon].get_type2() == "Poison"))
{
super *= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Grass") || (enemy_team[enemy_pokemon].get_type2() == "Grass"))
{
super /= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Flying") || (enemy_team[enemy_pokemon].get_type2() == "Flying"))
{
super *= 0;
}
}
if (party[player_pokemon].m_moves[your_choice].get_move_type()== "Rock")
{
if ((enemy_team[enemy_pokemon].get_type1() == "Fire") || (enemy_team[enemy_pokemon].get_type2() == "Fire"))
{
super *= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Ice") || (enemy_team[enemy_pokemon].get_type2() == "Ice"))
{
super *= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Flying") || (enemy_team[enemy_pokemon].get_type2() == "Flying"))
{
super *= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Fighting") || (enemy_team[enemy_pokemon].get_type2() == "Fighting"))
{
super /= 2.00;
}
if ((enemy_team[enemy_pokemon].get_type1() == "Ground") || (enemy_team[enemy_pokemon].get_type2() == "Ground"))
{
super /= 2.00;
}
}
switch (party[player_pokemon].m_moves[your_choice].get_cat())
{
case 0:
if ((party[player_pokemon].m_moves[your_choice].get_move()=="Softboiled") || (party[player_pokemon].m_moves[your_choice].get_move()=="Recover"))
{
party[player_pokemon].m_hp += (party[player_pokemon].get_max_hp() / 2);
if (party[player_pokemon].get_max_hp() < party[player_pokemon].get_hp())
{
party[player_pokemon].m_hp = party[player_pokemon].get_max_hp();
}
cout << "It restored HP" << endl;
}
else if ((party[player_pokemon].m_moves[your_choice].get_move()=="Reflect"))
{
if (reflect_ctr<=0)
{
reflect = 2.00;
reflect_ctr=4;
}
cout << "A psychic layer was put up" << endl;
}
else if ((party[player_pokemon].m_moves[your_choice].get_move()=="Rest"))
{
if (party[player_pokemon].m_health == 2)
{
party[player_pokemon].m_speed *= 2;
}
party[player_pokemon].m_health=22;
party[player_pokemon].m_hp = party[player_pokemon].get_max_hp();
cout << party[player_pokemon].get_name() << " fell asleep and restored HP" << endl;
}
else if ((party[player_pokemon].m_moves[your_choice].get_move()=="Agility"))
{
t_speed+=1;
cout << party[player_pokemon].get_name() << "'s speed sharply rose" << endl;
}
else if ((party[player_pokemon].m_moves[your_choice].get_move()=="Amnesia") && t_spc<4)
{
t_spc+=1;
cout << party[player_pokemon].get_name() << "'s special sharply rose" << endl;
}
else if ((party[player_pokemon].m_moves[your_choice].get_move()=="Substitute") && (substitute<=0) && ((party[player_pokemon].get_max_hp() / 4) < party[player_pokemon].get_hp()))
{
party[player_pokemon].m_hp -= (party[player_pokemon].get_max_hp() / 4);
substitute = (party[player_pokemon].get_max_hp() / 4);
cout << party[player_pokemon].get_name() << " set up a substitute" << endl;
}
else
{
cout << "but it failed!" << endl;
}
break;
case 1:
if ((party[player_pokemon].m_moves[your_choice].get_move()=="Stun Spore") && (enemy_team[enemy_pokemon].get_health() == 1))
{
enemy_team[enemy_pokemon].m_health = 2;
enemy_team[enemy_pokemon].m_speed /= 2;
cout << enemy_team[enemy_pokemon].get_name() << " was paralyzed" << endl;
}
else if ((party[player_pokemon].m_moves[your_choice].get_move()=="Thunder Wave") && (enemy_team[enemy_pokemon].get_health() == 1) && (enemy_team[enemy_pokemon].get_type1() != "Ground") && (enemy_team[enemy_pokemon].get_type2() != "Ground"))
{
enemy_team[enemy_pokemon].m_health = 2;
enemy_team[enemy_pokemon].m_speed /= 2;
cout << enemy_team[enemy_pokemon].get_name() << " was paralyzed" << endl;
}
else if (((party[player_pokemon].m_moves[your_choice].get_move()=="Sleep Powder") || (party[player_pokemon].m_moves[your_choice].get_move()=="Hypnosis") ||
(party[player_pokemon].m_moves[your_choice].get_move()=="Sing") || (party[player_pokemon].m_moves[your_choice].get_move()=="Lovely Kiss")) && (enemy_team[enemy_pokemon].get_health() == 1))
{
enemy_team[enemy_pokemon].m_health = (rand() % 6 + 21);
cout << enemy_team[enemy_pokemon].get_name() << " fell asleep" << endl;
}
else if (party[player_pokemon].m_moves[your_choice].get_move()=="Seismic Toss")
{
enemy_team[enemy_pokemon].m_hp -= 100;
cout << enemy_team[enemy_pokemon].get_name() << " lost 100 HP" << endl;
}
else if ((party[player_pokemon].m_moves[your_choice].get_move()=="Flash") || (party[player_pokemon].m_moves[your_choice].get_move()=="Kinesis"))
{
if (evasion != .131687)
{
evasion *= (2.00/3.00);
cout << enemy_team[enemy_pokemon].get_name() << " lost accuracy" << endl;
}
else
{
cout << "but it failed!" << endl;
}
}
else if (((party[player_pokemon].m_moves[your_choice].get_move()=="Supersonic") || (party[player_pokemon].m_moves[your_choice].get_move()=="Confuse Ray")))
{
confusion=1;
confusion_ctr= (rand() % 4) +1;
cout << enemy_team[enemy_pokemon].get_name() << " is confused!" << endl;
}
else if ((party[player_pokemon].m_moves[your_choice].get_move()=="Counter"))
{
}
else if ((party[player_pokemon].m_moves[your_choice].get_move()=="Mimic"))
{
temp_team[0].m_moves.at(0) = party[player_pokemon].m_moves.at(your_choice);
party[player_pokemon].m_moves.at(your_choice) = enemy_team[enemy_pokemon].m_moves.at(rand() % 4);
mimic_choice=your_choice;
cout << enemy_team[enemy_pokemon].get_name() << " copied " << party[player_pokemon].m_moves.at(your_choice) << endl;
}
else if ((party[player_pokemon].m_moves[your_choice].get_move()=="Screech") && (t_def != 3))
{
t_def += 1.00;
cout << enemy_team[enemy_pokemon].get_name() << "'s defense sharply lowered" << endl;
}
else
{
cout << "But it failed" << endl;
}
break;
case 2:
if ((critical_hit==1) || (party[player_pokemon].m_moves[your_choice].get_move()=="Slash"))
{
enemy_team[enemy_pokemon].m_hp -= floor((floor(floor(floor(42.0*party[player_pokemon].get_atk()*party[player_pokemon].m_moves[your_choice].get_power())/enemy_team[enemy_pokemon].get_def())/50)+2)*M*super*2.00*((rand() % 39) + 217)/255.0);
cout << "It was a critical hit!" << endl;
}
else
{
enemy_team[enemy_pokemon].m_hp -= floor((floor(floor(floor(42.0*party[player_pokemon].get_atk()*party[player_pokemon].m_moves[your_choice].get_power())/enemy_team[enemy_pokemon].get_def())/50)+2)*M*super*t_def*((rand() % 39) + 217)/255.0);
}//enemy_team[enemy_pokemon].m_hp -= floor((floor(floor(floor(42.0*party[player_pokemon].get_spc()*party[player_pokemon].m_moves[your_choice].get_power())/enemy_team[enemy_pokemon].get_spc())/50)+2)*M*super*t_spc*((rand() % 39) + 217)/255.0);
if ((party[player_pokemon].m_moves[your_choice].get_move()=="Hyper Beam") && (enemy_team[enemy_pokemon].get_hp() >= 0))
{
cout << party[player_pokemon].get_name() << " needs to recharge" << endl;
recharge = 3;
}
if (super == 1)
{
cout << "Its normally effective!" << endl;
}
else if (super > 1)
{
cout << "Its super effective!" << endl;
}
else if (super == 0)
{
cout << "It didn't do anything" << endl;
}
else
{
cout << "Its not very effective!" << endl;
}
break;
case 3:
if (critical_hit==1)
{
enemy_team[enemy_pokemon].m_hp -=floor((floor(floor(floor(42.0*party[player_pokemon].get_spc()*party[player_pokemon].m_moves[your_choice].get_power())/enemy_team[enemy_pokemon].get_spc())/50)+2)*M*super*2*((rand() % 39) + 217)/255.0);
cout << "It was a critical hit!" << endl;
}
else
{
enemy_team[enemy_pokemon].m_hp -=floor((floor(floor(floor(42.0*party[player_pokemon].get_spc()*party[player_pokemon].m_moves[your_choice].get_power())/enemy_team[enemy_pokemon].get_spc())/50)+2)*M*super*t_spc*((rand() % 39) + 217)/255.0);
}
if (super == 1)
{
cout << "Its normally effective!" << endl;
}
else if (super > 1)
{
cout << "Its super effective!" << endl;
}
else if (super == 0)
{
cout << "It didn't do anything" << endl;
}
else
{
cout << "Its not very effective!" << endl;
}
break;
default:
cout << "But it failed!" << endl;
}
}
else
{
cout << "But it missed!" << endl;
}
}
}
if (party[player_pokemon].get_health()>20)
{
party[player_pokemon].m_health--;
}
}
void enemy_battlecode()
{
float M=1.0;
int accuracy;
int para_chance;
para_chance = rand() % 4;
int confusion_chance = rand() % 2;
float super=1.00;
int critical_hit=0;
if ((rand() % 100) < (floor(ceil(((enemy_team[enemy_pokemon].get_speed()-5)/2)-47)*100 / 512)))
{
critical_hit=1;
}
if ((enemy_switch !=1) && (enemy_recharge==0))
{
if (enemy_team[enemy_pokemon].get_health()>=20)
{
cout << enemy_team[enemy_pokemon].get_name() << " is fast asleep" << endl;
if (enemy_team[enemy_pokemon].get_health()==20)
{
cout << enemy_team[enemy_pokemon].get_name() << " woke up" << endl;
enemy_team[enemy_pokemon].m_health = 1;
}
}
else
{
if (confusion==1)
{
cout << enemy_team[enemy_pokemon].get_name() << " is confused!" << endl;
confusion_ctr--;
if (confusion_ctr==0)
{
confusion=0;
cout << enemy_team[enemy_pokemon].get_name() << " snapped out of confusion" << endl;
}
}
if ((confusion==1) && (confusion_chance == 1))
{
enemy_team[enemy_pokemon].m_hp -=floor((floor(floor(floor(42.0*enemy_team[enemy_pokemon].get_atk()*40)/party[player_pokemon].get_def())/50)+2)*((rand() % 39) + 217)/255.0);
cout << enemy_team[enemy_pokemon].get_name() << " hurt itself in confustion!" << endl;
}
else if ((enemy_team[enemy_pokemon].get_health()==2) && (para_chance==0))
{
cout << enemy_team[enemy_pokemon].get_name() << " is paralized, it was unable to move!" << endl;
}
else
{
cout << enemy_team[enemy_pokemon].get_name() << " used " << enemy_team[enemy_pokemon].m_moves[enemy_choice].get_move() << endl;
accuracy = rand() % 100;
if(accuracy<(enemy_team[enemy_pokemon].m_moves[enemy_choice].get_acr() * evasion))
{
if ((enemy_team[enemy_pokemon].get_type1() == enemy_team[enemy_pokemon].m_moves[enemy_choice].get_move_type()) || (enemy_team[enemy_pokemon].get_type2() == enemy_team[enemy_pokemon].m_moves[enemy_choice].get_move_type()))
{
M = 1.5;
}
if (enemy_team[enemy_pokemon].m_moves[enemy_choice].get_move_type()== "Psychic")
{
if ((party[player_pokemon].get_type1() == "Psychic") || (party[player_pokemon].get_type2() == "Psychic"))
{
super /= 2.00;
}
if ((party[player_pokemon].get_type1() == "Fighting") || (party[player_pokemon].get_type2() == "Fighting"))
{
super *= 2.00;
}
if ((party[player_pokemon].get_type1() == "Poison") || (party[player_pokemon].get_type2() == "Poison"))
{
super *= 2.00;
}
}
if (enemy_team[enemy_pokemon].m_moves[enemy_choice].get_move_type()== "Water")
{
if ((party[player_pokemon].get_type1() == "Ground") || (party[player_pokemon].get_type2() == "Ground"))
{
super *= 2.00;
}
if ((party[player_pokemon].get_type1() == "Rock") || (party[player_pokemon].get_type2() == "Rock"))
{
super *= 2.00;
}
if ((party[player_pokemon].get_type1() == "Water") || (party[player_pokemon].get_type2() == "Water"))
{
super /= 2.00;
}
if ((party[player_pokemon].get_type1() == "Grass") || (party[player_pokemon].get_type2() == "Grass"))
{
super /= 2.00;
}
if ((party[player_pokemon].get_type1() == "Dragon") || (party[player_pokemon].get_type2() == "Dragon"))
{
super /= 2.00;
}
if ((party[player_pokemon].get_type1() == "Fire") || (party[player_pokemon].get_type2() == "Fire"))
{
super *= 2.00;
}
}
if (enemy_team[enemy_pokemon].m_moves[enemy_choice].get_move_type()== "Grass")
{
if ((party[player_pokemon].get_type1() == "Grass") || (party[player_pokemon].get_type2() == "Grass"))
{
super /= 2.00;
}
if ((party[player_pokemon].get_type1() == "Water") || (party[player_pokemon].get_type2() == "Water"))
{
super *= 2.00;
}
if ((party[player_pokemon].get_type1() == "Grass") || (party[player_pokemon].get_type2() == "Grass"))
{
super /= 2.00;
}
if ((party[player_pokemon].get_type1() == "Flying") || (party[player_pokemon].get_type2() == "Flying"))
{
super /= 2.00;
}
if ((party[player_pokemon].get_type1() == "Rock") || (party[player_pokemon].get_type2() == "Rock"))
{
super *= 2.00;
}
if ((party[player_pokemon].get_type1() == "Ground") || (party[player_pokemon].get_type2() == "Ground"))
{
super *= 2.00;
}
if ((party[player_pokemon].get_type1() == "Poison") || (party[player_pokemon].get_type2() == "Poison"))
{
super /= 2.00;
}
if ((party[player_pokemon].get_type1() == "Dragon") || (party[player_pokemon].get_type2() == "Dragon"))
{
super /= 2.00;
}
}
if (enemy_team[enemy_pokemon].m_moves[enemy_choice].get_move_type()== "Electric")
{
if ((party[player_pokemon].get_type1() == "Dragon") || (party[player_pokemon].get_type2() == "Dragon"))
{
super /= 2.00;
}
if ((party[player_pokemon].get_type1() == "Grass") || (party[player_pokemon].get_type2() == "Grass"))
{
super /= 2.00;
}
if ((party[player_pokemon].get_type1() == "Water") || (party[player_pokemon].get_type2() == "Water"))
{
super *= 2.00;
}
if ((party[player_pokemon].get_type1() == "Electric") || (party[player_pokemon].get_type2() == "Electric"))
{
super /= 2.00;
}
if ((party[player_pokemon].get_type1() == "Flying") || (party[player_pokemon].get_type2() == "Flying"))
{
super /= 2.00;
}
if ((party[player_pokemon].get_type1() == "Ground") || (party[player_pokemon].get_type2() == "Ground"))
{
super *= 0;
}
}
if (enemy_team[enemy_pokemon].m_moves[enemy_choice].get_move_type()== "Ice")
{
if ((party[player_pokemon].get_type1() == "Water") || (party[player_pokemon].get_type2() == "Water"))
{
super /= 2.00;
}
if ((party[player_pokemon].get_type1() == "Grass") || (party[player_pokemon].get_type2() == "Grass"))
{
super *= 2.00;
}
if ((party[player_pokemon].get_type1() == "Ice") || (party[player_pokemon].get_type2() == "Ice"))
{
super /= 2.00;
}
if ((party[player_pokemon].get_type1() == "Flying") || (party[player_pokemon].get_type2() == "Flying"))
{
super *= 2.00;
}
if ((party[player_pokemon].get_type1() == "Ground") || (party[player_pokemon].get_type2() == "Ground"))
{
super *= 2.00;
}
if ((party[player_pokemon].get_type1() == "Dragon") || (party[player_pokemon].get_type2() == "Dragon"))
{
super *= 2.00;
}
}
if (enemy_team[enemy_pokemon].m_moves[enemy_choice].get_move_type()== "Normal")
{
if ((party[player_pokemon].get_type1() == "Rock") || (party[player_pokemon].get_type2() == "Rock"))
{
super /= 2.00;
}
if ((party[player_pokemon].get_type1() == "Ghost") || (party[player_pokemon].get_type2() == "Ghost"))
{
super *= 0;
}
}
if (enemy_team[enemy_pokemon].m_moves[enemy_choice].get_move_type()== "Flying")
{
if ((party[player_pokemon].get_type1() == "Rock") || (party[player_pokemon].get_type2() == "Rock"))
{
super /= 2.00;
}
if ((party[player_pokemon].get_type1() == "Electric") || (party[player_pokemon].get_type2() == "Electric"))
{
super /= 2.00;
}
if ((party[player_pokemon].get_type1() == "Grass") || (party[player_pokemon].get_type2() == "Grass"))
{
super *= 2.00;
}
if ((party[player_pokemon].get_type1() == "Fighting") || (party[player_pokemon].get_type2() == "Fighting"))
{
super *= 2.00;
}
}
if (enemy_team[enemy_pokemon].m_moves[enemy_choice].get_move_type()== "Ground")
{
if ((party[player_pokemon].get_type1() == "Fire") || (party[player_pokemon].get_type2() == "Fire"))
{
super *= 2.00;
}
if ((party[player_pokemon].get_type1() == "Electric") || (party[player_pokemon].get_type2() == "Electric"))
{
super *= 2.00;
}
if ((party[player_pokemon].get_type1() == "Rock") || (party[player_pokemon].get_type2() == "Rock"))
{
super *= 2.00;
}
if ((party[player_pokemon].get_type1() == "Poison") || (party[player_pokemon].get_type2() == "Poison"))
{
super *= 2.00;
}
if ((party[player_pokemon].get_type1() == "Grass") || (party[player_pokemon].get_type2() == "Grass"))
{
super /= 2.00;
}
if ((party[player_pokemon].get_type1() == "Flying") || (party[player_pokemon].get_type2() == "Flying"))
{
super *= 0;
}
}
if (enemy_team[enemy_pokemon].m_moves[enemy_choice].get_move_type()== "Rock")
{
if ((party[player_pokemon].get_type1() == "Fire") || (party[player_pokemon].get_type2() == "Fire"))
{
super *= 2.00;
}
if ((party[player_pokemon].get_type1() == "Ice") || (party[player_pokemon].get_type2() == "Ice"))
{
super *= 2.00;
}
if ((party[player_pokemon].get_type1() == "Flying") || (party[player_pokemon].get_type2() == "Flying"))
{
super *= 2.00;
}
if ((party[player_pokemon].get_type1() == "Fighting") || (party[player_pokemon].get_type2() == "Fighting"))
{
super /= 2.00;
}
if ((party[player_pokemon].get_type1() == "Ground") || (party[player_pokemon].get_type2() == "Ground"))
{
super /= 2.00;
}
}
switch (enemy_team[enemy_pokemon].m_moves[enemy_choice].get_cat())
{
case 0:
if ((enemy_team[enemy_pokemon].m_moves[enemy_choice].get_move()=="Softboiled") || (enemy_team[enemy_pokemon].m_moves[enemy_choice].get_move()=="Recover"))
{
enemy_team[enemy_pokemon].m_hp += (enemy_team[enemy_pokemon].get_max_hp() / 2);
if (enemy_team[enemy_pokemon].get_max_hp() < enemy_team[enemy_pokemon].get_hp())
{
enemy_team[enemy_pokemon].m_hp = enemy_team[enemy_pokemon].get_max_hp();
}
cout << "It restored HP" << endl;
}
else
{
cout << "but it failed!" << endl;
}
break;
case 1:
if (((enemy_team[enemy_pokemon].m_moves[enemy_choice].get_move()=="Stun Spore")) && (party[player_pokemon].get_health() == 1))
{
party[player_pokemon].m_health = 2;
party[player_pokemon].m_speed /= 2;
cout << party[player_pokemon].get_name() << " was paralyzed" << endl;
}
else if ((enemy_team[enemy_pokemon].m_moves[enemy_choice].get_move()=="Thunder Wave") && (party[player_pokemon].get_health() == 1) && (party[player_pokemon].get_type1() != "Ground") && (party[player_pokemon].get_type2() != "Ground"))
{
party[player_pokemon].m_health = 2;
party[player_pokemon].m_speed /= 2;
cout << party[player_pokemon].get_name() << " was paralyzed" << endl;
}
else if (((enemy_team[enemy_pokemon].m_moves[enemy_choice].get_move()=="Sleep Powder") || (enemy_team[enemy_pokemon].m_moves[enemy_choice].get_move()=="Hypnosis") ||
(enemy_team[enemy_pokemon].m_moves[enemy_choice].get_move()=="Sing") || (enemy_team[enemy_pokemon].m_moves[enemy_choice].get_move()=="Lovely Kiss")) && (party[player_pokemon].get_health() == 1))
{
party[player_pokemon].m_health = (rand() % 6 + 21);
cout << party[player_pokemon].get_name() << " fell asleep" << endl;
}
else if (enemy_team[enemy_pokemon].m_moves[enemy_choice].get_move()=="Seismic Toss")
{
party[player_pokemon].m_hp -= 100;
cout << party[player_pokemon].get_name() << " lost 100 HP" << endl;
}
else
{
cout << "But it failed!" << endl;
}
break;
case 2:
if (substitute>0)
{
if (critical_hit==1)
{
substitute -=floor((floor(floor(floor(42.0*enemy_team[enemy_pokemon].get_atk()*enemy_team[enemy_pokemon].m_moves[enemy_choice].get_power())/party[player_pokemon].get_def())/50)+2)*M*super*2*((rand() % 39) + 217)/255.0)/reflect;
cout << "It was a critical hit!" << endl;
}
else
{
substitute -=floor((floor(floor(floor(42.0*enemy_team[enemy_pokemon].get_atk()*enemy_team[enemy_pokemon].m_moves[enemy_choice].get_power())/party[player_pokemon].get_def())/50)+2)*M*super*((rand() % 39) + 217)/255.0)/reflect;
}
if (substitute<=0)
{
cout << "Subtitute faded" << endl;
}
}
else
{
if (critical_hit==1)
{
party[player_pokemon].m_hp -=floor((floor(floor(floor(42.0*enemy_team[enemy_pokemon].get_atk()*enemy_team[enemy_pokemon].m_moves[enemy_choice].get_power())/party[player_pokemon].get_def())/50)+2)*M*super*2*((rand() % 39) + 217)/255.0)/reflect;
cout << "It was a critical hit!" << endl;
}
else
{
party[player_pokemon].m_hp -=floor((floor(floor(floor(42.0*enemy_team[enemy_pokemon].get_atk()*enemy_team[enemy_pokemon].m_moves[enemy_choice].get_power())/party[player_pokemon].get_def())/50)+2)*M*super*((rand() % 39) + 217)/255.0)/reflect;
}
}
if (party[player_pokemon].m_moves[your_choice].get_move() == "Counter")
{
counter_power= floor(2*floor((floor(floor(floor(42.0*enemy_team[enemy_pokemon].get_atk()*enemy_team[enemy_pokemon].m_moves[enemy_choice].get_power())/party[player_pokemon].get_def())/50)+2)*M*super*((rand() % 39) + 217)/255.0)/reflect);
}
if ((enemy_team[enemy_pokemon].m_moves[enemy_choice].get_move()=="Hyper Beam") && (party[player_pokemon].get_hp() >= 0))
{
cout << enemy_team[enemy_pokemon].get_name() << " needs to recharge" << endl;
enemy_recharge = 3;
}
if (super == 1)
{
cout << "Its normally effective!" << endl;
}
else if (super > 1)
{
cout << "Its super effective!" << endl;
}
else if (super == 0)
{
cout << "It didn't do anything" << endl;
}
else
{
cout << "Its not very effective!" << endl;
}
break;
case 3:
if (critical_hit==1)
{
party[player_pokemon].m_hp -=floor((floor(floor(floor(42.0*enemy_team[enemy_pokemon].get_spc()*enemy_team[enemy_pokemon].m_moves[enemy_choice].get_power())/party[player_pokemon].get_spc())/50)+2)*M*super*2*((rand() % 39) + 217)/255.0);
cout << "It was a critical hit!" << endl;
}
else
{
party[player_pokemon].m_hp -=floor((floor(floor(floor(42.0*enemy_team[enemy_pokemon].get_spc()*enemy_team[enemy_pokemon].m_moves[enemy_choice].get_power())/party[player_pokemon].get_spc())/50)+2)*M*super*(1/t_spc)*((rand() % 39) + 217)/255.0);
}
if (super == 1)
{
cout << "Its normally effective!" << endl;
}
else if (super > 1)
{
cout << "Its super effective!" << endl;
}
else if (super == 0)
{
cout << "It didn't do anything" << endl;
}
else
{
cout << "Its not very effective!" << endl;
}
break;
default:
cout << endl;
}
}
else
{
cout << "It missed" << endl;
}
}
}
if (enemy_team[enemy_pokemon].get_health() >20)
{
enemy_team[enemy_pokemon].m_health--;
}
if (confusion==1)
{
confusion_ctr--;
if (confusion_ctr==0)
{
confusion=0;
cout << enemy_team[enemy_pokemon].get_name() << " snapped out of confusion" << endl;
}
}
}
}
int main()
{
int faster=3;
int temp;
int battle_on=1;
instructions();
create_enemy_team();
initialize_deck();
teambuilder();
output_party();
while (battle_on==1)
{
cout << endl;
cout << "Your "<<party[player_pokemon].get_name() << "(HP: (" << party[player_pokemon].get_hp() << "/"<< party[player_pokemon].get_max_hp() << ") " << (party[player_pokemon].get_hp() * 100.00) / party[player_pokemon].get_max_hp() << "%) is on the field" << endl;
cout << "Enemy " << enemy_team[enemy_pokemon].get_name() << "(HP: (" << enemy_team[enemy_pokemon].get_hp() << "/"<< enemy_team[enemy_pokemon].get_max_hp() << ") " << (enemy_team[enemy_pokemon].get_hp() * 100.00) / enemy_team[enemy_pokemon].get_max_hp() << "%) is on the field" << endl;
if (recharge == 0)
{
cout << "Choose a move: " << endl;
for (int t=0; t<4; t++)
{
//deck[15].m_moves[2].get_move();
cout << t << " " << party[player_pokemon].m_moves[t].get_move()<< endl;
}
cout << "4 Switch to another pokemon" << endl;
cin >> your_choice;
if (party.size() == 1)
{
while ((your_choice > 3) || (your_choice < 0))
{
cout << "Enter a valid number (you can't switch if you are the last pokemon)" << endl;
cin >> your_choice;
}
}
else
{
while ((your_choice > 4) || (your_choice < 0))
{
cout << "Enter a valid number" << endl;
cin >> your_choice;
}
}
if (your_choice==4)
{
your_switch=1;
}
else
{
your_switch=0;
}
if (your_switch== 1)
{
player_switch();
}
}
else
{
cout << party[player_pokemon].get_name() << " is recharging " << endl;
}
srand ( time(NULL) );
enemy_choice=rand() % 5;
if (enemy_recharge==0)
{
if (enemy_team.size() == 1)
{
enemy_choice=rand() % 4;
}
if (enemy_choice==4)
{
enemy_switch=1;
}
if (enemy_switch==1)
{
enemy_r_switch();
}
}
else
{
cout << enemy_team[enemy_pokemon].get_name() << " is recharging" << endl;
}
/*
else
{
enemy_choice = enemy_choice + (enemy_pokemon*4);
}
*/
if ( (party[player_pokemon].get_speed()*t_speed) == enemy_team[enemy_pokemon].get_speed())
{
faster = rand() % 2;
}
cout << endl;
if (((party[player_pokemon].get_speed()*t_speed) > enemy_team[enemy_pokemon].get_speed()) || (faster ==1))
{
your_battlecode();
if (enemy_team[enemy_pokemon].get_hp() <= 0)
{
cout << enemy_team[enemy_pokemon].get_name() << " fainted" << endl;
if (enemy_team.size() == 1)
{
cout << "You win" << endl;
break;
}
else
{
enemy_death();
}
}
else
{
enemy_battlecode();
}
if (party[player_pokemon].get_hp() <= 0)
{
cout << party[player_pokemon].get_name() << " fainted" << endl;
if (party.size() == 1)
{
cout << "Enemy wins" << endl;
break;
}
else
{
player_death();
}
}
}
else if (((party[player_pokemon].get_speed()*t_speed) < enemy_team[enemy_pokemon].get_speed()) || (faster==0))
{
enemy_battlecode();
if (party[player_pokemon].get_hp() <= 0)
{
cout << party[player_pokemon].get_name() << " fainted" << endl;
if (party.size() == 1)
{
cout << "Enemy wins" << endl;
break;
}
else
{
player_death();
}
}
else
{
your_battlecode();
}
if (enemy_team[enemy_pokemon].get_hp() <= 0)
{
cout << enemy_team[enemy_pokemon].get_name() << " fainted" << endl;
if (enemy_team.size() == 1)
{
cout << "You win" << endl;
break;
}
else
{
enemy_death();
}
}
}
if ((counter_power>0))
{
enemy_team[enemy_pokemon].m_hp -= counter_power;
cout << party[player_pokemon].get_name() << " used counter" << endl;
if (enemy_team[enemy_pokemon].get_hp() <= 0)
{
cout << enemy_team[enemy_pokemon].get_name() << " fainted" << endl;
if (enemy_team.size() == 1)
{
cout << "You win" << endl;
break;
}
else
{
enemy_death();
}
}
else
{
cout << "Counter Failed!" << endl;
}
}
if ((((party[player_pokemon].m_moves[your_choice].get_move()=="Explosion") || party[player_pokemon].m_moves[your_choice].get_move()=="Selfdestruct")) && your_switch==0)
{
cout << party[player_pokemon].get_name() << " faited!" << endl;
if (party.size() == 1)
{
cout << "Enemy wins" << endl;
break;
}
else
{
player_death();
}
}
if (enemy_switch== 0)
{
if (enemy_team[enemy_pokemon].m_moves[enemy_choice].get_move()=="Explosion")
{
cout << enemy_team[enemy_pokemon].get_name() << " faited!" << endl;
if (enemy_team.size() == 1)
{
cout << "You win!" << endl;
break;
}
else
{
enemy_death();
}
}
if (enemy_recharge>0)
{
enemy_recharge--;
if (enemy_recharge==1)
{
enemy_recharge=0;
}
else
{
cout << enemy_team[enemy_pokemon].get_name() << " is recharging" << endl;
}
}
}
if (recharge>0)
{
recharge--;
if (recharge==1)
{
recharge=0;
}
else
{
cout << party[player_pokemon].get_name() << " is recharging" << endl;
}
}
faster=3;
your_switch=0;
enemy_switch=0;
reflect_ctr--;
if (reflect_ctr==0)
{
reflect=1.00;
cout << "The psychic shield faded" << endl;
}
}
cout << "GAME OVER" << endl;
return 0;
}