Небольшая аркадная игра на C++ с использованием raylib и CMake.
Управляйте космическим кораблём, уклоняйтесь от астероидов, собирайте бонусы и побеждайте собственный рекорд.
Игра использует внешние текстуры, sprite-sheet анимации, звуковые эффекты и OGG-музыку из папки assets/.
Если ассеты не загрузятся, часть визуала и звука имеет процедурный fallback, чтобы игра не падала при запуске.
WASDили стрелки — управление кораблём.- Уклоняйтесь от падающих астероидов.
- Пролетайте рядом с угрозами, чтобы получать
near miss-очки и разгонять множитель. - Собирайте жёлтые бонусы, чтобы получить дополнительные очки.
- Собирайте синие щиты, чтобы пережить один удар.
- Собирайте зелёные и фиолетовые бонусы, чтобы временно ускорить стрельбу или получить веерный выстрел.
P— пауза.SpaceилиCtrlво время игры — стрелять.Enter,SpaceилиR— начать игру или перезапустить после Game Over.Sв главном меню — настройки.Lв главном меню — таблица рекордов.Cв настройках — очистить таблицу рекордов и лучший счёт.- После окончания игры введите имя и нажмите
Enter, чтобы сохранить результат. Esc— вернуться в меню или выйти из игры.
space-dodger-deluxe/
├── .github/workflows/ # Проверка сборки и тестов в GitHub Actions
├── assets/ # Будущие текстуры, звуки и скриншоты
├── docs/ # Архитектура и заметки по проекту
├── include/ # Заголовочные файлы
├── platform/ # Заметки по Android/iOS-обвязке
├── src/ # Исходники C++
├── tests/ # Простые unit-тесты логики
├── CMakeLists.txt # Конфигурация CMake
├── LICENSE
└── README.md
- Компилятор C++ с поддержкой C++17
- CMake 3.20+
- Git
- raylib, установленный в системе, или интернет при первом запуске CMake, чтобы CMake автоматически загрузил raylib
Если в репозитории вашего дистрибутива есть raylib:
sudo apt update
sudo apt install cmake build-essential git libraylib-devЕсли libraylib-dev недоступен, установите только базовые инструменты. CMake скачает raylib сам:
sudo apt update
sudo apt install cmake build-essential gitДля сборки raylib на Linux могут понадобиться системные библиотеки OpenGL/X11:
sudo apt install libasound2-dev libx11-dev libxrandr-dev libxi-dev libgl1-mesa-dev libglu1-mesa-dev libxcursor-dev libxinerama-devcmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release# Linux / macOS
./build/space_dodger
# Windows, Visual Studio
./build/Release/space_dodger.exe
# Windows, MinGW
./build/space_dodger.execmake -S . -B build -DCMAKE_BUILD_TYPE=Debug
cmake --build build --config Debug --target unit_tests
ctest --test-dir build --output-on-failureUnit-тесты проверяют математические функции, JSON-сохранение рекорда/настроек/таблицы рекордов с именами, волны, а также headless-логику игровых объектов: игрока, астероидов, пуль, бонусов и частиц. Они не открывают окно и не требуют запуска графического режима.
В проекте уже есть несколько защит от типичных проблем:
- выход из меню выполняется через флаг завершения игрового цикла, без отрисовки после закрытия окна;
- рекорд, сложность и переключатели звука/музыки сохраняются в JSON-файл
space_dodger_save.json; - повреждённый или отрицательный рекорд считается нулём;
- таблица рекордов хранит лучшие результаты и ограничивается верхними позициями;
- имена игроков очищаются перед сохранением, чтобы JSON оставался предсказуемым;
- тесты игровой логики запускаются локально и в GitHub Actions.
- Игровой цикл с рендерингом и обновлением объектов.
- Движение корабля с нормализацией диагонали.
- Процедурная генерация астероидов и звёздного поля.
- Бонусы: очки и щит.
- Оружие и пули.
- Система риска и награды:
near miss, плавающие очки и множитель комбо. - Временные оружейные усиления: rapid fire и spread shot.
- Количество жизней зависит от сложности: Easy прощает больше ошибок, Hard оставляет один шанс.
- Несколько типов астероидов: обычные, быстрые и тяжёлые.
- Босс на каждой третьей волне.
- Баннеры волн и полоска здоровья босса.
- Волны врагов с ростом скорости и частоты появления.
- Разные типы боссов: Cruiser, Striker и Carrier.
- Фазы боссов с усилением атак при снижении здоровья.
- Вражеские снаряды босса с прямыми, волновыми, дрейфующими и дуговыми траекториями.
- Набор отдельных внешних спрайтов в
assets/textures/sprites/. - Sprite-sheet анимации корабля, боссов и взрывов.
- Внешние звуки
assets/sounds/*.wav. - Несколько скачанных CC0 музыкальных loop-файлов в OGG для меню, игры, босса и Game Over.
- Переключение музыки по состоянию игры.
- Меню настроек со сложностью, звуками, музыкой и очисткой рекордов.
- Ввод имени игрока после Game Over.
- Экран таблицы рекордов из главного меню.
- Сохранение рекорда, таблицы рекордов с именами и настроек в JSON.
- Статусы игры: меню, настройки, игра, пауза, Game Over.
Для web-версии нужен Emscripten. После активации окружения Emscripten:
emcmake cmake -S . -B build-web -DCMAKE_BUILD_TYPE=Release
cmake --build build-web --parallelРезультат будет собран как HTML-приложение.
В platform/android добавлен стартовый Gradle/NDK-проект с NativeActivity.
В platform/ios добавлен CMake/Xcode target и скрипт build_ios.sh.
Для реальной сборки нужны соответствующие SDK/NDK/Xcode и raylib, собранный для целевой платформы.
Проверить наличие инструментов можно командой:
./scripts/check_mobile_env.shAndroid SDK/NDK можно держать локально в .android-sdk/, Gradle/CMake — в .dev-tools/; эти каталоги игнорируются Git.
Debug APK собирается командой из scripts/check_mobile_env.sh, но запуск на реальном телефоне требует подключенного устройства или эмулятора.
iOS-проверка требует macOS с Xcode, потому что xcodebuild недоступен на Linux.
Музыка взята из набора 5 Chiptunes (Action) от SubspaceAudio / Juhani Junkala на OpenGameArt.
Лицензия: CC0. Подробности сохранены в assets/music/ATTRIBUTION.md.
Проект находится в активной разработке. В следующих версиях можно улучшить:
- Проверить Android APK на реальном устройстве или эмуляторе.
- Проверить iOS-проект на macOS с Xcode и устройством или симулятором.
- Заменить процедурно собранные sprite-sheet анимации на финальный авторский набор кадров.
MIT License.