基于花费时间和用户级别的排名算法

时间:2013-11-13 13:19:23

标签: algorithm redis ranking

想想游戏,玩家正试图解决问题,而每个问题实际上都意味着“等级”。

玩家在玩游戏时会看到实时排名。

RedisIO有分类设置功能,我会用它。

但我不知道如何给球员打分:

PlayerA at 7 level, total game time 80  seconds
PlayerB at 7 level, total game time 65  seconds
PlayerC at 5 level, total game time 40  seconds
PlayerD at 1 level, total game time 200 seconds

我想要的排名就像这样

1) PlayerB - because level 7 and 65  seconds
2) PlayerA - because level 7 and 80  seconds
3) PlayerC - because level 5 and 40  seconds
4) PlayerD - because level 1 and 200 seconds

我试过

(timeSpent/level)

计算但是当某人的水平较低且花费的时间少于其他玩家时,它的效果不佳。

1 个答案:

答案 0 :(得分:1)

简答:你可以拥有以下功能:

score = (level * HUGE_NUMBER) - timeSpent

对于HUGE_NUMBER,您可以选择一个稍大于完成关卡所需的最长时间的值。

虽然对于大多数情况来说这可能已经足够了,但我宁愿使用排序来解决这个问题,以避免排名算法中任何潜在的看不见的错误。

假设玩家的level是排名的主导因素,我会按降序排列所有玩家level。这可能会给你这样的东西(注意它还不是最终排名):

1) PlayerA - because level 7 and 80  seconds
2) PlayerB - because level 7 and 65  seconds
3) PlayerC - because level 5 and 40  seconds
4) PlayerD - because level 1 and 200 seconds

然后,我将在每个level中创建玩家的子列表,并按time按升序对其进行排序。在上面的示例中,第二个排序将为您提供最终正确的排名。

1) PlayerB - because level 7 and 65  seconds
2) PlayerA - because level 7 and 80  seconds
3) PlayerC - because level 5 and 40  seconds
4) PlayerD - because level 1 and 200 seconds