Skip to content

Crucinio/Arkanoid

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Реализованный функционал Debug/Cheats

  • 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 высоты ракетки)
  • Мультипликатор очков в зависимости от скорости шарика и размера ракетки.
  • Статистика в конце игры

Известные ошибки и неточности

  • Чем больше радиус шарика, тем больше заметна визуальная погрешность при ударе о восьмиугольную коллизию. Решается более точным рассчетом, к примеру, с использованием уравнений эллипса для каждого угла, как в бильярде и других играх, где необходима точность.
  • При больших скорости и радиусе шарика возможно "пробивание" ряда, опять же скорее всего из-за восьмиугольной коллизии.

About

Arkanoid Game

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published