Чтобы запустить игру нужно запустить исполняемый файл: Bin/Windows/TestMatch3.exe. Игра должна запуститься в отдельном окне. Чтобы запустить режим редактора, нужно запустить: Bin/Windows/Editor.exe
Из редактора так же можно запустить игру, нажав кнопку Play в левом верхнем углу. В редакторе рестарт из меню работает некорректно, из-за внутренних багов движка
Компиляция поддерживается только на windows. Движок поддерживает mac/ios/android/linux, но сейчас платформы не работают.
Проект собирается через cmake. Можно собрать самому, или использовать скрипт MakeWindowsMSVSProject.bat. Он сам соберет проект и предложить открыть его в MSVS.
В проекте есть 2 таргета с запускаемыми файлами в папке Apps: Editor (редактор) и TestMatch3 (standalone приложение игры).
Выбрав нужный, можно его скомпилировать. Должно быть достаточно MSVS 2022 Community.
В игре генерируется поле случайного размера, фишки. На поле можно делать матчи свайпом (зажать фику и сдвинуть курсор в сторону). Правой кнопкой мыши можно удалить одну фишку.
Справа сверху есть кнопка меню. По нажатию на нее откроется меню с двумя действиями:
- перезапустить уровень матч3
- закрыть меню
Игра построена на компонентной системе а-ля Unity3D. Весь геймплей работает на компонентах в сцене Gamefield.scn. Код компонент лежит в папке Sources/Game/
Основная компонента игры - GameManager. Это точка входа, она управляет логикой сцены.
Логика меню в GameMenu
. Вызов функций OnRestartPressed
/OnExitPressed
происходит через динамическое связывание через редактор. Поэтому из кода они нигде не вызываются.
Логика игрового поля заключена в компонент Gamefield
. Она создает поле, спавнит новые фишки и имеет расширяемую логику через интерфейс GamefieldBehaviour
. От него наследуются 2 компоненты: ChipsFallGamefieldBehaviour
и CheckMatchesGamefieldBehaviour
. Они занимаются осыпанием и проверкой матчей соответственно. Таким образом логику игрового поля можно расширять. Для этого нужно создавать нужные наследники от GamefieldBehaviour
и добавлять их на сцену рядом с компонентой Gamefield
. Связывание происходит автоматически.
Поле хранит в себе список ячеек (Cell
) и фишек (Chip
). Ячейка содержит в себе ссылку на фишку, которой она владеет. У ячейки тоже могут быть различные behaviour, наследующиеся от CellBehaviour
. Например behaviour ChipSpawner
обозначает ячейку как источник спавна фишек. В целях оптимизации ячейки хранят ссылки на все 4 своих соседей
Фишка (Chip
) так же имеет в себе список behaviour'ов, задаваемых интерфейсом ChipBehaviour
. С помощью него можно делать различные виды фишек. Например, для бонусов можно использовать интерфейс OnDestroy, через который удалять соседние фишки. В базовой фишке задан цвет, она имеет текущее состояние (Standing, Falling, CheckFallingNext, Swapping, Destroying) и ссылку на владеющую ей ячейку.
Чтобы ее увидеть, нужно запустить редактор (описано выше). Основные объекты представлены в цене корневыми акторами:
Camera
: камера, через которую отображается сценаBackground
: задний фон, просто спрайтGamefield
: игровое поле, с его behaviour'ами. Внутри поля список ячеек, в ячейке фишкаOptions
: кнопка открытия менюMenu
: меню, внутри 2 кнопки. На кнопки привязаны функции из кодаGameManager
: менеджер игры, связывается с меню и игровым полем
Объекты можно выделять и вижеть их настройки
В коде используются как специальные ссылки на сущности (Ref<Type>
), так и обычные указатели. Это недоработка текущей версии движка, тк пока что Ref<Type>
не поддерживает forward declaration.
Рандомная генерация фишек не зависит от кол-ва фишек определенных цветов на поле, выбирается случайная.