| includes | ||
| libft | ||
| map | ||
| mlx | ||
| sprite | ||
| srcs | ||
| Makefile | ||
| README.md | ||
Cub3D
Description
Cub3D est un projet de l'École 42 qui consiste à créer un moteur de rendu 3D inspiré du jeu Wolfenstein 3D. Le projet utilise la technique du raycasting pour créer un environnement 3D navigable en temps réel.
Objectifs pédagogiques
- Comprendre les bases du rendu graphique 3D
- Maîtriser la technique du raycasting
- Manipuler des textures et des sprites
- Gérer les événements clavier et souris
- Optimiser les performances en temps réel
Fonctionnalités
- Rendu 3D en temps réel avec raycasting
- Déplacement fluide du joueur (WASD)
- Rotation de la caméra avec les flèches directionnelles
- Textures murales différenciées selon l'orientation
- Système de collision avec les murs
- Parsing de map depuis un fichier .cub
- Gestion des couleurs pour le sol et le plafond
Technologies utilisées
- Langage : C
- Bibliothèque graphique : MiniLibX
- Système de build : Makefile
- Mathématiques : Trigonométrie, géométrie vectorielle
Prérequis
- GCC compiler
- MiniLibX library
- Make
- Système X11 (Linux) ou équivalent
Installation et compilation
1. Cloner le projet
git clone <repository-url>
cd Cub3D
2. Compiler le projet
make
3. Nettoyer les fichiers objets
make clean # Supprime les .o
make fclean # Supprime tout + l'exécutable
make re # Recompile tout
Utilisation
Lancement du jeu
./cub3D maps/map.cub
Contrôles
- W, A, S, D : Déplacement
- Flèches gauche/droite : Rotation de la caméra
- ESC : Quitter le jeu
Format de map (.cub)
NO ./textures/north_texture.xpm
SO ./textures/south_texture.xpm
WE ./textures/west_texture.xpm
EA ./textures/east_texture.xpm
F 220,100,0
C 225,30,0
1111111111111111111111111
1000000000110000000000001
1011000001110000000000001
1001000000000000000000001
111111111011000001110000000000001
100000000011000001110111111111111
11110111111111011100000010001
11110111111111011101010010001
11000000110101011100000010001
10000000000000001100000010001
10000000000000001101010010001
11000001110101011111011110N0111
11110111 1110101 101111010001
11111111 1111111 111111111111
Structure du projet
Cub3D/
├── Makefile # Compilation
├── includes/ # Headers (.h)
├── srcs/ # Code source
│ ├── main.c
│ ├── cast_ray/ # Algorithme de raycasting
│ ├── key_event/ # Gestion des événements
│ ├── parsing/ # Lecture et validation de la map
│ └── utils/ # Fonctions utilitaires
├── libft/ # Bibliothèque personnelle
├── mlx/ # MiniLibX
├── map/ # Fichiers de cartes
└── sprite/ # Textures et sprites
Algorithme de raycasting
Le raycasting fonctionne en :
- Lance un rayon pour chaque colonne de l'écran
- Calcule la distance jusqu'au premier mur touché
- Détermine la hauteur du mur à afficher
- Applique la texture appropriée selon l'orientation
Normes et contraintes 42
- Code conforme à la Norme 42
- Gestion stricte de la mémoire (pas de leaks)
- Gestion d'erreurs robuste
- Interdiction des variables globales
- Utilisation limitée des fonctions autorisées
Compétences développées
- Programmation graphique en C
- Mathématiques appliquées (trigonométrie)
- Optimisation d'algorithmes
- Gestion mémoire rigoureuse
- Architecture logicielle
Auteur
Alexandre Pommier (apommier) - École 42