编写成就系统的最佳方法
我正在考虑设计一种在我的网站上使用的成就系统的最佳方法。数据库结构可以以最佳方式找到,以告知缺少的3个或更多连续记录,并且该线程实际上是从开发人员处获得想法的扩展。 我在这个网站上经常谈论徽章/成就系统时遇到的问题就是-都是谈论而没有代码。实际的代码实现示例在哪里? 我在这里提出一种设计,希望人们可以做出贡献,并希望为编码可扩展成就系统创建一个好的设计。我并不是说这是最好的,远非如此,但这是一个可能的起点。 请随时贡献您的想法。 我的系统设计思路 似乎普遍的共识是创建一个“基于事件的系统”-每当发生已知事件(如创建,删除帖子等)时,它都会像这样调用事件类。 $event->trigger('POST_CREATED', array('id' => 8)); 然后,事件类找出此事件正在“侦听”哪些标志,然后找到requires该文件,并创建该类的实例,如下所示: require '/badges/' . $file; $badge = new $class; 然后,它将调用默认事件,以传递调用时接收到的数据trigger。 $badge->default_event($data); 徽章 这才是真正的魔术发生的地方。每个徽章都有自己的查询/逻辑,以确定是否应授予徽章。每个徽章的格式如下: class Badge_Name extends Badge { const _BADGE_500 = 'POST_500'; const _BADGE_300 = 'POST_300'; const _BADGE_100 = 'POST_100'; function get_user_post_count() { $escaped_user_id = mysql_real_escape_string($this->user_id); $r = mysql_query("SELECT COUNT(*) …