用于存储游戏得分和历史的良好数据模型

时间:2011-08-02 10:28:17

标签: java data-modeling playframework datamodel

我正在开发一款小游戏(我正在使用 Play!framework )。

在这个游戏中,玩家回答技术问题,并在他们正确回答时赢得积分。 除此之外,他们可能会赢得一些奖项,这些奖项会增加额外的积分。 这类似于SO徽章,除了玩家赢得奖励积分。

我想知道存储用户分数和历史记录的最佳方法是什么,特别是因为我希望能够显示上周,上个月的“热门玩家”等。? 这些“上衣”将类似于“SO中的周声誉排名”(例如:https://stackoverflow.com/users?tab=reputation&filter=week

今天,我有:

  • User实体,其中我有一个score属性,用于存储用户的当前分数;
  • QuestionHistory实体,我在其中提出了用户回答的每个问题,其中包含以下属性:useransweredOncorrectAnswer等。(我可以添加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

你如何看待这个新命题,或者有什么方法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

我认为这绝对是计算积分的更好方法,因为您正在管理事件,并且如果您想扩展奖励用户的活动,您就是“未来证据”。

是的,可能你会发现更复杂的设计来做到这一点。但你建议的那个很简单,它有效,所以...去吧:)。