Javascript 根据经验计算水平

Javascript 根据经验计算水平,javascript,math,Javascript,Math,我正在尝试为一个游戏制作一个JavaScript计算器。像大多数游戏一样,你在游戏中获得经验,有等级系统 因此,对于给定的经验量,我希望计算水平 现在我已经用艰难的方式实现了这一点 if(experience < level2Experience){ level = 1; } else if(experience >= level2Experience && experience < level3Experience){ level = 2; } e

我正在尝试为一个游戏制作一个JavaScript计算器。像大多数游戏一样,你在游戏中获得经验,有等级系统

因此,对于给定的经验量,我希望计算水平

现在我已经用艰难的方式实现了这一点

if(experience < level2Experience){
   level = 1;
} else if(experience >= level2Experience && experience < level3Experience){
   level = 2;
} else if(experience >= level3Experience && experience < level4Experience){
   level = 3;
}
if(经验=2级经验和经验<3级经验){
级别=2;
}否则如果(经验>=3级经验和经验<4级经验){
级别=3;
}
等等


有没有更简洁、更省力的方法来达到同样的效果?

有很多方法可以做到这一点。这里有几个建议

1) 如果您只是想让代码看起来更好,您可以编写一个类似这样的帮助程序

function isBetween(n, lower, upper) { return n >= lower && n <= upper };
然后,您可以通过简单地从后面像这样迭代来获得级别

var i = expArray.length - 1;
var level;
while ( i >=0 ) {
    if (experience > expArray[i]) {
         level = i;
         break;
    }
    i--;
}

// console.log(level);
//级别:
//1级=>0分到9分
//2级=>10分到19分
// ....
风险值水平=[0,10,20,30];
风险值水平=0;
风险值经验=22;
级别。forEach((v,i)=>{
如果(经验>=v){
级别=i+1;
}
});

控制台日志(级别)我在想,当你在计算水平时,基于经验,你脑子里有某种公式。 经验公式将基于玩家完成的任务类型,从而获得经验。 随着玩家级别的提高,从一个级别增长到另一个级别所需的经验量会发生怎样的变化,这取决于这三种可能的实现方式。第一个和第二个可以使用某种数学函数实现自动化。 例如:

1)一个人从一个层次发展到另一个层次所需的经验随着层次的提高而保持不变。 这在某种意义上意味着,如果一个人有100经验,他是1级,如果他有200经验,那么他是2级,依此类推。 这可以转化为一个数学公式,其中级别仅由一个函数定义,其中

level = experience/100
2)从一个级别增长到另一个级别所需的经验量随着某些变量的变化而变化。 例如,如果从0级到1级所需的经验是100,但从1级到2级所需的经验是1000。然后我们可以设计一个数学公式来计算级数之和,并看到一个级别为1的人至少有100或更多的经验,并且经验少于1000 xp。 这可以存储在函数中,如下所示:

var lower_xp_limit = 0
, upper_xp_limit = 0
, level_count = 0;

while(player_xp < upper_xp_limit)
{
    lower_xp_limit = 10^level_count*1;
    upper_xp_limit = 10^(level_count+2)*1;
    level_count++;
}

return level_count-1;
var下限=0
,上限=0
,水平计数=0;
while(玩家经验<上限)
{
下限=10^级计数*1;
上限=10^(级别计数+2)*1;
级别_计数++;
}
返回级_计数-1;
3)如果有不同的随机经验值确定水平。 然后,您可以执行一个简单的切换案例,该案例中断或实现for循环,以将数据与元素数组相匹配

var lower_xp_limit = 0
, upper_xp_limit = 0
, level_count = 0;

while(player_xp < upper_xp_limit)
{
    lower_xp_limit = 10^level_count*1;
    upper_xp_limit = 10^(level_count+2)*1;
    level_count++;
}

return level_count-1;