6

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

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

有任何想法吗?

4

4 回答 4

17

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

假设您的数据库中已经有一个 User 表,那么游戏化应用程序的核心恰好需要两个表:“Currency”和“UserCurrency”。货币表有一个必填字段“名称”,但我也建议使用“描述”。如果您为游戏化层编写管理界面,那么描述会很有帮助。

CurrencyUser 表包含三项内容:用户的 ID、货币的 ID 以及用户获得的货币数量。

“货币”是一个游戏化流行语;它不是指金钱,而是指你正在追踪的任何东西。例如,SO 会跟踪您发放了多少赏金、多少票、您对除您自己的答案之外的答案投了多少次,以及您的答案中有多少次通过了 10(请注意最后一个:其他人这样做,而不是你!)。对于这些事件中的每一个,SO 都会遍历一个标准列表,获取相关的货币,并为已满足的那些增加或创建新的 UserCurrency。

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

SO中还有“秘密”徽章。你知道吗?您不会获得这些徽章,但在不同的表格中设置了一个标志——编辑权限、评论权限、管理 wiki 的权限等等。

我提到秘密徽章是为了说明这一点:用于跟踪奖励货币的用户事件的代码是一个松散耦合到您的应用程序的独立插件,用于跟踪导致徽章的货币事件的代码是第二个,独立,松散-耦合的代码段,而用于跟踪导致权限的货币事件的代码是第三个独立的松散耦合的代码段。只要每个人之间的 API 清晰,每个人的内部结构都可以在一定程度上改变而不会影响其他人。

所以游戏化很容易写。

这也很难。SO 是一种灵感,因为他们真的很努力地考虑过他们希望用户做什么。渐进式权限系统可防止恶意拖钓,徽章系统从一开始就向用户介绍徽章系统(“首次发布徽章!”),但它也向用户介绍用户可以做的更多事情。徽章的名称和描述令人愉悦,富有洞察力,并引导用户了解更多信息。“游戏化”不仅仅是关于参与,而是一种告诉用户的文档,“现在你已经弄清楚了 X,你可以去争取奖励 Y!” 如果你不能达到那个标记,不要费心去玩游戏。

于 2011-09-02T17:12:55.447 回答
1

我会使用触发器来实现它(伪代码:)

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();
于 2011-04-26T18:31:48.077 回答
1

我是这样处理的:首先,几乎所有用户活动从一开始就被记录为一个事件,因为未来将添加新的徽章和条件,其中一些会持续很长时间。

我正在开发的应用程序是一个电子学习游戏/平台,因此事件类型将由以下内容组成:测验、用户、社区,其中的事件可能类似于:(对于测验)正确回答问题,回答问题不正确、完成测验、(对于用户)登录、注销、完成个人资料、(对于社区)向论坛发布问题、向论坛发布答案、答案评分 +1 等...

每个事件都会得到一个时间戳。

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

一个 cron 会在很短的时间间隔内运行,以遍历事件表中所有内容的徽章/级别/等队列,并与用户活动日志交叉引用。换句话说,只有当用户登录时,他才会被添加到队列中。

任何建议,尤其是。关于可扩展性将不胜感激!

于 2011-08-02T21:53:59.067 回答
1

我会这样做:

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

我认为它应该可以解决问题(:


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

于 2011-04-26T18:12:44.123 回答