Хорошая модель данных для хранения счета и истории для игры - PullRequest
2 голосов
/ 02 августа 2011

Я занимаюсь разработкой небольшой игры (я использую Play! Framework ).

В этой игре игроки отвечают на технические вопросы и выигрывают очки, когда они отвечают правильно. Кроме того, они могут выиграть несколько наград, которые дают дополнительные очки. Это похоже на значки SO, за исключением того, что игрок получает очки за эти награды.

Мне интересно, каков наилучший способ хранения пользовательской оценки и истории из них, тем более, что я хочу иметь возможность отображать «Топ-игрока» за последнюю неделю, за последний месяц и т. Д. ? Эти «вершины» будут похожи на «Рейтинг репутации недели в SO» (например: https://stackoverflow.com/users?tab=reputation&filter=week)

Сегодня у меня есть:

  • Объект User, где у меня есть атрибут score, в котором хранится текущий счет пользователя;
  • A 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)

Что вы думаете об этом новом предложении, или есть более разумный способ сделать это?

1 Ответ

0 голосов
/ 03 августа 2011

Я думаю, что это определенно лучший способ подсчета баллов, поскольку вы управляете событиями, и вы «ориентированы на будущее», если хотите расширить действия, которые вознаграждают пользователей.может найти более замысловатый дизайн для этого.Но тот, который вы предлагаете, прост и работает, так что ... дерзайте:)

...