我正在使用徽章系统,到目前为止,我有这个想法:
创建一个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。
任何反馈,推荐?
答案 0 :(得分:3)
我的游戏化数据库非常简单。我有一张“货币”表,里面有一个字段,一个名字。我有一个“UserCurrency”表,其中包含用户的ID,他们赚取的货币的ID,以及他们赚取多少钱的整数。当然,我有一个User表。
就是这样。
我使用Django,所以其中一些可能没有意义,但基本上我有一个侦听数据库事件的事件监听器。当用户执行导致数据库命中的任何时,事件侦听器将遍历一系列函数,每个函数都包含目标语言中的简单条件,以便颁发徽章。如果用户达到该标准,则颁发徽章。 (“货币”可能是“帖子数量”或“响应数量”,甚至是“戳数”。不要将其误认为货币价值;它只是无论你想跟踪它。
这是一种简单且完全可扩展的会计机制,用于保持分数,而不会使您的数据库架构混乱,并提供有关您正在跟踪的特定事物的详细信息。它完全独立于任何其他用户跟踪详细信息,如配置文件。如果您想要添加新货币,即要跟踪和关联徽章的新货币,您可以将其名称添加到货币表,一组规则如何获得,以及一组阈值规则用户收到一些确认,然后由您决定如何向用户显示该奖项以及该奖项的后果。
此外,规则可以关联。 Stack Overflow非常(非常!)很好。例如,当您访问该网站时,触发的规则甚至不会计算“Enthusiast”徽章的货币,而是访问的天数。每当您获得声誉时,如果您的分数超过200,代码仅将货币计数器“legendary”更新为1,当该货币达到150时,另一个触发器会奖励您的“传奇”徽章,依此类推。解耦和独立性是游戏化设计中的强大工具。