private void calcular_HP(Pokemon pokemon_1, Pokemon pokemon_2)
        {
            if (pokemon_1.Nome == "Shedinja")
            {
                txt_hp_1.Text = "1";
            }
            else
            {
                txt_hp_1.Text = CalculaStatus.calcular_hp(
                    pokemon_1.HP,
                    (int)nmc_vlr_iv_hp_1.Value,
                    (int)nmc_vlr_ev_hp_1.Value,
                    (int)nmc_vlr_level_1.Value).ToString();
            }

            if (pokemon_2.Nome == "Shedinja")
            {
                txt_hp_2.Text = "1";
            }
            else
            {
                txt_hp_2.Text = CalculaStatus.calcular_hp(
                    pokemon_2.HP,
                    (int)nmc_vlr_iv_hp_2.Value,
                    (int)nmc_vlr_ev_hp_2.Value,
                    (int)nmc_vlr_level_2.Value).ToString();
            }
        }
        private void calcular_ESPECIAL_DEFESA(Pokemon pokemon_1, Pokemon pokemon_2)
        {
            txt_stat_negativo_spdef_1.Text = CalculaStatus.calcular_sp_def(
                -1,
                pokemon_1.SpDefense,
                (int)nmc_vlr_iv_spdef_1.Value,
                (int)nmc_vlr_ev_spdef_1.Value,
                (int)nmc_vlr_level_1.Value,
                (int)nmc_vlr_estagio_spdef_1.Value,
                chk_sandstorm_1.Checked).ToString();

            txt_stat_neutro_spdef_1.Text = CalculaStatus.calcular_sp_def(
                0,
                pokemon_1.SpDefense,
                (int)nmc_vlr_iv_spdef_1.Value,
                (int)nmc_vlr_ev_spdef_1.Value,
                (int)nmc_vlr_level_1.Value,
                (int)nmc_vlr_estagio_spdef_1.Value,
                chk_sandstorm_1.Checked).ToString();

            txt_stat_positivo_spdef_1.Text = CalculaStatus.calcular_sp_def(
                1,
                pokemon_1.SpDefense,
                (int)nmc_vlr_iv_spdef_1.Value,
                (int)nmc_vlr_ev_spdef_1.Value,
                (int)nmc_vlr_level_1.Value,
                (int)nmc_vlr_estagio_spdef_1.Value,
                chk_sandstorm_1.Checked).ToString();

            /***************************************************************/

            txt_stat_negativo_spdef_2.Text = CalculaStatus.calcular_sp_def(
                -1,
                pokemon_2.SpDefense,
                (int)nmc_vlr_iv_spdef_2.Value,
                (int)nmc_vlr_ev_spdef_2.Value,
                (int)nmc_vlr_level_2.Value,
                (int)nmc_vlr_estagio_spdef_2.Value,
                chk_sandstorm_2.Checked).ToString();

            txt_stat_neutro_spdef_2.Text = CalculaStatus.calcular_sp_def(
                0,
                pokemon_2.SpDefense,
                (int)nmc_vlr_iv_spdef_2.Value,
                (int)nmc_vlr_ev_spdef_2.Value,
                (int)nmc_vlr_level_2.Value,
                (int)nmc_vlr_estagio_spdef_2.Value,
                chk_sandstorm_2.Checked).ToString();

            txt_stat_positivo_spdef_2.Text = CalculaStatus.calcular_sp_def(
                1,
                pokemon_2.SpDefense,
                (int)nmc_vlr_iv_spdef_2.Value,
                (int)nmc_vlr_ev_spdef_2.Value,
                (int)nmc_vlr_level_2.Value,
                (int)nmc_vlr_estagio_spdef_2.Value,
                chk_sandstorm_2.Checked).ToString();
        }
        private void calcular_DEFESA(Pokemon pokemon_1, Pokemon pokemon_2)
        {
            txt_stat_negativo_def_1.Text = CalculaStatus.calcular_defesa(
                -1,
                pokemon_1.Defense,
                (int)nmc_vlr_iv_def_1.Value,
                (int)nmc_vlr_ev_def_1.Value,
                (int)nmc_vlr_level_1.Value,
                (int)nmc_vlr_estagio_def_1.Value,
                chk_boom_1.Checked).ToString();

            txt_stat_neutro_def_1.Text = CalculaStatus.calcular_defesa(
                0,
                pokemon_1.Defense,
                (int)nmc_vlr_iv_def_1.Value,
                (int)nmc_vlr_ev_def_1.Value,
                (int)nmc_vlr_level_1.Value,
                (int)nmc_vlr_estagio_def_1.Value,
                chk_boom_1.Checked).ToString();

            txt_stat_positivo_def_1.Text = CalculaStatus.calcular_defesa(
                1,
                pokemon_1.Defense,
                (int)nmc_vlr_iv_def_1.Value,
                (int)nmc_vlr_ev_def_1.Value,
                (int)nmc_vlr_level_1.Value,
                (int)nmc_vlr_estagio_def_1.Value,
                chk_boom_1.Checked).ToString();

            /***************************************************************/

            txt_stat_negativo_def_2.Text = CalculaStatus.calcular_defesa(
                -1,
                pokemon_2.Defense,
                (int)nmc_vlr_iv_def_2.Value,
                (int)nmc_vlr_ev_def_2.Value,
                (int)nmc_vlr_level_2.Value,
                (int)nmc_vlr_estagio_def_2.Value,
                chk_boom_2.Checked).ToString();

            txt_stat_neutro_def_2.Text = CalculaStatus.calcular_defesa(
                0,
                pokemon_2.Defense,
                (int)nmc_vlr_iv_def_2.Value,
                (int)nmc_vlr_ev_def_2.Value,
                (int)nmc_vlr_level_2.Value,
                (int)nmc_vlr_estagio_def_2.Value,
                chk_boom_2.Checked).ToString();

            txt_stat_positivo_def_2.Text = CalculaStatus.calcular_defesa(
                1,
                pokemon_2.Defense,
                (int)nmc_vlr_iv_def_2.Value,
                (int)nmc_vlr_ev_def_2.Value,
                (int)nmc_vlr_level_2.Value,
                (int)nmc_vlr_estagio_def_2.Value,
                chk_boom_2.Checked).ToString();
        }
        private void btn_calcular_dano_Click(object sender, System.EventArgs e)
        {
            Pokemon pokemon_attacker = (Pokemon)cbo_pokemon_attacker.SelectedValue;
            Pokemon pokemon_defender = (Pokemon)cbo_pokemon_defender.SelectedValue;

            int nivel_attacker = 0;

            if (cbo_nature_attacker.SelectedIndex == 0)
            {
                nivel_attacker = -1;
            }
            else if (cbo_nature_attacker.SelectedIndex == 2)
            {
                nivel_attacker = 1;
            }

            decimal boost_item_atk = 0m;

            if (chk_choice_item_attacker.Checked)
            {
                boost_item_atk = 0.5m;
            }
            else if (chk_life_orb_attacker.Checked)
            {
                boost_item_atk = 0.3m;
            }

            decimal nmr_attack = CalculaStatus.calcular_ataque(
                nivel_attacker,
                cbo_tpo_ataque.SelectedIndex == 0 ? pokemon_attacker.Attack : pokemon_attacker.SpAttack,
                (int)nmc_iv_attacker.Value,
                (int)nmc_ev_attacker.Value,
                (int)nmc_vlr_lvl_attacker.Value,
                (int)nmc_estagio_attacker.Value,
                boost_item_atk);

            int nivel_defender = 0;

            if (cbo_nature_defender.SelectedIndex == 0)
            {
                nivel_defender = -1;
            }
            else if (cbo_nature_defender.SelectedIndex == 2)
            {
                nivel_defender = 1;
            }

            decimal nmr_defense = CalculaStatus.calcular_defesa(
                nivel_defender,
                cbo_tpo_ataque.SelectedIndex == 0 ? pokemon_defender.Defense : pokemon_defender.SpDefense,
                (int)nmc_iv_defesa_defender.Value,
                (int)nmc_ev_defesa_defender.Value,
                (int)nmc_level_defender.Value,
                (int)nmc_estagio_defender.Value,
                false);

            decimal dano_minimo = 0;
            decimal dano_maximo = 0;

            CalculaDano.calcular_dano(ref dano_minimo, ref dano_maximo,
                                      (int)nmc_vlr_lvl_attacker.Value,
                                      (int)nmr_attack,
                                      (int)nmr_defense,
                                      (int)nmc_base_power_attacker.Value,
                                      chk_stab.Checked,
                                      Convert.ToDecimal(cbo_type_effectiveness.SelectedItem),
                                      chk_critical_hit.Checked,
                                      false);

            int hp = (int)CalculaStatus.calcular_hp(pokemon_defender.HP, (int)nmc_iv_hp_defender.Value, (int)nmc_ev_hp_defender.Value, (int)nmc_level_defender.Value);

            lbl_damage.Text =
                String.Format("Dano: {0} ~ {1} {2}",
                              (int)dano_minimo,
                              (int)dano_maximo,
                              (int)dano_minimo > hp ? "Mata em 1 golpe só!" : "Precisa de mais de 1 golpe!");

            lbl_hp_defensor.Text = String.Format("HP do defensor: {0}", hp);
        }
        private void calcular_SPEED(Pokemon pokemon_1, Pokemon pokemon_2)
        {
            txt_stat_negativo_spd_1.Text = CalculaStatus.calcular_speed(
                -1,
                pokemon_1.Speed,
                (int)nmc_vlr_iv_spd_1.Value,
                (int)nmc_vlr_ev_spd_1.Value,
                (int)nmc_vlr_level_1.Value,
                (int)nmc_vlr_estagio_spd_1.Value,
                chk_paralysis_1.Checked,
                chk_choice_scarf_1.Checked).ToString();

            txt_stat_neutro_spd_1.Text = CalculaStatus.calcular_speed(
                0,
                pokemon_1.Speed,
                (int)nmc_vlr_iv_spd_1.Value,
                (int)nmc_vlr_ev_spd_1.Value,
                (int)nmc_vlr_level_1.Value,
                (int)nmc_vlr_estagio_spd_1.Value,
                chk_paralysis_1.Checked,
                chk_choice_scarf_1.Checked).ToString();

            txt_stat_positivo_spd_1.Text = CalculaStatus.calcular_speed(
                1,
                pokemon_1.Speed,
                (int)nmc_vlr_iv_spd_1.Value,
                (int)nmc_vlr_ev_spd_1.Value,
                (int)nmc_vlr_level_1.Value,
                (int)nmc_vlr_estagio_spd_1.Value,
                chk_paralysis_1.Checked,
                chk_choice_scarf_1.Checked).ToString();

            /***********************************************************/

            txt_stat_negativo_spd_2.Text = CalculaStatus.calcular_speed(
                -1,
                pokemon_2.Speed,
                (int)nmc_vlr_iv_spd_2.Value,
                (int)nmc_vlr_ev_spd_2.Value,
                (int)nmc_vlr_level_2.Value,
                (int)nmc_vlr_estagio_spd_2.Value,
                chk_paralysis_2.Checked,
                chk_choice_scarf_2.Checked).ToString();

            txt_stat_neutro_spd_2.Text = CalculaStatus.calcular_speed(
                0,
                pokemon_2.Speed,
                (int)nmc_vlr_iv_spd_2.Value,
                (int)nmc_vlr_ev_spd_2.Value,
                (int)nmc_vlr_level_2.Value,
                (int)nmc_vlr_estagio_spd_2.Value,
                chk_paralysis_2.Checked,
                chk_choice_scarf_2.Checked).ToString();

            txt_stat_positivo_spd_2.Text = CalculaStatus.calcular_speed(
                1,
                pokemon_2.Speed,
                (int)nmc_vlr_iv_spd_2.Value,
                (int)nmc_vlr_ev_spd_2.Value,
                (int)nmc_vlr_level_2.Value,
                (int)nmc_vlr_estagio_spd_2.Value,
                chk_paralysis_2.Checked,
                chk_choice_scarf_2.Checked).ToString();
        }
        private void calcular_ESPECIAL_ATAQUE(Pokemon pokemon_1, Pokemon pokemon_2)
        {
            decimal boost_item_1 = 0m;

            if (chk_choice_specs_1.Checked)
            {
                boost_item_1 = 0.5m;
            }
            else if (chk_life_orb_1.Checked)
            {
                boost_item_1 = 0.3m;
            }
            else if (chk_item_20_1.Checked)
            {
                boost_item_1 = 0.2m;
            }

            txt_stat_negativo_spatk_1.Text = CalculaStatus.calcular_ataque(
                -1,
                pokemon_1.SpAttack,
                (int)nmc_vlr_iv_spatk_1.Value,
                (int)nmc_vlr_ev_spatk_1.Value,
                (int)nmc_vlr_level_1.Value,
                (int)nmc_vlr_estagio_spatk_1.Value,
                boost_item_1).ToString();

            txt_stat_neutro_spatk_1.Text = CalculaStatus.calcular_ataque(
                0,
                pokemon_1.SpAttack,
                (int)nmc_vlr_iv_spatk_1.Value,
                (int)nmc_vlr_ev_spatk_1.Value,
                (int)nmc_vlr_level_1.Value,
                (int)nmc_vlr_estagio_spatk_1.Value,
                boost_item_1).ToString();

            txt_stat_positivo_spatk_1.Text = CalculaStatus.calcular_ataque(
                1,
                pokemon_1.SpAttack,
                (int)nmc_vlr_iv_spatk_1.Value,
                (int)nmc_vlr_ev_spatk_1.Value,
                (int)nmc_vlr_level_1.Value,
                (int)nmc_vlr_estagio_spatk_1.Value,
                boost_item_1).ToString();

            /************************************************************/

            decimal boost_item_2 = 0m;

            if (chk_choice_specs_2.Checked)
            {
                boost_item_2 = 0.5m;
            }
            else if (chk_life_orb_2.Checked)
            {
                boost_item_2 = 0.3m;
            }
            else if (chk_item_20_2.Checked)
            {
                boost_item_2 = 0.2m;
            }

            txt_stat_negativo_spatk_2.Text = CalculaStatus.calcular_ataque(
                -1,
                pokemon_2.SpAttack,
                (int)nmc_vlr_iv_spatk_2.Value,
                (int)nmc_vlr_ev_spatk_2.Value,
                (int)nmc_vlr_level_2.Value,
                (int)nmc_vlr_estagio_spatk_2.Value,
                boost_item_2).ToString();

            txt_stat_neutro_spatk_2.Text = CalculaStatus.calcular_ataque(
                0,
                pokemon_2.SpAttack,
                (int)nmc_vlr_iv_spatk_2.Value,
                (int)nmc_vlr_ev_spatk_2.Value,
                (int)nmc_vlr_level_2.Value,
                (int)nmc_vlr_estagio_spatk_2.Value,
                boost_item_2).ToString();

            txt_stat_positivo_spatk_2.Text = CalculaStatus.calcular_ataque(
                1,
                pokemon_2.SpAttack,
                (int)nmc_vlr_iv_spatk_2.Value,
                (int)nmc_vlr_ev_spatk_2.Value,
                (int)nmc_vlr_level_2.Value,
                (int)nmc_vlr_estagio_spatk_2.Value,
                boost_item_2).ToString();
        }