动态成就系统算法/设计

时间:2018-12-19 20:12:18

标签: algorithm design-patterns data-structures

我正在开发此成就系统,它必须具有CRUD,管理员可以访问以创建新成就及其规则。我需要有关此设计和算法的帮助,以便它可以按照管理员的要求随新规则轻松发展。

规则样本

一等奖:必须完成至少5门课程的总分至少为90分
第二个奖章:必须完成至少85分的两个特定课程
第3奖章:必须至少一次进入总排名前5名
第四奖章:必须获得5000点以上

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

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

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

1 个答案:

答案 0 :(得分: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:出于演示目的,我使标准名称非常冗长;缩短或不缩短它们的使用取决于偏好。