我正在尝试编写一个简单的排名结构,而不对每种可能性进行编码。
我希望排名 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 分的差距,依此类推。
同时尝试获得余数,这样你就知道距离下一个排名还有多远。
如果您要重复计算排名(例如,每次有人获得分数时),并且可能的排名数量有限,只需构建一个每个排名的总分数要求表(数组),使用
for
循环保持跟踪排名编号、到目前为止所需的总积分以及从当前排名升级所需的积分。所以rankTable[rank] = totalPointsNeededForRank
。然后,每当有人获得积分时,您可以通过在表中查找下一个排名来检查他们是否达到了下一个排名的阈值。
递归执行
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
希望它作为伪代码有意义。不然我就得重写了