我需要使用纯 JavaScript 将经验值转换为按固定费率计算的游戏小时数。
例如:
一名玩家拥有 1,129,518 经验值。
每小时获得的经验值取决于已有的 XP 数量。它们会被安排成这样:
0 XP 以上:8,000 XP/小时
超过 2,107 XP:20,000 XP/小时
超过 101,333 XP:45,000 XP/小时
1,210,421 XP 以上:68,500 XP/小时
超过 13,034,431 XP:75,000 XP/小时
我正在努力寻找一种方法,使用这些经验值将给定量的经验值转换为玩的小时数,至少使用稍微优雅的 JavaScript。
我最终得到了一堆困惑的 if/else 语句,最终由于数学错误而失败。
有数学奇才可以帮助我吗?谢谢。
代码示例:我将从这里开始
if(xp === 0){
return 0;
}else if( 2107 >= xp > 0){
const result = (xp/8000).toFixed(1);
return result;
}else if(101333 >= xp > 2107){
const result = ((2107/8000) + ((xp-2107)/20000)).toFixed(1);
return result;
}else if(1210421 >= xp > 101333){
...
}
如您所见,如果有很多不同的层级,它很快就会失控。
最佳答案
首先,您应该这样编写 if 语句:
if( 2107 >= xp && xp > 0){
...
}
接下来,尝试将 XP 视为 XP 桶,每个桶具有不同的值(value)/价格。从最有值(value)的存储桶到最不有值(value)的存储桶,计算每个存储桶的小时数,并减去用于计算这些小时数的 XP 量。
您可以在 while 循环中执行此操作:
let hours = 0;
while(XP > 0)
{
// figure out bucket you are in, your if statements are fine for that.
let value = 0;
let lowerBoundary = 0;
if( 101333 >= xp && xp > 2107){
value = 20000;
lowerBoundary = 2107;
// you need lower boundary to figure out how many XP you used in this bucket.
}
// else if...
const usedInBucket = XP - lowerBoundary;
hours += usedInBucket / value; // simply calculate hours needed
XP -= usedInBucket;
}
关于javascript - 将获得的积分转换为游玩时间(数学相关),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53141039/