2013-09-24 71 views
0

我想用PHP编写一个简单的游戏化系统。例如,如果count> = 5,那么给这个人一个奖励。我假设一旦每个动作都满足,我将输入一个编号的数据到数据库中。然后我可以有一个成就框拉出每个代码,并显示匹配的徽章。简单的PHP游戏化系统

似乎很简单 - 但我有一个问题。如何在收到徽章后仅提醒一个人?任何人有任何想法为每个徽章分配点值,并可能指向其他行动?我是否会将所有点作为单个数字输入到数组中并将它们全部添加到sep sql调用中以显示总点数?

+1

您应该在数据库中创建一个新的“通知用户”字段。这不是一个PHP的问题。 – Brian

+2

构建应用程序的第一部分,然后担心其他问题。这些问题常常在您编码时自行解决。 – 2013-09-24 23:23:04

+0

这是一个PHP问题。数据存储在数据库中,然后通过PHP返回 –

回答

2

我希望我明白你的意思。我认为最简单的方法是实施一个“级别”式的奖励制度。只需将用户字段(用户表中名为“points”的列)的总点数保存,并在每次增量后检查用户是否有资格获得新奖励。

如果你想给用户多种类型的奖项,没有特定的顺序,你需要制定一个系统有所基于此结构:

  • 的奖(所有注册的奖项)的表
  • 给用户提供奖励表
  • 用于记录您在其中存储的唯一的ID,用户ID,点算点的表和其用户得到点事件

然后,你只需做一个交叉表的SQL选择显示用户或用户类别的点都被简单地做基本操作:

SUM(point awards for the user) - SUM(points for awards received by user). 

它已经有一段时间,因为我已经写了这样一个SQL SELECT声明,但这并不难,完全可以完成。这将是类似的东西:

SELECT a.userId,(SUM(a.points) - SUM(b.points_spent)) as 'currentPoints' FROM Awards a, Spendings b WHERE a.userId = b.userID 

该声明未经过测试,可能是完全错误的,但这是我现在所记得的。该声明应返回每个用户的ID和相应的支出点。如果您提供数据库设计,我可以提供完整且正确的选择声明。

希望这会有所帮助,干杯!

+0

好的提示,感谢您的反馈。你如何建议存储点。我应该重新计算并替换旧的积分值,或者每次获得积分时存储新的积分? –

+0

实现总是有两个方面:内存或功能。如果您想详细了解可帮助您检测欺诈的用户活动历史记录,则应将每个奖励存储为一个单独的实体(行)。我会建议你这样做。另一方面,如果您不需要用户数据和历史记录(但我确定您现在需要它,或者在您扩展站点时将需要它),那么您可以使用单一字段方法。同样,我建议你在我的答案中指定一个填满用户奖励的独特表格。祝你好运! :) – George