Platformer 2D avec physique et système de niveaux personnalisables
Projet personnel | C++ • SDL2 • Physique 2D
RTB est un platformer 2D développé en C++ avec la bibliothèque SDL2. Le jeu propose des mécaniques de plateforme classiques avec un système physique, des collisions, et un moteur de niveaux entièrement modifiable via un éditeur externe.
Le projet explore les fondamentaux du game dev 2D : boucle de jeu, gestion d'événements, physique, rendu de sprites, animations, et chargement de niveaux depuis fichiers.
Option des touches dans le menu
Premier niveau depuis l'éditeur de niveaux
- 🏃 Contrôles fluides — Déplacement gauche/droite, saut, physique simple
- 🎯 Système de collision — Détection précise avec les plateformes et obstacles
- ⚙️ Physique 2D — Gravité, friction, vélocité, accélération
- 🌍 Système de niveaux — Chargement depuis fichiers, plusieurs niveaux jouables
- 🎨 Sprites et animations — Rendu 2D avec sprites, animations du personnage
- 📦 Objets interactifs — Plateformes, obstacles, zones de mort, points de spawn
- 🔧 Architecture modulaire — Code organisé (game loop, input, physics, render)
- 📄 Format de niveaux — Fichiers texte/JSON pour définir les niveaux
- 🖼️ Rendu SDL2 — Gestion de textures, sprites, caméra 2D
- ⌨️ Gestion des inputs — Clavier, événements SDL
- 🎵 Audio — Support SDL_mixer (musiques, effets sonores)
Le projet est accompagné d'un éditeur de niveaux dédié permettant de créer et modifier les niveaux de manière visuelle :
🔗 level_editor_RTB — Éditeur graphique pour RTB
Fonctionnalités de l'éditeur :
- Placement de tuiles/objets par clic souris
- Grille d'édition visuelle
- Export de niveaux au format compatible RTB
- Prévisualisation en temps réel
Prérequis : C++17, SDL2, SDL2_image, SDL2_mixer
# Cloner le dépôt
git clone https://github.com/agtdbx/RTB.git
cd RTB
# Installer les dépendances SDL2
make install # Nécessite sudo (installe SDL2 via apt)
# Compiler le projet
make
# Lancer le jeu
make run
# ou
cd release; ./RTB| Touche | Action |
|---|---|
| ESC | Quitter/Menu |
Le reste est changeable depuis le menu Option !
RTB/
├── data/ # Ressources
│ ├── fonts/ # Polices
│ ├── levels/ # Fichiers de niveaux (.json)
│ ├── saves/ # Sauvegardes des options
│ ├── sounds/ # Musiques et effets sonores
│ └── sprites/ # Sprites du joueur, tuiles, objets
├── include/ # Headers (.h)
├── readme-data/ # Images du readme
├── src/ # Code source C++
├── subprojects/ # Dépendances (SDL2, libjson)
├── Makefile # Wrapper de build
├── meson.build # Configuration build Meson
└── README.md # Ce fichier
Boucle classique Input → Update → Render avec delta time :
while (running)
{
float deltaTime = calculateDeltaTime();
handleInput(); // Clavier, souris, événements SDL
update(deltaTime); // Physique, logique, IA
render(); // Rendu des sprites via SDL2
SDL_Delay(frameDelay); // Cap à 60 FPS
}Physique 2D simplifiée inspirée des platformers classiques :
- Gravité : Accélération constante vers le bas
- Vélocité : Vitesse horizontale/verticale du joueur
- Friction : Ralentissement au sol
- Saut : Impulsion verticale instantanée (coyote time, jump buffering)
- Collisions AABB : Bounding boxes rectangulaires pour la détection
// Pseudo-code physique
velocity.y += gravity * deltaTime;
velocity.x *= friction;
position += velocity * deltaTime;
checkCollisions(); // Ajuste position si collisionLes niveaux sont stockés dans des fichiers JSON. Vous pouvez utiliser l'éditeur de niveau pour créer ou modifier des niveaux.
# L'installation doit se faire à côté de se repo
ls # -> RTB ...
# Clone l'éditeur
git clone https://github.com/agtdbx/level_editor_RTB
cd level_editor_RTB
# Compilation de l'éditeur
make
# Lancement de l'éditeur
make runLes niveaux modifier et créer seront directement dans le dossier data/levels de ce repos.
Seuls les niveaux test1, test2 et test3 seront chargé. Il faudra les remplacer pour y jouer.
Attention ! : L'input pour le nom du fichier est en qwerty !
// Charger texture
SDL_Texture* playerTexture = IMG_LoadTexture(renderer, "assets/player.png");
// Rendu avec caméra
SDL_Rect srcRect = {frameX, frameY, 32, 32}; // Animation frame
SDL_Rect destRect = {
player.x - camera.x, // Position relative à la caméra
player.y - camera.y,
32, 32
};
SDL_RenderCopy(renderer, playerTexture, &srcRect, &destRect);Ce projet personnel vise à maîtriser :
- ✅ Architecture de jeu 2D — Game loop, input, update, render
- ✅ Physique de platformer — Gravité, sauts, collisions
- ✅ Gestion de ressources — Chargement de textures, sons, niveaux
- ✅ SDL2 — Fenêtrage, rendu 2D, événements, audio
- ✅ C++ moderne — Classes, héritage, pointeurs intelligents
- ✅ Design de niveaux — Éditeur externe, formats de fichiers
Note : Ce projet est une version d'apprentissage et ne sera pas continué sous cette forme. Les leçons tirées serviront de base pour de futurs projets avec une architecture plus robuste.
- C++17 (GCC 9.0+)
- SDL2 (fenêtrage, rendu, événements)
- SDL2_image (chargement PNG/JPG)
- SDL2_mixer (audio, optionnel)
- Meson/Ninja (build system)
# Automatique via make
make install
# Ou manuellement
sudo apt install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev- SDL2 Documentation
- Lazy Foo's SDL2 Tutorials
- Game Programming Patterns (Robert Nystrom)
- Fix Your Timestep (Glenn Fiedler)
Projet personnel — Code libre d'utilisation à des fins éducatives.
Auguste Deroubaix (agtdbx) 🔗 GitHub du projet

