Тестовое задание c++ / cocos2d-x
Раскачивающийся на веревке блок по клику/тапу падает вниз и надстраивается последним этажом к возводимой башне.
В зависимости от точности попадания начисляются очки и пересчитывается устойчивость раскачивающейся башни.
Использоовался cocos2d-x-3.17.1
Базовый объект GameObject включает в себя компонеты отвечающие за его поведения. GraphicComponent – спрайт, положение на экране. PhysicComponent – движение, гравитация. InputComponent – управление. CollisionComponent - колладер, обработка столкновений.
GameObject может клонировать себя (prototype). Сначала все объекты создаются, устанавливаются их параметры, затем они добавляются в Spawner. Который впоследствии может создавать экземпляры этих объектов по строковому имени.
Прототипирование позволяет легко создавать модификации объектов. Например, несколько видов стоительных блоков, отличающяхся текстурами, но имеющими другие одинаковые параметры. Сначала создается один блок, к нему доваляются компоненты. Этот блок добавляется в spawner. И на основании этого блока создаются другие.
Объекты создаются с помощью данных, а не классов. Поэтому их создание можно легко вынести в отдельный файл (json, xml, txt). И для добавления новых видов объектов не понадобится перекомпиляция программы.
Так как все объекты создаются по имени, также и описание уровней легко переносится в текстовый файл – сколько каких объектов и где их располагать легко записывается в файле.
Объекты (блоки, веревка) не взаимодествуют напрямую друг с другом. Для этого существует объект GameManager (шаблон Mediator). Он получает сигналы и решает что делать - начисляет очки, вычисляет шатание башни, заканчивает игру