1

首先线程名称可能有点奇怪,但我会尽力解释我想在这里做什么,以便您可以建议我一个好的线程名称。

我想创建一个函数来通过检查他的经验来返回员工级别

如果经验是 0~50 他是 1 级 如果经验是 50~150 他是 2 级……以此类推直到 100 级

我在想的是创建一个 const int 来保存每个级别所需的所有 exp

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

由于该级别所需的 xp 公式x似乎是25*(x²+x)

您可以使用反函数:

public int GetLevel(int xp)
{
    return (int)(Math.Sqrt(1 + 4 * xp / 25) - 1) / 2;
}
于 2012-11-20T17:23:51.943 回答
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 回答