-
Notifications
You must be signed in to change notification settings - Fork 0
0002 persist state changes as events
Любая настольная пошаговая игра - это не что иное, как последовательное изменение состояния - игроки перемещают свои фишки, перекладывают жетоны, берут в руку и выкладывают на стол карты - все это можно представить в виде изменения состояния Игры. Важно, что изменения не происходят одновременно и параллельно - все они строго последовательны.
Исходя из этого можно выделить минимальную неделимую часть игры - атомарное
Изменение состояния
. Изменения состояния происходят в результате выполнения
Игроком или Игрой каких-либо действий, например Действие Бросить кубики может
привести к перемещению фишек, перераспределению ресурсов и вообще выполнению
любой игровой механики, в результате чего состояние игры изменится.
Очевидно, что история изменений состояния игры позволит "воспроизводить" ранее сыгранные игры или восстанавливать состояние на любой момент времени. А вот Действия на эту роль не подходят, т.к. логика их обработки может меняться с течением времени (например, при изменениях баланса или правил), и одна и та же последовательность Действий не будет приводить к одинаковому состоянию в разные моменты времени.
Мы будем сохранять в постоянном хранилище всю историю изменений состояния как каждой конкретной Игры (партии за Столом), так и системы в целом, в виде событий. Каждое событие должно включать минимум одно изменение состояния. Возможно, для каждого события стоит задавать какое-либо описание, которое может затем быть использовано для воссоздания текстового протокола Игры.
Мы рассчитываем, что акцент на сохранении именно Изменений состояния, а не Действий, даст нам возможность изменять логику обработки Действий, не влияя на уже сыгранные игры или игры, находящиеся в процессе.
Повторное воспроизведение записанной истории изменений состояния гарантированно будет приводить к одному и тому же состоянию.