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上記の例では、2 番目の並べ替えによって最終的な正しいランキングが得られます。

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 に答える