Le projet so_long
consiste à créer un petit jeu en vue 2D
, reposant sur la MiniLibX. L’objectif est d’afficher une carte, représentée par un fichier .ber
, dans laquelle un personnage peut se déplacer afin de collecter des objets et atteindre une sortie. Le jeu propose une mécanique simple de déplacement, la prise en compte de collisions, ainsi qu’un système d’interactions élémentaires (collecte, détection de victoire, gestion d’ennemis optionnels, etc.).
Le but est d’apprendre à manipuler la MiniLibX, à gérer des textures, la lecture et validation de fichiers de configuration, et à mettre en œuvre une logique de jeu simple, tout en respectant les normes et contraintes de l' École 42
.
- Afficher une grille de jeu en
2D
à partir d’une carte.ber
. - Gérer le déplacement du joueur dans un environnement fermé.
- Collecter tous les objets (collectibles) avant d’atteindre la sortie.
- Assurer une validation robuste du contenu de la carte (bords, format, nombre de collectibles, position du joueur et de la sortie).
- Respecter les règles imposées par
MinilibX
et l’écosystème42
. - Optionnel (bonus) : Ajouter des ennemis, un compteur de mouvements à l’écran, des animations, ou d’autres fonctionnalités avancées.
- Moteur 2D basique : Affiche chaque case de la carte avec la texture correspondante (murs, sol, collectibles, sortie, joueur).
- Validation des cartes : Vérification stricte des fichiers
.ber
(format, présence des éléments obligatoires, validation par flood-fill, etc.). - Collecte d’objets & condition de victoire : Le joueur doit récupérer tous les objets avant de pouvoir sortir.
- Mouvements du joueur : Contrôle du déplacement via le clavier, gestion des collisions, et affichage du compteur de mouvements.
- Version bonus : Support d’ennemis, animations supplémentaires, effets visuels, comptage du temps ou affichage sur la fenêtre, etc.
.
├── includes
│ ├── so_long.h
│ └── so_long_bonus.h
├── Makefile
├── maps
│ ├── mandatory
│ │ └── map1.ber
│ └── bonus
│ └── map1.ber
├── README.md
├── screenshot.png
├── so_long_representation.webp
├── srcs
│ ├── border_and_character_checks.c
│ ├── collectible_assets_handler.c
│ ├── collectible_exit_map_validation.c
│ ├── elements_positioning.c
│ ├── error_and_exit_handler.c
│ ├── grid_regularity_check.c
│ ├── keyboard_controls_and_movement.c
│ ├── main.c
│ ├── map_allocation_and_reading.c
│ ├── map_ber_file_check.c
│ ├── map_flood_fill_check.c
│ ├── move_counter_display.c
│ ├── player_actions_and_game_update.c
│ ├── resource_cleanup.c
│ ├── set_and_win_init.c
│ ├── texture_file_existence_check.c
│ ├── texture_init.c
│ ├── texture_loader.c
│ └── texture_positioning.c
├── srcs_bonus
│ ├── border_and_character_checks_bonus.c
│ ├── collectible_assets_handler_bonus.c
│ ├── collectible_exit_map_validation_bonus.c
│ ├── elements_positioning_bonus.c
│ ├── error_and_exit_handler_bonus.c
│ ├── grid_regularity_check_bonus.c
│ ├── keyboard_controls_and_movement_bonus.c
│ ├── main_bonus.c
│ ├── map_allocation_and_reading_bonus.c
│ ├── map_ber_file_check_bonus.c
│ ├── map_flood_fill_check_bonus.c
│ ├── move_counter_display_bonus.c
│ ├── player_actions_and_game_update_bonus.c
│ ├── resource_cleanup_bonus.c
│ ├── set_and_win_init_bonus.c
│ ├── texture_file_existence_check_bonus.c
│ ├── texture_init_bonus.c
│ ├── texture_loader_bonus.c
│ └── texture_positioning_bonus.c
└── xpm
├── border_bottom.xpm
├── border_left.xpm
├── border_right.xpm
├── border_top.xpm
├── collectible*.xpm
├── corner_*.xpm
├── exit_*.xpm
├── ground_texture.xpm
├── lethal_enemies_*.xpm
├── player_*.xpm
└── wall_texture.xpm
- (Note : Le symbole
*
indique de multiples variantes de fichiers similaires.)
git clone git@github.com:raveriss/so_long.git
cd so_long
Utilisez le Makefile pour compiler le projet avec les options requises (-Wall
-Wextra
-Werror
).
Commandes disponibles :
make # Compile la version mandatory
make clean # Supprime les fichiers objets
make fclean # Supprime les fichiers objets et binaires
make re # Recompile le projet
make bonus # Compile la version bonus du projet
Argument :
<path_to_map.ber>
: Chemin vers une carte valide au format .ber
.
./so_long <path_to_map.ber>
Exemple :
./so_long maps/mandatory/map1.ber
./so_long_bonus <path_to_map.ber>
Exemple :
./so_long_bonus maps/bonus/map1.ber
- Cartes valides : Testez avec les cartes du dossier
maps/mandatory/
pour vérifier le bon fonctionnement. - Cartes invalides : Créez des cartes invalides ou modifiez les exemples pour tester la robustesse de la validation (trous dans la carte, pas de collectibles, pas de sortie, fichier corrompu, etc.).
Key / Input | Action |
---|---|
W / Z |
Déplacer vers le haut |
A / Q |
Déplacer vers la gauche |
S |
Déplacer vers le bas |
D |
Déplacer vers la droite |
ESC / Croix |
Quitter le jeu |
(Adapter les touches suivant le clavier AZERTY
/QWERTY
si besoin.)
Vérifiez l'absence de fuites de mémoire et autres erreurs :
valgrind ./so_long <path_to_map.ber>
- Fichiers .ber invalides : Testez les scénarios où le fichier n’existe pas, est corrompu ou ne se termine pas par
.ber
. - Validation de la carte : Vérifiez les erreurs liées au placement du
joueur
, desmurs
, descollectibles
, et de lasortie
. - Manque d’éléments essentiels : Assurez-vous que le programme signale l’absence du
joueur
, de lasortie
ou descollectibles
.
- Ajout d’ennemis mobiles ou statiques.
- Animations avancées (mouvement du
joueur
, changement detexture
, etc.). - Affichage du compteur de mouvements à l’écran.
- Détection de collisions plus complexes ou introduction de mécanismes additionnels.