You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Aim helper (рассчет отскока от ракетки и текущая траектория шарика)
Bricks collision drawer (показывает восьмиугольники, соотв. кирпичам, линии которых при пересечении центра шарика вызовут отскок
God Mode (отскок от нижней границы мира без потери жизни)
Логические решения и особенности
Scaling шарика по Y, делает scaling по горизонтали неудобным и создает иллюзию о ширине шарика относительно других объектов (к примеру, ракетки).
использован расчет пересечения прямых с хитбоксами объектов
для хитбоксов кирпичей использованы восьмиугольники
для хранения кирпичей и других игровых не уникальных сущностей использован std::vector, при уничтожении кирпича память очищается, при подборе/исчезании бонуса с карты вектор чиститься, кирпичи в smart pointer'ах
Для того чтобы не пробегать по всем кирпичам во время каждого апдейта, происходит рассчет возможных задетых кирпичей при переходе из prev_pos в prev_pos + vec * elapsed, среди которых и проводится поиск удара. Снижение затратности с O(N^2) до ~O((rad / (padding_x + brick_w) + 1) * (rad / (padding_h + brick_h) + 1))
Для оптимизации памяти при работе с std::vector использованы emplace'ы, где можно
Минимальные значения размера мира зависят от параметров шарика и ракетки
Геймплей
Реализованы основы Арканоида (управление ракеткой, отскок от ракетки по формуле от расстояния до центра, удары по блокам, отскоки от границ экрана, жизни, очки и рекорд сессии)
Каждый ряд имеет свое значение очков для блоков в нем в зависимости от ряда (если не включена функция "Random brick scores")
Взрывные кирпичи с разными паттернами вызрыва (круговой, диагональ, вертикаль, горизонталь)
Бонусы (+шар, +жизнь и превращение случайного кирпича во взрывной)
Возможность выбрать начальную позицию для запуска мяча
Подбор шарика даже если центр шарика опустился ниже поверхности ракетки (вплоть до 0.5 высоты ракетки)
Мультипликатор очков в зависимости от скорости шарика и размера ракетки.
Статистика в конце игры
Известные ошибки и неточности
Чем больше радиус шарика, тем больше заметна визуальная погрешность при ударе о восьмиугольную коллизию. Решается более точным рассчетом, к примеру, с использованием уравнений эллипса для каждого угла, как в бильярде и других играх, где необходима точность.
При больших скорости и радиусе шарика возможно "пробивание" ряда, опять же скорее всего из-за восьмиугольной коллизии.