Lua级别公式

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

以下是我的文本内容: 从级别0开始,经验值为0。 要达到一级,您需要50点经验值。 击杀一名敌人可获得10点经验值。 因此,5次击杀= 50点经验值=一级。 现在,二级应该比上一级多50点经验值。 因此,二级需要总共150点经验值。 一级:50点经验值(共5次击杀,从0级到1级需要5次击杀)。 二级:150点经验值(共15次击杀,从1级到2级需要10次击杀)。 三级:300点经验值(共30次击杀,从2级到3级需要15次击杀)。

到目前为止,我得到了以下代码:

math.Round(xp / 50

这是每级50点经验,这不是我想要的;但我真的不知道该怎么做了。

简单来说,我希望每个级别需要比上一个级别多50点经验值,并且我需要从一个xp变量中获取级别。

点赞
用户1009479
用户1009479

通过快速数学计算,达到等级 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))
2013-12-05 01:43:21