Coder Social home page Coder Social logo

testmatch3's Introduction

Запуск

Чтобы запустить игру нужно запустить исполняемый файл: 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.

Рандомная генерация фишек не зависит от кол-ва фишек определенных цветов на поле, выбирается случайная.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.