Закоулки мозга

За основу можно взять язык Ludi, описанный в книге:

(SpringerBriefs in Computer Science) Cameron Browne (auth.)-Evolutionary GameDesign-Springer-Verlag London (2011).pdf

Хотя похоже, что этот язык разрабатывался для абстрактных настольных игр типа шашек - с фигурами, перемещениями, взятиями и т.п.

Структура для хранения описания игры: дерево, так что подойдет формат xml или json.

Доски для игры

Основная доска или игровое поле.

Именно на ней происходит основное действие, располагаются фишки и т.п.

Несколько возможных видов:

  • Клетки разных видов (можно взять описание из Ludi, там этот вариант как раз нормально описан):
    • Гексы (Колонизаторы)
    • Квадраты (Каркассон, Шакал, Повелитель подземелья)
  • Действия (Агрикола, Гавр, Пуэрто Рико)
  • Карта путей и локаций (Билет на поезд, Энергосеть, Талисман, Ужас Аркхэма, Монополия, Анк-Морпорк)
  • Без доски (Менеджер фабрики, Пуэрто Рико)

Доски с клетками

Для досок с клетками нужно дополнительно уточнить, что используется в качестве игровых объектов: узлы, ребра или сами клетки, потому что, например, для Шакала ребра и узлы неважны, а в Колонизаторах они важнее самого гекса (в узлах и на ребрах располагаются объекты). Для досок-клеток также важен размер доски, однако доска Каркассона может быть любого размера, так что Infinity тоже следует предусмотреть. Форма таких досок тоже должна быть как-то описана, потому что доска может быть “нерегулярной”, как в Шакале, например.

Карты локаций

Может потребоваться указание координат объектов, возможность пересечения путей (особенно, если игра будет выводиться в какой-то UI).

Обязательно должны быть связи между локациями в виде путей или “соседей”. Соседи - частный случай путей, по крайней мере, путями соседи легко описываются. Пути могут иметь веса (Энергосеть), могут состоять из тайлов (Ticket to Ride)

Общедоступная вспомогательная доска

Проблема с играми без доски или с досками игроков. В Менеджере Фабрики есть общедоступный рынок. В Пуэрто-Рико тоже есть общедоступный рынок. В Гавре есть очереди построек. В Агриколе есть крупные улучшения. Это тоже должно быть как- то описано. В целом, конечно, явно прослеживается общая тенденция - какие-то очереди / пулы объектов (стек?). Можно рассматривать как доску с действиями, в которой доступность действий или их порядок как-то регламентирован. Правда, тогда основная концепция действия (занять своей фишкой) не работает. А может, это и не основная концепция доски действий?

Доски игроков

Плюс к этому, доски могут быть и у каждого игрока, как в Агриколе или Менеджере фабрики. При этом их конфигурация часто вообще может быть какой- нибудь произвольной, так что тут возникнут сложности, однозначно. Можно, конечно, такие доски представить как доски-клетки. Опять же нужно описание того, какие сущности (узлы, ребра, клетки) важны для игры.

Черновик языка для описания досок

"boards": {
    "mainBoard": {  },
    "communityBoard": { },
    "playerBoard": { }
}

Поток сознания

На доске могут существовать или быть размещены:

  • Локации - места, где может находиться игрок, НИП (NPC) или предмет, который можно подобрать или использовать. Локации должны быть связаны, то есть иметь некий граф переходов.
  • Тайлы - отдельные фрагменты игрового поля, могут выступать в качестве локаций или фрагментов путей. Если тайлы сами по себе образуют карту, то на них могут существовать области и объекты. Тайлы могут иметь некоторые правила размещения, как в Каркассоне, тогда нужно проработать некую концепцию коннекторов, позволяющих присоединять тайлы друг к другу по этим правилам.
  • Пути - связи между локациями или самостоятельные объекты, как в Хранителе подземелья. Могут быть абстрактными (просто показывать наличие и характер связи), могут требовать постройки или изменять состав по ходу игры, тогда это путь из тайлов (дорога между городами в Билет на поезд)

Абстракция “стек” - для представления колод карт, очередей на постройку / покупку и т.п.

Абстракция “склада” или “банка” - набора компонентов, доступных для игры (в ряде игр кол-во компонентов ограничено, и это может определять даже условия наступления конца игры, как в Ticket to Ride или Пуэрто-Рико).

Абстракция (поддерево) для стадий игры. Может быть много уровней вложенности, если игра делится на фазы, те - на этапы, а этапы - на раунды или что-то в этом роде.

Игровые действия

Хорошая статья по ООП-моделированию доступных действий и проверок на возможность осуществления действий: https://habr.com/ru/post/454876