根据经验计算水平



我正在尝试为游戏制作一个JavaScript计算器。就像大多数游戏一样,在那里你可以获得经验,有关卡系统。

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

现在我已经艰难地做到了这一点。

if(experience < level2Experience){
level = 1;
} else if(experience >= level2Experience && experience < level3Experience){
level = 2;
} else if(experience >= level3Experience && experience < level4Experience){
level = 3;
}

等等。

有没有一种更简洁、更不费力的方法来实现同样的目的?

// levels:
// level 1 => 0 points to 9
// level 2 => 10 points to 19
// ....
var levels = [0,10, 20, 30];
var level = 0;
var experience = 22;
levels.forEach((v, i) => {
if(experience >= v) {
level = i+1;
}
});
console.log(level);

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

1) 如果你只是想让代码看起来更好,你可以写一个类似于的助手

function isBetween(n, lower, upper) { return n >= lower && n <= upper };

2) 如果levelxExperience是一个有限的集合,而你不想优化它,你可以将所有levelxExperience存储在这样的数组中(其中index指的是级别)

var expArray = [level2Experience, level3Experience];

然后你可以通过简单地从后面迭代来获得级别,就像一样

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

我认为,当你在计算水平时,基于经验,你脑海中会有某种公式。这个经验公式将基于玩家执行的任务类型来获得经验。随着玩家级别的提高,从一个级别发展到另一个级别所需的经验量会发生变化,可能有3种可能的实现方式。其中的第1和第2个可以使用某种数学函数来实现自动化。例如:

1)从一个层次发展到另一个层次所需的经验随着一个人的提升而保持不变从某种意义上说,这意味着如果一个人有100 xp,他就是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;

3)如果有不同的随机经验值来决定水平然后,您可以执行一个简单的切换案例,中断或实现一个for循环,以将数据与元素数组相匹配。

最新更新