スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

FDの計算式構築中・・・

ありがたい事にパラスレでFD倍率の検証した人からメールでエクセルファイルが送られてきたのでFD倍率の計算式を構築中。

どうやらFD倍率1.2くらい(パラスレの人は1.22くらいにしてた)で計算式が変更されるっぽい。
FD倍率1.2以下は一次曲線、1.2以上は二次曲線ってな具合。

x=fd
y=enemyLv
rate=(cy+d)x+1
って感じでcとdの値が分かれば直線部分は求められるかなーと思ってxの係数部分(cy+d)のグラフを作ってみたら、
これまた敵のレベルが40くらいで計算式が変わってるように見えたのでそこも区切って色々ごちゃごちゃやってみてた。

FD倍率1.2以下、敵のレベル40以下の場合、
 (((56 - enemyLv) * 26) / 1000000) * fd + 1
ってな感じになったところで今日は終了。
マジックナンバーすぎてもうなんかどうなのよ・・・って感じ。

/// <summary>
/// 計算式変更の境界線
/// </summary>
private const float FD_BORDER = 1.2f;

/// <summary>
/// FD倍率の限界値
/// </summary>
private const float FD_MAX = 2.0f;

/// <summary>
/// 敵のLv、FD値からFD倍率を取得する。
/// </summary>
/// <param name="enemyLv">敵のLv</param>
/// <param name="finishDamage">FD値</param>
/// <returns>FD倍率</returns>
public float GetFinishDamageRate(int enemyLv, int finishDamage)
{
    // 一次曲線のFD倍率を求める。
    float finishDamageRate = this.__GetFinishDamageRate_First(enemyLv, finishDamage);

    // FD倍率が1.2倍くらいから二次曲線になってるっぽい?
    if (finishDamageRate > FD_BORDER)
    {
        // 二次曲線のFD倍率を求める。
        finishDamageRate = this.__GetFinishDamageRate_Second(enemyLv, finishDamage, finishDamageRate);

        // 上限を2.0倍に。
        if (finishDamageRate > FD_MAX)
        {
            finishDamageRate = FD_MAX;
        }
    }

    return finishDamageRate;
}

/// <summary>
/// 敵のLv、FD値から一次曲線でのFD倍率を求める。
/// </summary>
/// <param name="enemyLv">敵のLv</param>
/// <param name="finishDamage">FD値</param>
/// <returns>一次曲線でのFD倍率</returns>
private float __GetFinishDamageRate_First(int enemyLv, int finishDamage)
{
    float finishDamageRate = 1.0f;

    if (finishDamage != 0)
    {
        // 敵のLvが40を境に計算式が変更されてる?
        if (enemyLv < 40)
        {
            // 計算1-1
            // 係数を求める。
            float coefficient = ((56 - enemyLv) * 26) / 1000000;
            finishDamageRate += (coefficient * finishDamage);
        }
        else
        {
            // 計算1-2
        }
    }

    return finishDamageRate;
}

/// <summary>
/// 敵のLv、FD値、一次曲線でのFD倍率から二次曲線でのFD倍率を求める。
/// </summary>
/// <param name="enemyLv">敵のLv</param>
/// <param name="finishDamage">FD値</param>
/// <param name="finishDamageRate_First">一次曲線でのFD倍率</param>
/// <returns>二次曲線でのFD倍率</returns>
private float __GetFinishDamageRate_Second(int enemyLv, int finishDamage, float finishDamageRate_First)
{
    float finishDamageRate = finishDamageRate_First;

    // 計算2

    return finishDamageRate;
}
スポンサーサイト

コメントの投稿

非公開コメント

RSSリンクの表示
リンク
最新コメント
最新トラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。