好的,现在我的问题是无论我做什么,它只会将信息显示为1级而不是我尝试的指定级别。代码如下
function XPlevel(XP, level) {
if((XP >= 0 && XP < 300) && level === 1) {
level = 1;
} else if ((XP >= 300 && XP <900) || level === 2) {
level = 2;
} else if ((XP >= 900 && XP <2700) || level ===3) {
level = 3;
} else if ((XP >= 2700 && XP < 6500) || level === 4){
level = 4;
} else if ((XP >= 6500 & XP < 14000) || level === 5){
level = 5;
} else if ((XP >= 14000 && XP < 23000) || level === 6) {
level = 6;
} else if ((XP >= 23000 && XP < 34000) || level === 7) {
level = 7;
} else if ((XP >= 34000 && XP < 48000) || level === 8) {
level = 8;
} else if ((XP >= 48000 && XP < 64000) || level === 9) {
level = 9;
} else if ((XP >= 64000 && XP < 85000) || level === 10) {
level = 10;
} else if ((XP >= 85000 && XP < 100000) || level === 11) {
level = 11;
} else if ((XP >= 100000 && XP < 120000) || level === 12) {
level = 12;
} else if ((XP >= 120000 && XP < 140000) || level === 13) {
level = 13;
} else if ((XP >= 140000 && XP < 165000) || level === 14) {
level = 14;
} else if ((XP >= 165000 && XP < 195000) || level === 15) {
level = 15;
} else if ((XP >= 195000 && XP < 225000) || level === 16) {
level = 16;
} else if ((XP >= 225000 && XP < 265000) || level === 17) {
level = 17;
} else if ((XP >= 265000 && XP < 305000) || level === 18) {
level = 18;
} else if ((XP >= 305000 && XP < 355000) || level === 19) {
level = 19;
} else {
level = 20;
}
return level;
}
XPlevel(XP, level);
因此,当我插入一个等级为5的角色时,它会让我回到1级。
有什么想法吗?
答案 0 :(得分:3)
首先,永远不要这样的代码,永远不要有多个if-else
语句,这些语句可以使用数行或哈希表在几行中进行语义相似的检查。
您的功能可以像这样重写:
var xp_required = [0, 300, 900, 2700, 6500]; // ...etc, you fill this table with the XP required to be at Level = index + 1 (indices start at 0 in Arrays).
// XP for level: 1 2 3 4 5 ...
function getLevel(xp) {
for(var level = xp_required.length - 1; level >= 0; --level) {
if(xp >= xp_required[level] {
return level + 1; // The +1 is needed because Array's index starts at 0 but levels start at 1
}
}
console.log("XP value can not be negative. The given value was: " + xp);
return 0;
}
for
循环从最高级别开始,检查XP
是否足以让玩家被视为该级别。如果不是,则表示玩家实际上是较低级别,因此递减要检查的级别值(直到我们达到索引0,这意味着级别1)。这意味着一旦我们达到XP足够的第一级,就意味着它确实是正确的级别。
作为一个注释,这可以通过二进制搜索而不是线性搜索来改进,但我认为通常不会调用此函数,因此O(max_level)
复杂度足够好。
另外,为什么level
都是函数的输入和输出值?
答案 1 :(得分:0)
(除了XP的东西......)你基本上做if level == 1 return 1
这是荒谬的
如果您已经知道level
而不是逻辑,则无需检查级别。
最简单的&amp; 从XP数组中获取level
的最快方法:
function getLevel(XP) {
var LV = 0;
[0, 300, 900, 2700, 6500, 14000].some(function(v, i) {
LV = i; // Level = index
return v > XP; // We have the LV value! Break out of loop (if condition is met)!
});
return LV;
}
使用
var level = getLevel(2699); // 3
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/some