【问题标题】:A good data model for storing score and history for a game用于存储游戏得分和历史的良好数据模型
【发布时间】:2011-10-18 03:30:16
【问题描述】:

我正在开发一个小游戏(我正在使用 Play! 框架)。

在这个游戏中,玩家回答技术问题,回答正确即可获得积分。 除此之外,他们可能会赢得一些奖项,从而获得额外的积分。 这类似于 SO 徽章,不同之处在于玩家获得该奖项的积分。

我想知道存储用户分数和他们的历史的最佳方式是什么,特别是因为我希望能够显示上周、上个月等的“顶级玩家” .? 这些“top”将类似于“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

您如何看待这个新提议,或者有更巧妙的方法吗?

【问题讨论】:

    标签: java data-modeling playframework datamodel


    【解决方案1】:

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

    是的,您可能会发现更复杂的设计来做到这一点。但是你提出的那个很简单而且很有效,所以……去吧:)

    【讨论】:

    • 不确定这是否是完美的解决方案,但无论如何,我将从我的第二个建议开始。
    • 也许不是完美的,但如果它有效,你为什么要追求完美?可能您不需要它,而完美的设计和实现需要更长的时间,而且可能是矫枉过正:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 2015-02-18
    • 2011-04-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多