根据分数创建排名结构,无需对每种可能性进行编码

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

我正在尝试编写一个简单的排名结构,而不对每种可能性进行编码。

我希望排名 1-10 以 25 分增量分隔(0 分 = 1 级)

比排名11-20间隔50,21-30间隔100等等。基本上每10级增加一倍的级别之间的数量。

我从一堆 if 语句开始,甚至尝试了 switch 语句,但我觉得这很草率,浪费时间和代码。有什么建议可以为我指明正确的方向,这样我就不会编写所有可能性吗?

我将其标记为 javascript,因为这就是我正在编码的内容,但我更寻找一般方向/公式,并且我可以找出代码。

需要明确的是:

0-25 points = Rank 1
26-50 points = Rank 2
51-75 points = Rank 3

etc...

201-225 points = Rank 9
226-250 points = Rank 10

etc....

251-300 = Rank 11
301 - 350 = Rank 12

正如您所见,排名 1-10 之间的差距为 25 分。排名 11-20 的排名之间的差距为 50 分,那么排名 21-30 的排名之间应该有 100 分的差距,依此类推。

同时尝试获得余数,这样你就知道距离下一个排名还有多远。

javascript formula ranking
2个回答
0
投票

如果您要重复计算排名(例如,每次有人获得分数时),并且可能的排名数量有限,只需构建一个每个排名的总分数要求表(数组),使用

for
循环保持跟踪排名编号、到目前为止所需的总积分以及从当前排名升级所需的积分。所以
rankTable[rank] = totalPointsNeededForRank
。然后,每当有人获得积分时,您可以通过在表中查找下一个排名来检查他们是否达到了下一个排名的阈值。


0
投票

递归执行

calculate_rank points_left, points_need rank
  tmp_points = points_left - points_need
  rank++
  if tmp_point > 0
    if rank % 10 == 0
      points_need *= points_need
    end
    return calculate_rank tmp_point, points_need, rank
  else
    return rank
  end
end

用玩家的点数调用该方法,25, 0

希望它作为伪代码有意义。不然我就得重写了

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