1

最初のスレッド名は少し変かもしれませんが、私がここでやりたいことを説明するために最善を尽くしますので、良いスレッド名を提案してください.

経験値を確認して社員レベルを返す関数を作りたい

経験値が0~50ならレベル1 経験値が50~150ならレベル2 ...というようにレベル100まで

私が考えているのは、各レベルに必要なすべての経験値を保持する const int を作成することです

public const int Level1 = 50,
                 Level2 = 150...;

私が欲しいものを返す関数を作る方法はありますか?1000++行を使わずに?!.

私の質問をスパムと見なさないでください。私は非常に混乱しているだけです。必要に応じて、私の考えを明確にするために最善を尽くします。

4

3 に答える 3

2
int level = Math.Min(10, experience / 10);

それでいいですか?

0-10->1および11-20->2などにしたい場合は、次のように変更します。

int level = Math.Min(10, (experience + 9) / 10);

経験値の増加にパターンがまったくない場合、または非常にあいまいなパターンがある場合は、次のように使用できます。

var level = 1;

var levelRequirements = new int[] {10, 20, 50, 150, 300};
for (int i = 0; i < levelRequirements.Length; i++)
{
    if (levelRequirements[i] > currentExperience)
        break;
    level++;
}

そして今、私の最後の更新のために:

var level = 0;

var levelRequirement = 0;
var levelRequirementAddition = 50;

while (currentExperience >= levelRequirement)
{
    levelRequirement += levelRequirementAddition;
    levelRequirementAddition += 50;
    level++;
}
于 2012-11-20T17:24:31.047 に答える
1
public int ReturLevel(int experience)
{
    return (experience-1)/10 + 1;
}

「経験が1〜9の場合」を意味する場合は、-1インを削除できます(experience-1)

「経験が11〜20ならレベル2」という意味ならそのままにしておきます

編集:

機能を平準化するための経験がどのパターンにも従わない場合は、「はい」よりも、それぞれについて個別のケースを作成する必要があります。

if(experience > 20)
    return level 3;
else if(experience > 10)
    return level 2;
else
    return level 1;

さまざまなデザインパターンがどのように影響を与える可能性があり、これらのさまざまなケースを追加しましたが、パターンがない場合は追加する必要があります。

于 2012-11-20T17:24:39.123 に答える
1

レベルに必要なXPの計算式x25*(x²+x)

逆関数を使用できます:

public int GetLevel(int xp)
{
    return (int)(Math.Sqrt(1 + 4 * xp / 25) - 1) / 2;
}
于 2012-11-20T17:23:51.943 に答える