【问题标题】:Dynamic Achievement System algorithm / design动态成就系统算法/设计
【发布时间】:2019-05-20 09:01:10
【问题描述】:

我正在开发这个成就系统,它必须有一个 CRUD,管理员可以访问以创建新的成就和它的规则。我需要一些有关此设计和算法的帮助,以便它可以根据管理员的要求轻松地根据新规则进行演变。

规则示例

奖牌一:必须完成 5 门任何课程且得分至少为 90
奖牌二:必须完成两门特定课程且得分至少为 85
奖牌三:必须至少有一次总排名前 5
奖牌四:必须有超过 5000 分

我基本上会将其作为元数据存储在关系数据库中,可能包含以下这些列:

  • 动作
  • 动作数量
  • 课程数量
  • 得分
  • id 课程
  • 排名 位置

我想知道这类问题是否有任何已知的算法/设计?或者也许我应该以不同的方式存储它们以使其更容易?不知道,我想要建议。

【问题讨论】:

    标签: algorithm design-patterns data-structures


    【解决方案1】:

    你的怀疑可能是对的。在我看来,数据库是组织这些数据的错误方式。您想要创建的每一种新成就都会向您的数据库添加额外的列,并且大多数成就不会使用大多数列。一个更灵活的数据结构,一个不期望每个条目默认同时使用所有可能的成就标准的数据结构,可能会更有用。大多数语言都支持JSON,所以我建议你使用它。结构可能是这样的:

    [
      {
        "name": "Medal One",
        "requirements": {
          "coursesCompleted": 5,
          "scoreMin": 90
        }
      },
      {
        "name": "Medal Two",
        "requirements": {
          "specificCoursesCompleted": [
            "Course 1",
            "Course 2"
          ],
          "scoreMin": 85
        }
      },
      {
        "name": "Medal Three",
        "requirements": {
          "generalRankingMin": 5
        }
      },
      {
        "name": "Medal Four",
        "requirements": {
          "scoreMin": 5000
        }
      }
    ]
    

    您可以在此处看到标准类型有时是如何重复使用的,但在不需要时可以将其省略,并且可以将新的标准类型添加到一些成就中,而不会增加数据集的其余部分。

    PS:出于演示目的,我使标准名称非常冗长;在实际使用中是否缩短它们取决于偏好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-02
      • 2011-06-07
      • 2015-12-21
      • 2021-08-23
      • 2010-12-17
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      相关资源
      最近更新 更多