Соглашение Rails - «толстая модель, тонкий контроллер».поэтому я хотел бы предложить, чтобы состояние игры поддерживало модель Game.
Ваше веб-приложение состоит из нуля или более игр, а каждая игра состоит из 1 или более игроков.
состояние «полный» или состояние «начата игра» являются свойствами игры и должны поддерживаться этой моделью.
Так для 1) Когда присоединяется последний игрок (или, возможно, все текущие игроки)голосования, чтобы начать игру), состояние игры (свойство Game) будет установлено как «начатое», свойство, содержащее текущего активного игрока, будет установлено, а отложенное задание будет поставлено в очередь насообщение всем игрокам.
Для 2 в игре есть метод «выполнить ход» в игровом контроллере, который проверяет, является ли игрок, выполняющий ход, текущим игроком, а затем выполняет ход против игры.модель.Внутренняя модель игры будет знать, действителен ли ход, каков результат и каковы будут следующие шаги.Опять же, он будет использовать что-то вроде отложенного задания для сообщения следующего игрока.
Для # 3, опять же, отложенное задание может быть установлено для выполнения тайм-аута.Я не на 100% о том, как планировать отложенные задания, или если есть другой гем / плагин, который будет работать лучше.Но задание вызовет метод на игровом контроллере для проверки состояния игры в нужное время.Если игрок не сдвинулся, выполните логику форфита, которая снова будет методом в модели игры.
Состояние каждого игрока может быть сохранено в модели игрока или в модели игры.Я полагаю, что в зависимости от игры и степени взаимодействия между моделями игроков.
В случае рискованной игры, я думаю, что модель игрока будет довольно тонкой, так как состояниедоска - это больше вопрос о том, какой игрок владеет страной и сколько у них там армий - это больше состояние игры, чем состояние каждого отдельного игрока.Я ожидаю, что модель Player в игре с риском будет более ориентирована на метаданные о реальном игроке - имя пользователя, выигрыши / проигрыши, уровень квалификации и т. Д.
В такой игре, как Supremacy, где у игрока есть ресурсы,ядерное оружие и т. д., тогда в модели проигрывателя будет больше данных для хранения.