/// <summary>
    ///メイン計算式
    /// </summary>
    static public int BattleDamageCalculate(IMonsterData attackMonster, IMonsterData defenseMonster, ISkillData attackSkill)
    {
        //乱数の値
        float[] randomValue = new float[16] {
            0.85f, 0.86f, 0.87f, 0.88f, 0.89f,
            0.90f, 0.91f, 0.92f, 0.93f, 0.94f, 0.95f, 0.96f, 0.97f, 0.98f, 0.99f,
            1.00f,
        };

        //乱数
        float randomResult = randomValue[AllSceneManager.GetInstance().GetRandom().Next(0, 16)];

        //モンスターのタイプと技のタイプの一致か否か
        float typeMatch = 1;

        if (attackMonster.tribesData_.firstElement_.state_ == attackSkill.elementType_.state_ ||
            attackMonster.tribesData_.secondElement_.state_ == attackSkill.elementType_.state_)
        {
            typeMatch = 1.5f;
        }

        //敵モンスターと技のタイプ相性
        float typeSimillar = defenseMonster.ElementSimillarChecker(attackSkill.elementType_);

        //補正値の初期値 4096
        //技の最終威力
        int realSkillPower = (int)(attackSkill.effectValue_ * (4096 / 4096));

        //物理か特殊か
        //EffectAttackTypeState ea = attackSkill.effectValueType_.GetEffectAttackTypeState();

        //モンスターの最終攻撃力
        int realMonsterAttack = 0;
        {
            //if (ea.state_ == EffectAttackType.Normal) {
            //	realMonsterAttack = (int)(attackMonster.RealAttack() * attackMonster.battleData_.RealAttackParameterRank() * (4096 / 4096));
            //}
            realMonsterAttack = (int)(attackMonster.RealAttack() * attackMonster.battleData_.RealAttackParameterRank() * (4096 / 4096));
        }

        //敵モンスターの最終防御力
        int realMonsterDefense = 0;
        {
            //if (ea.state_ == EffectAttackType.Normal) {
            //	realMonsterDefense = (int)(defenseMonster.RealDefense() * defenseMonster.battleData_.RealDefenseParameterRank() * (4096 / 4096));
            //}
            realMonsterDefense = (int)(defenseMonster.RealDefense() * defenseMonster.battleData_.RealDefenseParameterRank() * (4096 / 4096));
        }

        //(((レベル×2/5+2)×威力×A/D)/50+2)
        //最終ダメージ
        int realDamage = (int)((((attackMonster.level_ * 2 / 5 + 2) * realSkillPower * realMonsterAttack / realMonsterDefense) / 50)
                               * randomResult * typeMatch * typeSimillar);

        return(realDamage);
    }
    /// <summary>
    ///乱数平均、急所なし、計算式
    /// </summary>
    static public int TestDamageCalculate(IMonsterData attackMonster, IMonsterData defenseMonster, ISkillData attackSkill)
    {
        //乱数
        float randomResult = 9.5f;

        //モンスターのタイプと技のタイプの一致か否か
        float typeMatch = 1;

        if (attackMonster.tribesData_.firstElement_.state_ == attackSkill.elementType_.state_ ||
            attackMonster.tribesData_.secondElement_.state_ == attackSkill.elementType_.state_)
        {
            typeMatch = 1.5f;
        }

        //敵モンスターと技のタイプ相性
        float typeSimillar = defenseMonster.ElementSimillarChecker(attackSkill.elementType_);

        //補正値の初期値 4096
        //技の最終威力
        int realSkillPower = (int)(attackSkill.effectValue_ * (4096 / 4096));

        //物理か特殊か
        //EffectAttackTypeState ea = attackSkill.effectValueType_.GetEffectAttackTypeState();

        //モンスターの最終攻撃力
        int realMonsterAttack = 0;
        {
            //if (ea.state_ == EffectAttackType.Normal) {
            //	realMonsterAttack = (int)(attackMonster.RealAttack() * attackMonster.battleData_.RealAttackParameterRank() * (4096 / 4096));
            //}
            realMonsterAttack = (int)(attackMonster.RealAttack() * attackMonster.battleData_.RealAttackParameterRank() * (4096 / 4096));
        }

        //敵モンスターの最終防御力
        int realMonsterDefense = 0;
        {
            //if (ea.state_ == EffectAttackType.Normal) {
            //	realMonsterDefense = (int)(defenseMonster.RealDefense() * defenseMonster.battleData_.RealDefenseParameterRank() * (4096 / 4096));
            //}
            realMonsterDefense = (int)(defenseMonster.RealDefense() * defenseMonster.battleData_.RealDefenseParameterRank() * (4096 / 4096));
        }

        //(((レベル×2/5+2)×威力×A/D)/50+2)
        //最終ダメージ
        int realDamage = (int)((((attackMonster.level_ * 2 / 5 + 2) * realSkillPower * realMonsterAttack / realMonsterDefense) / 50)
                               * randomResult * typeMatch * typeSimillar);

        return(realDamage);
    }