0

想想一款游戏,玩家们都在努力解决问题,而每一个问题实际上都意味着“关卡”。

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

RedisIO 有 sorted set 功能,我会用它。

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

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)

计算,但是当某人的水平较低且花费的时间少于其他玩家时,它就无法正常工作。

4

1 回答 1

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
于 2013-11-13T13:35:32.993 回答