【发布时间】:2011-10-18 03:30:16
【问题描述】:
我正在开发一个小游戏(我正在使用 Play! 框架)。
在这个游戏中,玩家回答技术问题,回答正确即可获得积分。 除此之外,他们可能会赢得一些奖项,从而获得额外的积分。 这类似于 SO 徽章,不同之处在于玩家获得该奖项的积分。
我想知道存储用户分数和他们的历史的最佳方式是什么,特别是因为我希望能够显示上周、上个月等的“顶级玩家” .? 这些“top”将类似于“SO 中的周声誉排名”(例如:https://stackoverflow.com/users?tab=reputation&filter=week)
今天,我有:
- 一个
User实体,其中我有一个score属性,存储了用户当前的分数; - 一个
QuestionHistory实体,我把用户回答的每个问题都放在这里,它具有以下属性:user、answeredOn、correctAnswer等(我可以添加一个pointsAwarded,但对于此刻,所有问题都给出相同的分数)。
感谢QuestionHistory 实体,我能够计算给定时间段内一名玩家赢得的分数。
但是,它不包括奖项获得的分数。
我正在考虑将QuestionHistory 实体替换为另一个实体,例如UserActivity,它将存储此用户的任何活动:
- 当他回答问题时,有结果;
- 当玩家提交新问题时;
- 当他获奖时;
- 等
该实体的结构可能如下所示:
@Entity
public class PlayerActivity extends Model {
public User user;
public Date activityDate;
public ActivityType type; // Define the type of activity: "QUESTION_ANSWERED", "AWARD_RECEIVED", "QUESTION_SUBMITTED", etc.
public int score; // Points won by this activity.
}
有了这样的实体,我还可以显示类似 SO 网站上提供的活动历史记录(例如:https://stackoverflow.com/users/22656/jon-skeet?tab=activity)
您如何看待这个新提议,或者有更巧妙的方法吗?
【问题讨论】:
标签: java data-modeling playframework datamodel