Для удовольствия я пытаюсь написать одну из моих любимых настольных игр для сына как часть программного обеспечения. В конце концов, я ожидаю, что над ним будет создан интерфейс WPF, но сейчас я строю машину, которая моделирует игры и свои правила.
Как я это делаю, я все время вижу проблемы, которые, как мне кажется, являются общими для многих настольных игр, и, возможно, другие уже решили их лучше, чем я.
(Обратите внимание, что AI для игры в игру, а шаблоны вокруг высокой производительности мне не интересны.)
Пока мои шаблоны:
-
Несколько неизменяемых типов, представляющих объекты в игровом поле, например. кости, шашки, карты, доска, пробелы на доске, деньги и т.д.
-
Объект для каждого игрока, который содержит ресурсы игроков (например, деньги, оценка), их имя и т.д.
-
Объект, представляющий состояние игры: игроки, которые его поворачивают, это расположение пиков на доске и т.д.
-
Конечный автомат, управляющий чередой. Например, во многих играх есть небольшая пред-игра, где каждый игрок бросается посмотреть, кто идет первым; что начальное состояние. Когда начинается поворот игрока, сначала они катятся, затем двигаются, затем им приходится танцевать на месте, а затем другие игроки угадывают, какая у них курица, затем они получают очки.
Есть ли какой-то уровень техники, который я могу использовать?
EDIT: Недавно я понял, что состояние игры можно разделить на две категории:
-
Состояние артефакта игры. "У меня есть 10 долларов" или "моя левая рука на синем".
-
Состояние последовательности игр. "Я дважды удвоился, а следующий посадил меня в тюрьму". Здесь может иметь смысл конечный автомат.
EDIT:. Я действительно ищу здесь лучший способ реализовать многопользовательские пошаговые игры, такие как Chess или Scrabble или Monopoly. Я уверен, что смогу создать такую игру, просто работая над ней, и начнет ее завершать, но, как и другие шаблоны проектирования, возможно, есть некоторые способы сделать вещи более плавными, которые не очевидны без тщательного изучения. Это то, на что я надеюсь.