A minimal 2D game engine built in C++23 using SFML 3.0 and Entity-Component-System architecture.
- C++23 compatible compiler
- CMake 3.20+
- SFML 3.0+
Open the project in VS Code. The workspace is pre-configured with build tasks and launch configs.
- Run Connect4: press
F5or open the Run & Debug panel and selectConnect4 - Run BeachWar: select
BeachWarfrom the Run & Debug dropdown and pressF5 - CMake status bar button (bottom of screen): defaults to Connect4; click the target name in the status bar to switch
# First-time setup
mkdir build && cd build && cmake .. && cd ..
# Build and run a specific game
cmake --build build --target Connect4 && ./build/Connect4
cmake --build build --target BeachWar && ./build/BeachWarcd build && ctestAuto-fetched via CMake: Dear ImGui, ImGui-SFML, toml++, Google Test
- https://www.youtube.com/playlist?list=PL_xRyXins848Mfiv4hIgiMZgLpzFT7ohv
- https://www.youtube.com/playlist?list=PL_xRyXins848ETdOaOKyGMrNzgJFI0xeF
- https://www.youtube.com/playlist?list=PL_xRyXins84--QDSV3_7CyPZrHEfVXKm4
flowchart TD
Diavolo["Diavolo (Engine Core)"]
Window["SFML RenderWindow"]
DebugUI["DebugUI (ImGui)"]
Assets["Assets"]
Scene["Scene"]
PlayScene["PlayScene"]
EntityManager["EntityManager"]
AISystem["AISystem"]
MovementSystem["MovementSystem"]
AnimationSystem["AnimationSystem"]
CollisionSystem["CollisionSystem"]
LifespanSystem["LifespanSystem"]
CameraSystem["CameraSystem"]
%% Core relationships
Diavolo --> Window
Diavolo --> Assets
Diavolo --> DebugUI
Diavolo --> Scene
Scene --> PlayScene
PlayScene --> EntityManager
%% ECS Systems
EntityManager --> AISystem
EntityManager --> MovementSystem
EntityManager --> AnimationSystem
EntityManager --> CollisionSystem
EntityManager --> LifespanSystem
EntityManager --> CameraSystem
%% User input and rendering
Window --> Diavolo
DebugUI --> Diavolo
PlayScene --> Window