我正在尝试根据玩家的经验来计算玩家的等级。
这是我的文字内容: 从 0 级开始,0 XP 要达到 1 级,您需要 50 XP。 击杀 1 次可获得 10 XP。 因此,5 次击杀 = 50 XP = 1 级。 现在,2 级应该比上一级需要多 50 XP。 因此,2 级总共需要 150 XP。 1 级:50 XP(总共 5 次击杀,从 0 级到 1 级需要 5 次击杀)。 2 级:150 XP(总共 15 次击杀,从 1 级到 2 级需要 10 次击杀)。 3 级:300 XP(总共 30 次击杀,从 2 级到 3 级还需要 15 次击杀)。
到目前为止,我得到的只是这个:
math.Round( xp / 50 )
每级 50 xp,这不是我想要的;但我真的不知道从这里该去哪里。
简单地说,我希望每个级别比上一个级别需要多 50 XP,并且我需要从 XP 变量中获取级别。
快速数学计算表明,达到
lv
级别的经验点将是:
(1 + 2 + 3 + ... + lv) * 50
等于:
lv * (lv + 1) / 2 * 50
所以问题就变成了找到符合条件的最大非负整数
lv
:
lv * (lv + 1) / 2 * 50 <= xp
这就是需要求解的公式。数学答案是:
lv <= (math.sqrt(xp * 4 / 25 + 1) - 1) / 2
既然你正在寻找一个非负整数,用Lua的话来说,那就是:
local lv = math.floor((math.sqrt(xp * 4 / 25 + 1) - 1) / 2)
您可以将其包装到一个函数中并对其进行快速测试,如下所示:
function xp_to_lv(xp)
return math.floor((math.sqrt(xp * 4 / 25 + 1) - 1) / 2)
end
assert(0 == xp_to_lv(0))
assert(0 == xp_to_lv(49))
assert(1 == xp_to_lv(50))
assert(2 == xp_to_lv(260))
assert(3 == xp_to_lv(310))
谢谢你,这正是我所需要的史诗!