首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用户体验计算公式

用户体验计算公式
EN

Stack Overflow用户
提问于 2022-07-27 21:42:31
回答 3查看 73关注 0票数 1

我希望(不使用gem)为我的用户创建一个级别和体验点系统。

在创建他的帐户时,他以0的经验点开始0级。要达到1级,他需要额外10分,总共10分。对于3级,他将需要30个额外的分数,总共60个经验点。每增加一个等级都需要10个额外的经验点。(见下文示例)。

代码语言:javascript
运行
复制
Level  |  Total XP  |  XP for next level|
----------------------------------------|
0      |    0       |    10             |
1      |    10      |    20             |               
2      |    30      |    30             |
3      |    60      |    40             |
4      |    100     |    50             |
5      |    150     |    60             |
etc...

我希望我的用户表中有一个xp列来代表用户的全部体验。

在我看来,我想展示它的水平。但计算这一点的公式是什么呢?

让我们想象一下,我的用户总共有157个体验点。它对应于第5级,如何仅通过总经验点来计算一个水平,以及如何计算它,而不管它的总经验点是38,像369还是4393。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-07-28 00:46:55

我不确定这是不是你想要的。这更像是一种算法,而不是公式,但是这里有一种方法,它将根据所给出的经验返回适当的级别。想一想bar变量,就像为了满足一个新级别而必须通过的栏,并考虑step变量,就像在每个级别之间添加的经验量(如您在最右边的专栏中所描述的)。

代码语言:javascript
运行
复制
def calculate_level(experience)
  level = 0
  bar   = 10
  step  = 10
  while experience >= bar
    level += 1
    step  += 10
    bar   += step
  end
  level
end

示例输出:

代码语言:javascript
运行
复制
irb> calculate_level(0)   # => 0
irb> calculate_level(9)   # => 0
irb> calculate_level(10)  # => 1
irb> calculate_level(11)  # => 1
irb> calculate_level(29)  # => 1
irb> calculate_level(30)  # => 2
irb> calculate_level(31)  # => 2
irb> calculate_level(59)  # => 2
irb> calculate_level(60)  # => 3
irb> calculate_level(61)  # => 3
irb> calculate_level(99)  # => 3
irb> calculate_level(100) # => 4
irb> calculate_level(101) # => 4
irb> calculate_level(149) # => 4
irb> calculate_level(150) # => 5
irb> calculate_level(151) # => 5
票数 1
EN

Stack Overflow用户

发布于 2022-07-28 17:36:39

计算上述注释的逆值,并取floor

代码语言:javascript
运行
复制
def calculate_level experience
  (Math.sqrt(0.2 * experience + 0.25) - 0.5).floor
end
票数 1
EN

Stack Overflow用户

发布于 2022-07-28 11:47:23

你可以使用这样的“公式”

代码语言:javascript
运行
复制
def calculate_level(experience)
  (1..).find { |i| (experience -= 10 * i).negative? } - 1
end

每次减少10倍的经验,检查结果是否为负值。

代码语言:javascript
运行
复制
calculate_level(0)
# => 0

calculate_level(9)
# => 0

calculate_level(10)
# => 1

calculate_level(11)
# => 1

calculate_level(29)
# => 1

calculate_level(30)
# => 2

calculate_level(31)
# => 2

calculate_level(59)
# => 2

calculate_level(60)
# => 3

calculate_level(61)
# => 3

calculate_level(99)
# => 3

calculate_level(100)
# => 4

calculate_level(101)
# => 4

calculate_level(149)
# => 4

calculate_level(150)
# => 5

calculate_level(151)
# => 5

calculate_level(209)
# => 5

calculate_level(210)
# => 6
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73144928

复制
相关文章

相似问题

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