Read this in other languages: English, Русский
Презентация (рус.) здесь
От лица всей нашей команды хотим сказать огромное спасибо Виталию Селищеву, нашему ментору, за его неоценимый вклад в проект. Помимо основных обязанностей ментора Виталий проводил для нас долнительные онлайн-встречи, где помогал решать проблемы, с которыми мы сталкивались по мере разработки, также Виталий проводил code-review, на котором указывал на наши ошибки и предлагал возможные альтернативы по написанию кода, которые бы облегчили нам процесс разработки. И даже это еще не все: практически на каждой онлайн-встрече Виталий показывал нам различные паттерны ООП и методы решения классических проблем, связанных с созданием архитектуры проектов.
Enchanted Towers — мобильная игра в жанре средневекового фэнтези, в которой игроки должны соревноваться, захватывая и удерживая башни на реальной карте, колдуя заклинания на экране своего смартфона или на настоящей бумаге.
На карте расположены метки (башни), игроки должны вживую добираться до башен, чтобы иметь возможность захватить их и впоследствии устновить свои защитные заклинания. Владельцы башен могут из любой точки мира воспрепятствовать атакующим, сфотографировав рисунок одного из трез доступных защитных заклинаний с уникальным эффектом на бумаге.
Чары и заклинания, совершенствование навыков мага:
Маг, имея определенный набор чар (узоров), формирует из чар заклинание на канвасе, далее данное заклинание устанавливается на стену защиты башни.
Атакующий:
Атакующий должен угадать заклинание на основе списка используемых при зачаровании данной стены стихий. Атакующий должен повторить заклинание, нарисовав его с >= N%
совпадением с тем, что установлено на стене защиты. Атакующий должен быть в непостедственной близости к башне, чтобы начать ее захват.
Обороняющийся:
Обороняющийся для защиты башни во время атаки может нарисовать на листе бумаги специальный узор, который будет отвечать специальному оборонительному заклинанию, далее он загружает его через камеру в нашу игру. Узор сопостовляется с оборонительным заклинанием, и если сопоставление корректно на >= N%
, то оно срабатывает, и исполняется какое-то действие над атакующими магами:
- Инвертирование холста для рисования по оси X
- Инвертирование холста для рисования по оси Y
- Вибрация телефона
Башни:
Башня может иметь несколько стен защиты. Чтобы ее захватить необходимо уничтожить все стены защиты по очереди.
- Регистрация/авторизация
- Сессия захвата и обороны башни
- Сессия установки заклинаний на стены башни
- Распознавание контуров заклинаний и подстановка на имеющиеся темплейты
- Использование камеры для захвата картинки в высоком качестве
- Обработка изображения и выделение контуров
- Специальные эффекты оборонительных заклинаний: инверсия канвасов атакующий по верткали, горизонтали и включение вибрации на их устройствах.
Технология | Описание |
---|---|
Android SDK | Клиент игры + UI |
gRPC | Сетевое взаимодействие |
Google Map API | Карта |
PostgreSQL | База данных |
JBcrypt | Хэширование паролей (связано с сервисом авторизации) |
Hibernate | ORM для базы данных |
OpenCV (quickbirds) | Распознование изображений |
- Настройка сборки проекта и зависимостей
- Разработка UI игры
- Сервис по созданию защитных заклинаний
- Сервис атаки защитных стен
- Сервис наблюдения за атакующим башни
- Авторизация, регистрация и интерсепторы запросов
- Функционал взаимодействия на холсте
- Pattern matching: поиск узора, похожего на нарисованный
- Сервис атаки защитных стен
- Сервис наблюдения за атакующими башни
- Image recognition: получение и предобработка фотографии
- Сервис установки противодействующих заклинаний
- Книга заклинаний: отрисовка
- Подключение Google Maps API обработка взаимодействий
- Запрос и обработка прав на геолокацию
- Отрисовка башен и игрока на карте и обработка событий клика
- Запрос координат башен при старте карты
- Подключение Hibernate и базы данных
- Авторизация и регистрация
- Интерсепторы запросов для передачи токена игровой сессии
Youtube-видео с геймплеем (начать на картинку):
Enchanted Towers - запись геймплея
- PostgreSQL
- GRPC
- OpenCV (quickbirds)
- jts
- Google Maps API
- Hibernate ORM
- JWT
git clone https://github.com/Giga-Chad-LLC/Enchanted-Towers.git
- Сборка proto-моделей:
- Запустить задачу:
gradle :common:utils:build
- А затем:
gradle :common:utils:SyncProtobufFiles :common:utils:SyncProtoGrpcDependencies
- Удалить папку
/common/build/generated/source
- При повторной пересборке моделей необходимо вручную удалить предыдщую папку со сгенерированными файлами
- Запустить задачу:
- Запустить докер-образ базы данных:
cd /docker && docker-compose up
- После чего вначале запускаются клиенты (target:
client.app
), затем сервер (taget:server
)