首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lua能级公式

Lua能级公式
EN

Stack Overflow用户
提问于 2013-12-05 01:19:06
回答 1查看 1.1K关注 0票数 2

我试着根据球员的经验来计算球员的水平。

这就是我在文本中的内容:从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级)。

到目前为止,我所得到的只是:

代码语言:javascript
复制
math.Round( xp / 50 )

这是50 xp每级,这不是我想要的,但我真的不知道从这里到哪里。

简单地说,我希望每个级别比上一个级别多需要50个XP,并且我需要从xp变量中获得这个级别。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-05 01:43:21

快速的数学计算表明,达到lv级别的经验点是:

代码语言:javascript
复制
(1 + 2 + 3 + ... + lv) * 50

这等于:

代码语言:javascript
复制
lv * (lv + 1) / 2 * 50

因此,问题是如何找到符合以下条件的最大非负整数lv

代码语言:javascript
复制
lv * (lv + 1) / 2 * 50 <= xp

这就是我们需要解决的问题。数学解决方案是:

代码语言:javascript
复制
lv <= (math.sqrt(xp * 4 / 25 + 1) - 1) / 2

因为你在寻找一个非负整数,用Lua的话来说,那就是:

代码语言:javascript
复制
local lv = math.floor((math.sqrt(xp * 4 / 25 + 1) - 1) / 2)

您可以将其封装到一个函数中,并进行如下快速测试:

代码语言:javascript
复制
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))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20389576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档