algorithm - 动态成就系统算法/设计
问题描述
我正在开发这个成就系统,它必须有一个 CRUD,管理员可以访问以创建新的成就和它的规则。我需要一些有关此设计和算法的帮助,以便它可以根据管理员的要求轻松地随着新规则的发展而发展。
规则样本
奖牌一:必须完成5门任何课程,得分至少为90
奖牌二:必须完成两门特定课程,得分至少为85
奖牌三:必须至少达到总排名前5名
奖牌四:必须超过5000 点
我基本上会将其作为元数据存储在关系数据库中,可能包含以下这些列:
- 行动
- 动作量
- 课程数量
- 分数
- 身份证课程
- 排名位置
- 积分
我想知道这种问题是否有任何已知的算法/设计?或者也许我应该以不同的方式存储它们以使其更容易?不知道,求建议。
解决方案
你的怀疑可能是对的。在我看来,数据库是组织这些数据的错误方式。您想要创建的每种新成就都会向您的数据库添加额外的列,并且大多数成就不会使用大多数列。一个更灵活的数据结构,一个不期望每个条目默认同时使用所有可能的成就标准的数据结构,可能会更有用。大多数语言都支持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:出于演示目的,我使标准名称非常冗长;在实际使用中是否缩短它们取决于偏好。
推荐阅读
- python - 有没有办法查看哪一行代码在 python 中产生警告消息?
- python - 为什么 python 整数缓存范围 [-5, 256] 不能在所有平台上以类似的方式工作?
- python - 下载带有 UTF-8 B 编码标头的电子邮件
- latex - 将行号添加到 Rmarkdown 文本并在每个页面上重新启动
- python - 在python中将列表转换为特定的json
- python - pytorch:计算多标签文本分类的损失函数
- javascript - 在叠加层上加载网页
- configuration - Markpoint 打印机重启后打印头宽度重置
- python - 每次我尝试使用 selenium 启动 Tor 时,Python 都会崩溃:请不要删除我的问题,其他问题只有 C# 中的答案
- sql - 在 sqlite 中设置字符集