我正在开发这个成就系统,它必须有一个 CRUD,管理员可以访问它来创建新的成就及其规则。我在设计和算法方面需要一些帮助,以便它可以按照管理员的要求轻松地随着新规则发展。
规则示例
一等奖:必须完成 5 门任意类(class)且分数至少为 90
二等奖:必须以至少 85 分的成绩完成两门特定类(class)
勋章三:必须至少有一次总排名前5
勋章四:必须有5000分以上
我基本上会将其作为元数据存储在关系数据库中,可能包含以下这些列:
- 行动
- 行动数量
- 类(class)数量
- 得分
- 确定类(class)
- 排名 职位
- 积分
我想知道是否有针对此类问题的已知算法/设计?或者我应该以不同的方式存储它们以使其更容易?不知道,我想要建议。
最佳答案
你的怀疑可能是对的。在我看来,数据库是组织这些数据的错误方式。您想要创建的每一种新成就都会向您的数据库添加额外的列,而大多数成就不会使用大部分列。一种更灵活的数据结构,即默认情况下不希望每个条目同时使用所有可能的成就标准的数据结构,可能会更有用。大多数语言支持 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:出于演示目的,我将条件名称写得非常冗长;在实际使用中缩短或不缩短它们取决于偏好。
关于algorithm - 动态成就系统算法/设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53858522/