Lua等级公式

问题描述 投票:0回答:2

我正在尝试根据玩家的经验来计算玩家的等级。

这是我的文字内容: 从 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 变量中获取级别。

math lua formula
2个回答
1
投票

快速数学计算表明,达到

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))

0
投票

谢谢你,这正是我所需要的史诗!

© www.soinside.com 2019 - 2024. All rights reserved.