您如何实施类似于SO的徽章系统?

时间:2011-04-26 17:58:34

标签: php zend-framework badge

我需要在zend框架中做一个类似的徽章系统。

我不知道如何实现,我虽然关于一个事件/观察者和一些触发动作检查的动作,或者一个每10分钟运行一次的cron等等。

有什么想法吗?

4 个答案:

答案 0 :(得分:16)

作为为客户编写游戏插件的Django开发人员,我使用Stack Overflow和BigDoor作为我的灵感。事实证明,游戏化非常容易,而且同时也很困难。

假设您的数据库中已有一个User表,那么游戏化您的应用程序的核心就是两个表:“Currency”和“UserCurrency”。 Currency表有一个必填字段“name”,但我也建议使用“description”。如果您为游戏化层编写管理界面,则说明会有很大帮助。

CurrencyUser表包含三个内容:用户的ID,货币的ID以及用户获得的货币金额。

“货币”是一个游戏化流行语;它不是指金钱,而是指你追踪的任何东西。例如,SO追踪你已经推出了多少赏金,多少票,你提出了多少次你自己的答案,以及你的一个答案'upvotes传递了多少次10(注意最后一个: 其他人这样做,而不是你!)。对于这些事件中的每一个,SO都会运行一系列条件,获取相关联的货币,并为已满足的货币增加或创建新的UserCurrency。

当增量发生时,这也是一个事件,并且触发了第二层功能,如果超过阈值,则授予徽章。

SO中也有“秘密”徽章。你知道吗?你没有获得这些徽章,但是在另一个表中设置了一个标志 - 编辑权限,评论权限,管理维基的权限等等。

我提到了明确的秘密徽章:用于跟踪授予货币的用户事件的代码是一个松散耦合到您的应用程序的独立插件,用于跟踪导致徽章的货币事件的代码是第二个,独立的,松散耦合的代码段,以及用于跟踪导致权限的货币事件的代码是第三个独立的,松散耦合的代码段。每个内部都可以在一定程度上改变而不会吸引其他内容,只要每个内部的API都清楚。

所以游戏化很容易写。

这也很难。 SO是一个灵感,因为他们真的认真思考他们希望用户做什么。渐进式权限系统可防止恶劣的拖钓,徽章系统从一开始就教育用户关于徽章系统(“第一个帖子徽章!”),但它也教育用户更多信息用户可以。徽章的名称和描述令人愉快,富有洞察力,并引导用户了解更多信息。 “游戏化”不仅仅是关于参与,而是一种文档告诉用户,“现在你已经想出了X,你可以去获得Y奖!”如果你不能达到那个标记,不要打扰游戏。

答案 1 :(得分:1)

我会这样做:

  • 为用户创建了很多参数(如回答的问题,收到的投票等)
  • 创建具有此参数先决条件的徽章(已回答5个问题,收到10个投票等)
  • 每次更新用户时,请检查新徽章并将其包含在用户徽章中

我认为应该这样做(:


如果您在获得新徽章时不需要警告用户,您甚至不必每次都要查找徽章。只需运行一个查询,显示符合先决条件的徽章。

答案 2 :(得分:1)

我会使用trigger(伪代码:)

来实现它
On update votes_table create new row in users_points (how_many, for_what, when, ...);
on update users_points call check_if_enough_for_some_badge();

答案 3 :(得分:1)

我正在这样接近:首先,几乎所有用户活动都是从一开始就记录为事件,因为将来会添加新的徽章和条件,其中一些会长期过期

我正在开发的应用程序是一个电子学习游戏/平台,因此事件类型将包括以下内容:测验,用户,社区,以及其中的事件可能类似于:(用于测验)答案问题正确,答案问题不正确,完成测验,(对于用户)登录,退出,完整档案,(社区)发布问题到论坛,发布论坛答案,答案评级+1等等。

每个活动都会有一个时间戳。

用于完成徽章/等级/等的标准存储在一个函数中,函数的名称在带有徽章的表中。这使我能够保持表格简单,并利用更多创造性的代码使用。

cron在短时间间隔内运行,通过事件表中所有内容的徽章/级别/ etc队列,与用户活动日志交叉引用。换句话说,只有当用户登录时才会将其添加到队列中。

有任何建议,特别是关于可扩展性将不胜感激!