Тестовое задание
Уважаемые кандидаты!
Учитывая ситуацию с пандемией вируса COVID-19, мы решили работать удаленно, чтобы поддержать профилактические меры и защитить наших сотрудников и их семьи. Мы заранее приносим извинения, если вы дольше ждете ответа по поводу заявления о приеме на работу или если процесс отбора дольше стандартной процедуры. По любым вопросам мы по-прежнему доступны по адресу Job@mariaglorum.com или в наших социальных сетях.
описание задачи
механика игры

На экране сверху расположены N блоков, по нижнему краю экрана движется бита. При старте игры на бите находится шарик, он запускается и летит под углом вверх, при столкновениях отскакивает от левого, правого и верхнего краев экрана. При столкновении с блоками, блоки уничтожаются (соответствующий объект должен быть удален из памяти). При столкновении с битой шарик также отскакивает. На старте игры у игрока X "жизней". Если шарик касается нижнего края экрана вне биты, то игрок теряет одну "жизнь".
условия окончания игры

Если количество жизней уменьшается до нуля, то игра заканчивается и игрок проигрывает, о чем выдается сообщение. Если уничтожены все блоки, то игра заканчивается и игрок выигрывает, о чем выдается сообщение.
управление

Игра управляется мышкой. Клик - запуск шарика, движение мышки влево-вправо двигает биту.
дополнительные требования

После окончания игры должна быть возможность рестарта с удалением всех старых объектов и созданием новых.
Алгоритм игры реализуется программно. Когда он будет реализован, в программу нужно добавить использование партиклового эффекта (эффекта частиц) — это позволит сделать игру более красивой и зрелищной.

В игре нужно использовать два партикловых эффекта. С помощью одного эффекта сделать шлейф, который будет идти за шариком. И ещё один эффект должен визуально подчеркивать момент попадания шарика в блок.
Cкорость шарика и ширина биты задаются в файле input.txt.
Файл содержит 2 строки текста и выглядит следующим образом (константы вам нужно будет задать самостоятельно):

PlatformWidth=200 Speed=50

При данных значениях это означает, что на ширина биты 200 пикселей, а шарик летит со скоростью 50 пикселей в секунду.

Расположение и количество блоков на экране задаются в файле level.txt. Структуру файла необходимо выбрать самостоятельно.
Пожалуйста, обратите внимание на то, что основная задача — запрограммировать алгоритм игры: полет шарика, работу биты, столкновение шарика с блоками.

Программная реализация алгоритма этой игры составляет основную часть тестового задания.
Помимо выполнения задания, ответьте, пожалуйста, на вопросы:
вопрос 1
Примерную оценку времени, которое вы потратили на выполнение задания.
вопрос 2
Что было делать интереснее — визуальную или техническую часть.
вопрос 3
Комментарии по архитектуре приложения: почему выбрана именно такая архитектура.
вопрос 4
Возникали ли проблемы при выполнении тестового задания.
В описании задачи указаны минимальные требования для выполнения тестового задания, финальный вариант игры необходимо усовершенствовать самостоятельно. Можно сделать упор на обе части (визуальную и техническую) и/или на одну их них.
Предполагается, что вы не будете использовать физические движки (Box2d и прочие). Также желательно использовать STL вместо сторонних библиотек. При желании можно использовать boost.
материалы и инструменты
Тестовое задание выполняется на языке программирования С++. Вы можете выполнить его на любом удобном для себя движке. Если выбор движка не имеет для вас значения или у вас нет опыта работы с движками, то можно выполнить задание на внутреннем движке нашей компании.
Если вы решили использовать наш движок, то стартовый проект для Visual Studio 2015, 2017 и XCode можно найти в приложенных материалах. Он должен компилироваться и запускаться без ошибок, но, возможно, нужно будет поправить working directory в настройках проекта. В стартовом проекте есть шаблон решения с примером рисования текстуры, привязанной к курсору мыши, простым партикловым эффектом, который следует за мышью (с needStartDeadCounter = false) и еще с одним простым эффектом (c needStartDeadCounter = true), который запускается по щелчку правой кнопкой мыши. А также есть несколько примеров партикловых эффектов с готовым набором частиц.

Графические материалы для реализации игры необходимо подобрать самостоятельно.
Рекомендации по использованию нашего движка:
Для реализации красивых и зрелищных эффектов можно использовать партикловые эффекты, матричные преобразования, distortion и т.д.
Партикловые эффекты создаются самостоятельно в редакторе эффектов. Редактор с описанием и примерами эффектов прилагается к задаче. Пример работы с эффектами есть в шаблоне решения.
Для работы со сплайнами можно использовать готовый класс движка TimedSpline. Пример работы с ним можно найти в документеОсновы использования движка и в шаблоне решения.
как мы оцениваем результат
При проверке тестового задания мы обращаем внимание на следующее:
Отсутствие ошибок в реализации логики игры и алгоритмов.
Качество и корректность кода, грамотное использование ООП, умных указателей.
Игровую составляющую (нужно настроить константы так, чтобы играть было интересно).
Визуальную составляющую.
сроки и формат сдачи
тестового задания
Ссылку на выполненное тестовое задание вы можете прислать на адрес электронной почты job@mariaglorum.com

По срокам выполнения тестового задания мы вас не ограничиваем — вы можете прислать его, когда будете полностью в нем уверены. Как правило, кандидаты справляются с ним за одну рабочую неделю.
При отправке тестового задания (через файлообменник, например, Dropbox), необходимо приложить:
1
Запускаемое тестовое приложение и все необходимые для его запуска ресурсы.
2
Исходный код: достаточно прислать только h- и cpp-файлы (если вы выполняли
задание на нашем движке, не нужно отправлять папки "engine" и "libs").
3
Название движка в том случае, если задание выполнено на стороннем движке
(не следует высылать сам движок).
Пожалуйста, вышлите тестовое задание, включая приложение, ресурсы и ответы на вопросы, единым архивом.
Обратите ваше внимание на то, что ТЗ не оплачиваемое.
Также, предоставляя результат вашего тестового задания, вы принимаете тот факт, что ООО "Мариаглорум" может в настоящее время и/или в будущем разрабатывать внутри компании или получать от третьих лиц идеи и другие материалы, похожие по содержанию на присланные вами, но ни в коем случае не основанные на них.
Спасибо, что проявили интерес к нашей студии.
Надеемся, что тестовое задание вам покажется интересным :)
Мы всегда на связи!
Job@mariaglorum.com
22236001, Калининград, Ген. Озерова 17Б
Нажимая на кнопку, вы даете согласие на обработку персональных данных и соглашаетесь c политикой конфиденциальности.