3

我正在使用徽章系统,到目前为止,我有这个想法:

创建一个 UserMeta 表来存储将在标准中使用的数据。

UserMeta
===========================
user_id | posted_comment_count | flagged_comment_count | reputation | etc.

我想知道这是否是个好主意,好像我需要添加一些元数据作为标准,我需要添加一个列,所以我想使用一个序列化的对象,在 json 中,或者例如.

另一个名为 Badge 的表:

badge_id | badge_name | badge_criteria

其中徽章标准是 json 或任何其他序列化格式,其中存储如下对象:

{
  'posted_comment_count': '>= 20',
  'flagged_comment_count': '=10',
}

还有另一个将用户与徽章相关联的表(一个简单的关联表)

我正在使用 Doctrine2,但我想使用 Event 来更新 UserMeta。

有什么意见、建议吗?

4

1 回答 1

3

我的游戏化数据库非常简单。我有一个“货币”表,它有一个字段,一个名称。我有一个“UserCurrency”表,其中包含用户的 ID、他们赚取的货币 ID 以及他们赚取的整数。当然,我有一个用户表。

就是这样。

我使用 Django,所以其中一些可能没有意义,但基本上我有一个事件侦听器来侦听数据库上的事件。当用户执行任何导致数据库命中的操作时,事件侦听器会遍历一系列函数,每个函数都包含目标语言中的一个简单标准,用于确定何时授予徽章。如果用户达到该标准,则授予徽章。(“货币”可能是“帖子数”或“回复数”,甚至是“戳数”。不要将其误认为是货币价值;它只是对您想要跟踪的任何内容的统计.

这是一种非常简单且完全可扩展的记账机制,用于记分,不会因为您正在跟踪的特定事物的详细信息而使您的数据库架构变得混乱。它完全独立于任何其他用户跟踪详细信息,例如个人资料。如果您想添加一种新货币,即您要跟踪、关联和奖励徽章的新货币,您可以将其名称添加到货币表中,一组关于如何奖励的规则,一组阈值规则用户会收到一些确认,然后由您决定如何向用户展示它以及奖励的后果是什么。

此外,规则可以相互关联。Stack Overflow 做得非常(非常!)好。例如,当您访问该网站时,触发的规则甚至不计算货币,而是计算“爱好者”徽章的访问天数。每次获得声望时,如果您的分数超过 200,代码只会将货币计数器“传奇”更新 1,当该货币达到 150 时,另一个触发器会奖励您的“传奇”徽章,依此类推。解耦和独立是游戏化设计中的强大工具。

于 2011-09-02T05:16:42.123 回答