Oberon space

General Category => Общий раздел => Тема начата: valexey от Январь 02, 2012, 04:44:05 pm

Название: Архитектура настольной игры.
Отправлено: valexey от Январь 02, 2012, 04:44:05 pm
В мире существуют, и довольно популярны, всевозможные настольные игры (то есть это те, в которых люди садятся за стол, выкладывают на игровое поле фишки, кидают кубик и так далее). Для пущей определенности возьмем скажем, игру Small World (кроме того, что она является типичным представителем, она еще и очень качественно сделана, не халтура).

Допустим мы хотим сделать компьютерный вариант этой игры (чтобы играть в том числе по сети - не всегда получается всем собраться за одним реальным столом). Соответственно возникает вопрос как архитектурно организовать логику игры? Ведь кроме всего прочего, к ней существуют аддоны. Чтобы не быть голословным:

Правила базовой игры (http://www.img2.mosigra.ru/_/products/b/8b/65597c19005fa739871ef46dcd793.pdf)
Пример маленького расширения игры (http://www.img7.mosigra.ru/_/products/a/d4/937f4b1e7515765d9ed7d00bdafc0.pdf)
Пример переработанной версии игры (http://www.igroved.ru/games/small-world/underground/rules_underground_rus.pdf)

То есть хочется во-первых как-то структурировать правила игры. То есть математически-алгоритмически описать (а не захардкодить все в дикое колличество ифов - запутаемся же!). Причем так, чтобы после выхода очередного аддона к игре, или переработанной версии, мы могли бы безболезненно это все добавить (не прочесывая ВЕСЬ уже написанный код) и по галке в настройках подключать/отключать это дело. Да, естественно в игре могут быть разные комбинации аддонов (например в игре может использоваться все три набора правил что я привел выше. одновременно) - это широко практикуется. То есть вариант с просто подгрузкой модуля реализующего правила которые выбрал пользователь в настройках - не катит. Нужно что-то более хитрое.

PS. Если это вдруг важно: у игра конечно разделится на серверную и клиентскую часть. На серверной крутится логика, архитектуру которой и предлагается мучить. На клиентской по сути только GUI.