Воксельная игра на C++23, вдохновлённая Minecraft, с собственными наработками и современным подходом
MinecraftCpp — это воксельная игра в духе Minecraft, разрабатываемая на современном C++23. Проект объединяет классические идеи Minecraft с собственными механиками и технологиями, демонстрируя чистую архитектуру, использование Entity Component System (ECS), продвинутый рендеринг через Magnum Engine и асинхронную обработку.
Проект находится в активной разработке и постоянно эволюционирует, добавляя новые возможности и улучшая существующие системы.
- Высокопроизводительный воксельный рендеринг
- Система текстурирования блоков
- Оптимизация видимых граней
- Шейдерная система на GLSL
- Камера от первого лица
- Процедурная генерация ландшафта
- Чанковая архитектура мира
- Асинхронная загрузка и генерация контента
- Гибкая система типов блоков
- Динамическое управление видимостью
- Архитектура Entity Component System
- Client-Server разделение
- Модульная кодовая база
- Система событий
- Расширяемая система компонентов
- Продвинутое логирование
- Автоматический crash reporting
- Мониторинг производительности
- Встроенная UI система
┌─────────────────────────────────────────────────────────┐
│ MinecraftCpp │
├──────────────────┬──────────────────┬───────────────────┤
│ Client │ Server │ Shared │
│ (Rendering) │ (Game Logic) │ (Core/ECS) │
├──────────────────┼──────────────────┼───────────────────┤
│ • RenderSystem │ • WorldGen │ • EntityManager │
│ • CameraSystem │ • NetworkServer │ • EventBus │
│ • UISystem │ • ChunkManager │ • Components │
│ • InputSystem │ • Physics │ • Logger │
│ • MeshBuilder │ • NetworkSystem │ • Chunk/Block │
└──────────────────┴──────────────────┴───────────────────┘
│ │ │
└─────────────────┴────────────────────┘
│
┌───────┴────────┐
│ Dependencies │
├────────────────┤
│ • Magnum │
│ • FastNoise2 │
│ • concurrencpp │
│ • spdlog │
│ • ENet │
└────────────────┘
Отвечает за рендеринг, визуализацию и взаимодействие с пользователем:
- Системы рендеринга и камеры
- Управление шейдерами и текстурами
- Построение мешей для чанков
- UI и пользовательский ввод
- Клиентское представление игрового мира
Управляет игровой логикой и серверными процессами:
- Генерация и управление миром
- Сетевое взаимодействие
- Физика и коллизии
- Авторитетная игровая логика
Содержит код, используемый и клиентом, и сервером:
- Entity Component System
- Базовые компоненты (трансформация, физика, игрок)
- Система событий
- Определения блоков и чанков
- Утилиты (логирование, хеширование, структуры данных)
- C++23 — современный стандарт языка
- GLSL — шейдерный язык для графики
| Библиотека | Назначение |
|---|---|
| Magnum | Мощный 3D графический движок |
| Corrade | Фундаментальные утилиты |
| FastNoise2 | Процедурная генерация шума |
| concurrencpp | Асинхронность и корутины |
| spdlog | Высокопроизводительное логирование |
| cpptrace | Трассировка стека вызовов |
| GLM | Математические операции |
| GLFW | Управление окнами и контекстом |
| ENet | Сетевое взаимодействие (UDP) |
| Hopscotch Map | Оптимизированная хеш-таблица |
- CMake — система конфигурации проекта
- Conan — менеджер зависимостей
- Ninja/Make — системы сборки
- ОС: Windows 10/11
- Компилятор: Поддержка C++23 (GCC, Clang, MSVC или MinGW-w64)
- GPU: Поддержка OpenGL 4.5 или выше
- CMake (3.16+)
- Conan (менеджер пакетов)
- Git (для работы с репозиторием и submodules)
- Python (для работы Conan)
git clone <repository-url>
cd Minecraft_cpp
git submodule update --init --recursive# Установка Conan (если не установлен)
pip install conan
# Настройка профиля
conan profile detect --force
# Установка зависимостей
conan install . --build=missing -s build_type=Debug# Windows
cmake --preset=default -DCMAKE_BUILD_TYPE=Debug
# Linux
cmake -B build -DCMAKE_BUILD_TYPE=Debug# Запустите сборку в вашей директории build
cmake --build <build-directory>После успешной сборки исполняемые файлы будут находиться в директории bin:
# Клиент
./bin/Client
# Сервер
./bin/ServerИгра использует стандартные элементы управления для игр от первого лица:
- Движение: WASD
- Взгляд: Мышь
- Прыжок: Пробел
- Взаимодействие: Левая/Правая кнопка мыши
- Выход: ESC
Система логирования автоматически сохраняет информацию о работе приложения в директории logs/. Логи помогают отслеживать производительность и выявлять проблемы.
Minecraft_cpp/
├── client/ # Клиентская часть
│ ├── assets/ # Игровые ресурсы
│ │ ├── textures/ # Текстуры блоков и объектов
│ │ └── ... # Другие ресурсы
│ ├── include/ # Заголовочные файлы
│ │ ├── core/ # Ядро клиентского приложения
│ │ ├── render/ # Системы рендеринга
│ │ ├── systems/ # Клиентские игровые системы
│ │ └── world/ # Работа с миром
│ ├── shaders/ # GLSL шейдеры
│ └── src/ # Реализация
│
├── server/ # Серверная часть
│ ├── include/
│ │ ├── systems/ # Серверные системы
│ │ └── world/ # Генерация и управление миром
│ └── src/ # Реализация
│
├── shared/ # Общая библиотека
│ ├── include/
│ │ ├── core/ # Базовые системы (логирование, отладка)
│ │ ├── ecs/ # Entity Component System
│ │ │ ├── component/ # Компоненты
│ │ │ ├── events/ # Система событий
│ │ │ └── system/ # Базовые интерфейсы
│ │ ├── utils/ # Вспомогательные утилиты
│ │ └── world/ # Определения мира и блоков
│ └── src/ # Реализация
│
├── extern/ # Внешние зависимости (git submodules)
│ ├── magnum/ # Графический движок
│ ├── magnum-extras/ # Расширения (UI и т.д.)
│ ├── magnum-plugins/ # Плагины для загрузки ресурсов
│ ├── corrade/ # Базовые утилиты
│ ├── enet/ # Сетевая библиотека
│ └── ... # Другие зависимости
│
└── cmake/ # Модули сборки
└── ... # Конфигурационные файлы
Проект продолжает развиваться. Ниже представлены основные направления работы:
- Архитектура Entity Component System
- Рендеринг воксельного мира
- Процедурная генерация ландшафта
- Чанковая система
- Камера и базовое управление
- Текстурирование блоков
- Системы логирования и отладки
- Серверная архитектура
- Сетевое взаимодействие
- Физика и система коллизий
- Освещение мира
- Визуальные улучшения
- Геймплей: Система инвентаря, крафтинг, взаимодействие с блоками
- Мир: Биомы, структуры, разнообразие ландшафта
- Сущности: Мобы, NPC, искусственный интеллект
- Звук: Звуковая система и окружение
- Производительность: Оптимизация рендеринга, системы LOD
- Сохранения: Система сохранения и загрузки мира
- Расширяемость: API для модификаций
Список постоянно дополняется по мере развития проекта
Сделано с ❤️ на C++23