我不知道如何实现,我虽然关于一个事件/观察者和一些动作来触发一个动作来检查,或者一个cron将每10分钟运行一次,等等.
有任何想法吗?
假设您的数据库中已经有一个User表,那么游戏化您的应用程序的核心就是两个表:“Currency”和“UserCurrency”. Currency表有一个必填字段“name”,但我也建议使用“description”.如果您为游戏化层编写管理界面,则说明会有很大帮助.
CurrencyUser表有三个内容:用户的ID,货币的ID以及用户获得的货币金额.
“货币”是一个游戏化的流行语;它不是指金钱,而是指你追踪的任何东西.例如,SO追踪你已经推出了多少赏金,多少票,你提出了多少次你自己的答案,以及你的一个答案’upvotes传递了多少次10(注意最后一个:其他人这样做,不是你!).对于这些事件中的每一个,SO都会运行一系列条件,获取相关联的货币,并为已满足的货币增加或创建新的UserCurrency.
当增量发生时,这也是一个事件,并且触发第二层功能,并且如果超过阈值,则授予徽章.
SO中也有“秘密”徽章.你知道吗?您没有获得这些徽章,但是在另一个表中设置了一个标志 – 编辑权限,评论权限,管理Wiki的权限等等.
我提到了明确的秘密徽章:用于跟踪授予货币的用户事件的代码是一个松散耦合到您的应用程序的独立插件,用于跟踪导致徽章的货币事件的代码是第二个,独立的,松散的 – 耦合的代码片段,用于跟踪导致权限的货币事件的代码是第三个独立的,松散耦合的代码片段.每个内部都可以在一定程度上改变而不会吸引其他内容,只要每个内部的API都清楚.
所以游戏化很容易写.
这也很难. SO是一个灵感,因为他们真的很想到他们希望用户做什么.渐进式权限系统可防止恶劣的拖钓,徽章系统从一开始就教育用户关于徽章系统(“第一个帖子徽章!”),但它也教育用户用户可以做什么.徽章的名称和描述令人愉快,富有洞察力,并引导用户了解更多信息. “游戏化”不仅仅是关于参与,而是一种文档告诉用户,“现在你已经想出了X,你可以去获得Y奖!”如果你不能达到那个标记,不要打扰游戏.