Skip to content

"Бабласт" — это аркадный шутер с динамичным геймплеем и простыми правилами, разработанный на C++ с использованием библиотеки SDL2

Notifications You must be signed in to change notification settings

Far4Ru/bubblast

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Бабласт - Аркадный шутер

Бабласт

Описание проекта

"Бабласт" — это аркадный шутер с динамичным геймплеем и простыми правилами, разработанный на C++ с использованием библиотеки SDL2. Визуальный стиль выполнен в конфетно-пузырьковой тематике, все графические ресурсы разработаны самостоятельно, что обеспечивает целостность и уникальность проекта. Проект создан с целью демонстрации навыков разработки игр, оптимизации кода и работы с графическими библиотеками.

Правила игры

  1. Игрок управляет персонажем, запертым на арене.
  2. Из-за границ арены несколькими волнами приходят враги нескольких видов и атакуют персонажа.
  3. Игрок может стрелять в противников, целясь с помощью мыши, и передвигаться, чтобы избегать урона.
  4. За каждого побеждённого противника игроку начисляются очки.
  5. Как только игрок потеряет все жизни или противники закончатся игра заканчивается и на экран выводится количество очков, набранных во время прохождения игры.
  6. 10 лучших результатов хранятся в файле и выводятся на экран по запросу пользователя.

Особенности

  • чистый и модульный код: проект структурирован с использованием принципов ООП и SOLID;
  • использование SDL2: для работы с графикой, звуком и вводом данных;
  • кроссплатформенность: поддержка Windows, Linux и macOS;
  • оптимизация: эффективное использование ресурсов и минимизация нагрузки на CPU/GPU;
  • гибкость: возможность легко добавлять новые уровни, врагов и механики.

Технологии

  • язык программирования: C++17;
  • библиотеки: SDL2, SDL2_image, SDL2_mixer, SDL2_ttf;
  • сборка: Make;
  • дополнительные инструменты: Git.

Архитектура проекта

Проект разделён на два основных модуля: engine и game. Каждый модуль имеет чётко определённые обязанности и взаимодействует с другими через интерфейсы, что позволяет легко расширять функциональность и поддерживать код.

Движок (engine)

Движок отвечает за низкоуровневую работу с графикой, звуком, вводом и временем. Он абстрагирует взаимодействие с SDL2 и предоставляет удобный API для игры.

Основные компоненты движка:

  • окно и рендеринг:
    • создание и управление окном;
    • отрисовка текстур и текста;
    • поддержка камеры (перемещение, масштабирование);
  • загрузка ресурсов:
    • загрузка текстур, звуков и шрифтов;
    • кэширование ресурсов для предотвращения повторной загрузки;
  • цикл отрисовки:
    • управление основным циклом игры (обновление, рендеринг);
    • поддержка фиксированного FPS;
  • обработка ввода:
    • обработка событий клавиатуры и мыши;
    • предоставление интерфейса для проверки состояния ввода;
  • коллизии:
    • проверка столкновений между объектами (AABB);
    • оптимизация для работы с большим количеством объектов;
  • время и FPS:
    • управление временем (delta time);
    • подсчёт и предоставление интерфейса для отображения FPS;
  • сцены:
    • управление переключением между сценами;
    • абстракция для создания новых сцен.

Игра (game)

Игра построена на основе движка и реализует логику, сцены и объекты. Она разделена на сцены и модули-контроллеры, которые управляют поведением объектов.

Основные компоненты игры:

Сцены:

Сцены представляют собой отдельные состояния игры, такие как меню, игровое поле, экран результатов и т.д. Каждая сцена имеет свой жизненный цикл (инициализация, обновление, рендеринг, завершение).

  • экран меню:
    • отображение главного меню;
    • переход к другим сценам (игра, настройки, результаты, выход);
  • экран игрового поля:
    • основная игровая логика;
    • управление игроком, врагами и снарядами;
  • экран настроек:
    • настройка параметров игры (полноэкранный режим, громкость музыки и звуков);
  • экран результатов:
    • отображение результатов игры (имена, очки, рекорды);
  • экраны выигрыша и проигрыша:
    • отображение сообщения о победе или поражении;
    • возможность перезапустить игру или вернуться в меню.

Модули:

Модули управляют поведением объектов и взаимодействием между ними.

  • игрок:
    • управление персонажем;
    • обработка ввода (движение, стрельба);
    • коллизии с врагами и снарядами;
  • враг:
    • логика поведения врагов (движение);
    • генерация волн врагов;
  • снаряд:
    • движение снарядов;
    • коллизии с игроком и врагами;
  • звук:
    • управление звуковыми эффектами и музыкой.

Компоненты отображения:

Компоненты отвечают за отображение информации на экране.

Принципы проектирования

  • модульность: каждый компонент (движок, сцены, контроллеры) изолирован и выполняет одну задачу;
  • разделение ответственности: движок отвечает за низкоуровневые операции, а игра — за логику и отображение;
  • масштабируемость: добавление новых сцен, врагов или механик не требует изменения существующего кода;
  • реюзабельность: движок может быть использован в других проектах.

About

"Бабласт" — это аркадный шутер с динамичным геймплеем и простыми правилами, разработанный на C++ с использованием библиотеки SDL2

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published