За основу можно взять язык Ludi, описанный в книге:
Хотя похоже, что этот язык разрабатывался для абстрактных настольных игр типа шашек - с фигурами, перемещениями, взятиями и т.п.
Структура для хранения описания игры: дерево, так что подойдет формат xml или json.
Доски для игры
Основная доска или игровое поле.
Именно на ней происходит основное действие, располагаются фишки и т.п.
Несколько возможных видов:
- Клетки разных видов (можно взять описание из Ludi, там этот вариант как раз
нормально описан):
- Гексы (Колонизаторы)
- Квадраты (Каркассон, Шакал, Повелитель подземелья)
- Действия (Агрикола, Гавр, Пуэрто Рико)
- Карта путей и локаций (Билет на поезд, Энергосеть, Талисман, Ужас Аркхэма, Монополия, Анк-Морпорк)
- Без доски (Менеджер фабрики, Пуэрто Рико)
Доски с клетками
Для досок с клетками нужно дополнительно уточнить, что используется в качестве игровых объектов: узлы, ребра или сами клетки, потому что, например, для Шакала ребра и узлы неважны, а в Колонизаторах они важнее самого гекса (в узлах и на ребрах располагаются объекты). Для досок-клеток также важен размер доски, однако доска Каркассона может быть любого размера, так что Infinity тоже следует предусмотреть. Форма таких досок тоже должна быть как-то описана, потому что доска может быть “нерегулярной”, как в Шакале, например.
Карты локаций
Может потребоваться указание координат объектов, возможность пересечения путей (особенно, если игра будет выводиться в какой-то UI).
Обязательно должны быть связи между локациями в виде путей или “соседей”. Соседи - частный случай путей, по крайней мере, путями соседи легко описываются. Пути могут иметь веса (Энергосеть), могут состоять из тайлов (Ticket to Ride)
Общедоступная вспомогательная доска
Проблема с играми без доски или с досками игроков. В Менеджере Фабрики есть общедоступный рынок. В Пуэрто-Рико тоже есть общедоступный рынок. В Гавре есть очереди построек. В Агриколе есть крупные улучшения. Это тоже должно быть как- то описано. В целом, конечно, явно прослеживается общая тенденция - какие-то очереди / пулы объектов (стек?). Можно рассматривать как доску с действиями, в которой доступность действий или их порядок как-то регламентирован. Правда, тогда основная концепция действия (занять своей фишкой) не работает. А может, это и не основная концепция доски действий?
Доски игроков
Плюс к этому, доски могут быть и у каждого игрока, как в Агриколе или Менеджере фабрики. При этом их конфигурация часто вообще может быть какой- нибудь произвольной, так что тут возникнут сложности, однозначно. Можно, конечно, такие доски представить как доски-клетки. Опять же нужно описание того, какие сущности (узлы, ребра, клетки) важны для игры.
Черновик языка для описания досок
"boards": {
"mainBoard": { },
"communityBoard": { },
"playerBoard": { }
}
Поток сознания
На доске могут существовать или быть размещены:
- Локации - места, где может находиться игрок, НИП (NPC) или предмет, который можно подобрать или использовать. Локации должны быть связаны, то есть иметь некий граф переходов.
- Тайлы - отдельные фрагменты игрового поля, могут выступать в качестве локаций или фрагментов путей. Если тайлы сами по себе образуют карту, то на них могут существовать области и объекты. Тайлы могут иметь некоторые правила размещения, как в Каркассоне, тогда нужно проработать некую концепцию коннекторов, позволяющих присоединять тайлы друг к другу по этим правилам.
- Пути - связи между локациями или самостоятельные объекты, как в Хранителе подземелья. Могут быть абстрактными (просто показывать наличие и характер связи), могут требовать постройки или изменять состав по ходу игры, тогда это путь из тайлов (дорога между городами в Билет на поезд)
Абстракция “стек” - для представления колод карт, очередей на постройку / покупку и т.п.
Абстракция “склада” или “банка” - набора компонентов, доступных для игры (в ряде игр кол-во компонентов ограничено, и это может определять даже условия наступления конца игры, как в Ticket to Ride или Пуэрто-Рико).
Абстракция (поддерево) для стадий игры. Может быть много уровней вложенности, если игра делится на фазы, те - на этапы, а этапы - на раунды или что-то в этом роде.
Игровые действия
Хорошая статья по ООП-моделированию доступных действий и проверок на возможность осуществления действий: https://habr.com/ru/post/454876