我试着根据球员的经验来计算球员的水平。
这就是我在文本中的内容:从0级开始,从0级XP到1级,您需要50 XP。一次杀戮就能得到10次XP。所以,5 kills = 50 XP =级别1。现在,第2级应该比最后一级多要求50 XP。因此,第2级总共需要150 XP。等级1: 50 XP (5次死亡总数,5次死亡从0级到1级)。等级2: 150 XP(15次死亡,10次死亡,从1级到2级)。等级3: 300 XP(30人死亡,15人死亡,从2级到3级)。
到目前为止,我所得到的只是:
math.Round( xp / 50 )这是50 xp每级,这不是我想要的,但我真的不知道从这里到哪里。
简单地说,我希望每个级别比上一个级别多需要50个XP,并且我需要从xp变量中获得这个级别。
发布于 2013-12-05 01:43:21
快速的数学计算表明,达到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))https://stackoverflow.com/questions/20389576
复制相似问题