Code Monkey home page Code Monkey logo

arkanoid's Introduction

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

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

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

arkanoid's People

Contributors

crucinio avatar aloiragstin avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.