algorithm - 动态成就系统算法/设计

标签 algorithm design-patterns data-structures

我正在开发这个成就系统,它必须有一个 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/

相关文章:

c# - 如何在 C# 中从第二项开始获取新数组?

algorithm - 获取图像变化算法

objective-c - 在 Objective-C 中扩展与子类化,哪个更适合创建我想稍后扩展的计算器类?

oop - 状态模式似乎使用循环引用。为什么没问题?

c - 访问嵌套结构

c# - 如何处理动态放置标签的重叠

c - dfs 迭代和 dfs 递归的不同输出

java - 这是实现工厂方法设计模式的正确方法吗

c++ - vector 、矩阵和四元数的缓存性能

c - 队列的递归计算