Simple browser game Demo on blast-game.netlify.app
Node.js 16
# clone repo
npm i # install dependencies
npm run favicon # generate favicon and meta
npm run build || npm run dev # build to dist or run dev server
Task description
Реализовать прототип игры в жанре “головоломка с механикой Blast”. Описание общей механики игры Игра состоит из игрового поля произвольного размера N*M. В каждой ячейке поля находится игровой объект (далее именуемый тайл) определенного цвета. Количество возможных вариантов цветов равно C.
Начальное состояние поля задается случайно (вероятность цвета тайла является равновероятной). При клике на тайл сжигается (удаляется) область, состоящая из группы прилегающих тайлов того же цвета, размер группы не может быть меньше чем K (по умолчанию K=2). На месте удаленных должны образоваться пустые места.
Далее происходит перемещение тайлов на пустые места сверху вниз. Если верхняя ячейка становится пустой, необходимо сгенерировать новый тайл и переместить его в эту ячейку. Процесс перемещения и добавление новых тайлов должен быть непрерывный и происходит до тех пор, пока поле снова не будет полностью заполнено.
На заполненном поле всегда можно сжечь тайлы. Если такой возможности нет, то необходимо перемешать тайлы на поле (количество перемешиваний S). Если же после перемешивания нет возможности сжечь тайлы, то такая ситуация является проигрышем для игрока.
Цель игры – набрать X очков за Y ходов, иначе проигрыш. Значение количества очков и ходов для выигрыша, а также формула начисления очков остается на усмотрение соискателя.
Перед выполнением тестового задания советуем ознакомится со списком игр с механикой “Blast” (см. ниже) для лучшего понимания игрового процесса.
- Выполнить реализацию на JavaScript + Canvas
- Допустимо использование следующих фреймворков и игровых движков: Pixi.js / Phaser.js / Cocos2d JS / CocosCreator
- Недопустимо использование React.js, Vue.js и другие производные фреймворки для работы с DOM
- Использовать при разработке принципы SOLID
- Отделить логику игры и отображение
- Разбить игру на отдельные состояния (сцены)
- Реализовать анимации для перемещения и сжигания тайлов
- Отображение количества оставшихся ходов и набранных очков
- Обработать состояние выигрыша или проигрыша
- Использовать приложенный набор ассетов (см. ниже)
- Исходники выложить на github.com / gitlab.com / bitbucket.com
- Предоставить ссылку на рабочий проект на общедоступном хостинге (например https://pages.github.com или подобные)
- Реализовать “бустер бомба”
Описание: При активации бустера и клика по полю, в данной клетке сжигаются тайлы в радиусе R клеток. - Реализовать “бустер телепорт” Описание: Бустер позволяет поменять два тайла местами.
- Реализовать механику “супер тайла”
Описание:
Если при уничтожении размер группы тайлов больше чем L, то тогда на месте клетки, по которой был клик, появится новый тайл. По клику на него активизируется определенная логика, возможные варианты:- Сжигается вся строка в которой находится тайл
- Сжигается весь столбец в котором находится тайл
- Сжигаются тайлы в радиусе R клеток
- Сжигается всё поле
- Применение модульного тестирования
- Атомарные коммиты в репозитории
- Использование ES6 + Babel
- Сборка проекта gulp / webpack
Необходимо выполнение основного задания, а также минимум одного дополнительного задания.