【问题标题】:Calculating a game's high score table计算游戏的高分表
【发布时间】:2011-11-09 23:10:15
【问题描述】:

我需要创建一个计算高分“排行榜”的函数/方法(在 python 中)。每个玩家将玩任意数量的游戏,每轮获得一个分数。我想知道对排名靠前的球员进行排序的最佳方法是什么(考虑得分和比赛轮数)。每轮可能的分数是 F、D-、D、D+、C-、C、C+、B-、B、B+、A-和 A。

显然,一个简单的平均值是行不通的,因为它没有考虑到游戏的回合数。设置公平排序功能的最佳方法是什么?

编辑:我一直在这里阅读一些非常棒的答案,我想稍微澄清一下我的问题。我希望球员的得分和他们打过的回合数都以公平的方式计入他们的排名。这意味着拥有 20 个 B 的玩家应该比拥有 5 个 A 的玩家排名更高。 基本上高分应该反映一般的努力和技巧“玩的回合数加上他们的分数”意味着他们的排名应该越高。

编辑 2: 阅读答案后,我认为最好的方法是对所有回合的玩家积分进行简单的总和。我不确定将绿色检查分配给哪个答案,因为您都正确。

【问题讨论】:

  • 为什么每轮平均得分不起作用?
  • 它可能会起作用,但我不想鼓励玩家只玩几轮以获得高分,然后因为害怕降低每轮得分而不再玩更多轮。另外,这是否意味着 A 的 1 轮排名会高于 20 B 的排名?
  • 即使您能够从多个答案中受益,您仍然应该通过选择一个答案来解决您的问题,最好是一个最好反映解决方案的答案。如果真的是洗头,您可以使用您使用的确切解决方案提供您自己的答案,并接受,but really, the former is preferred to the latter

标签: python google-app-engine math


【解决方案1】:

您要问的问题本质上是我们如何定义“优秀”玩家,这不是一个简单的问题。正如您所提到的,根据您的游戏设计,简单的平均分或选择最高分并不是理想的答案。

我建议您在设计自己的玩家评分系统之前阅读有关国际象棋和其他修改版本的 ELO rating system

一种简单且可行的方法是您可以设置一个窗口(例如最近的 10 场比赛)并使用该窗口的平均得分。玩的游戏少于此窗口的玩家将处于“就位”状态。同样,这不是一个简单的问题,很大程度上取决于你的游戏是什么。祝你好运!

[更新]

我假设你的游戏是玩家对玩家。如果不是,这是另一个故事。无论您玩游戏多少次,大多数游戏都会保持最高分,这将成为您进入排行榜的入口。既然你什么都没说你的游戏,我不知道为什么它不公平。正如我之前提到的,您可以为 avg 设置一个窗口。得分或最高分。您甚至可以每月重置排行榜或移除一周未玩的玩家。这一切都取决于你的游戏和你想要什么。请记住,无论您做什么,都要确保规则对玩家来说一目了然,否则他们很容易感到沮丧和沮丧。

【讨论】:

    【解决方案2】:

    有很多方法可以做到这一点。试试这个例子,让 F-A 为 0-11(你可以自己做;但要考虑难度),所以每个分数都比前一个高一个。对于您玩的每一场比赛,您都会收到一个分数(从 0 到 11)。创建一个总分,并将每次的游戏得分添加到总分中。这样,如果一个人获得 7 个 A,即为 77,而获得 7 个 A- 的人获得 70 分,则只需对它们进行相应的排序。当然,每个功能都有其缺点。这个函数不是“最好的”,考虑得到 20 个 B 会超过 7 个 A,尽管 7 A 是一个更好的分数。如果你能告诉我更多关于你想如何对它们进行排名的细节,那么让算法变得更容易。

    【讨论】:

    • 我已经编辑了我的问题以试图解决它。我希望 20 个 B 高于或等于 7 个 A。所玩的回合数应计入玩家的排名。
    • 谢谢你。我提供给你的应该足够了。它使您可以控制每个单独的分数或“权重”;然而,玩得更多总是意味着获得更高的分数(除非你得到一个 F)。这给了比赛的轮数更高的“权重”,因为两次获得 C+ 超过获得 A,这对 C+ 的人来说并没有显示出太多的技能。正如我所建议的,您可以通过更改每个值来重新平衡,以将难度考虑在内。例如,如果得分 A 比得分 C 困难得多,则尝试使用更大的分数差距,例如:F=0、D-=1、D=3、D+ =7 等。
    猜你喜欢
    • 1970-01-01
    • 2014-02-16
    • 2020-09-13
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    相关资源
    最近更新 更多