Skip to content
/ RTB Public

Platformer 2D en C++ avec SDL2. Physique, collisions, système de niveaux personnalisables. Inclut un éditeur de niveaux externe. Projet d'apprentissage game dev 2D.

Notifications You must be signed in to change notification settings

agtdbx/RTB

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

78 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎮 RTB — 2D Platformer

Platformer 2D avec physique et système de niveaux personnalisables
Projet personnel | C++ • SDL2 • Physique 2D


📖 Vue d'ensemble

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.


🖼️ Screenshots

Lvl1 Premier niveau

Lvl2 Second niveau

Menu Option des touches dans le menu

Level Editor - lvl1 Premier niveau depuis l'éditeur de niveaux


✨ Fonctionnalités

Gameplay

  • 🏃 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

Technique

  • 🔧 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)

🛠️ Éditeur de niveaux

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

🎮 Utilisation

Compilation

Prérequis : C++17, SDL2, SDL2_image, SDL2_mixer

Linux

# 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

🎯 Contrôles

Touche Action
ESC Quitter/Menu

Le reste est changeable depuis le menu Option !


📂 Structure du projet

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

🧮 Aspects techniques

Boucle de jeu

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
}

Système physique

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 collision

Format de niveau

Les niveaux sont stockés dans des fichiers JSON. Vous pouvez utiliser l'éditeur de niveau pour créer ou modifier des niveaux.

Installation de l'éditeur

# 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 run

Les 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 !

Rendu SDL2

// 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);

🎯 Objectifs pédagogiques

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

🚧 État du projet

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.


📦 Dépendances

  • C++17 (GCC 9.0+)
  • SDL2 (fenêtrage, rendu, événements)
  • SDL2_image (chargement PNG/JPG)
  • SDL2_mixer (audio, optionnel)
  • Meson/Ninja (build system)

Installation des dépendances (Linux)

# Automatique via make
make install

# Ou manuellement
sudo apt install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev

📚 Ressources utiles


📜 License

Projet personnel — Code libre d'utilisation à des fins éducatives.


👤 Auteur

Auguste Deroubaix (agtdbx) 🔗 GitHub du projet

About

Platformer 2D en C++ avec SDL2. Physique, collisions, système de niveaux personnalisables. Inclut un éditeur de niveaux externe. Projet d'apprentissage game dev 2D.

Topics

Resources

Stars

Watchers

Forks

Languages