Skip to content

afuma/42-So-Long

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

So Long

So Long

42 School Language Graphics

📖 Description

So Long est un jeu 2D développé en C utilisant la bibliothèque graphique MiniLibX. Ce projet fait partie du cursus de l'école 42 et consiste à créer un jeu de type "collecte et évasion" où le joueur doit récupérer tous les objets présents sur la carte avant de pouvoir s'échapper.

Le jeu propose une expérience immersive avec des sprites animés, des ennemis intelligents et un système de validation de cartes sophistiqué utilisant des algorithmes de pathfinding.

✨ Fonctionnalités

🎮 Gameplay

  • Mouvement fluide : Déplacement du joueur dans 4 directions avec animations
  • Collectibles animés : Bouteilles magiques avec effets visuels
  • Ennemis intelligents : Fantômes avec IA de mouvement et détection de collision
  • Système de progression : Compteur de mouvements affiché en temps réel
  • Objectif clair : Collecter tous les objets avant d'atteindre la sortie

🛠️ Techniques

  • Validation de cartes : Vérification automatique de la validité des niveaux
  • Algorithme de pathfinding : Backtracking pour s'assurer qu'une solution existe
  • Gestion mémoire optimisée : Allocation et libération propre des ressources
  • Architecture modulaire : Code organisé en modules fonctionnels

🔧 Prérequis

Système

  • OS : Linux (testé sur Ubuntu/Debian)
  • Compilateur : GCC ou Clang
  • Make : Pour la compilation automatisée

Bibliothèques

# Installation des dépendances sur Ubuntu/Debian
sudo apt-get update
sudo apt-get install gcc make xorg libxext-dev libbsd-dev

🚀 Installation

1. Clonage du projet

git clone [URL_DU_REPO]
cd so-long

2. Compilation

# Compilation complète (libft + MiniLibX + so_long)
make

# Nettoyage des fichiers objets
make clean

# Nettoyage complet
make fclean

# Recompilation complète
make re

3. Vérification

# L'exécutable so_long doit être créé à la racine
ls -la so_long

🎯 Utilisation

Lancement du jeu

./so_long maps/map_1.ber

Contrôles

Touche Action
W ou Déplacer vers le haut
A ou Déplacer vers la gauche
S ou Déplacer vers le bas
D ou Déplacer vers la droite
ESC Quitter le jeu

Objectif

  1. Collecter tous les objets (bouteilles) présents sur la carte
  2. Éviter les ennemis (fantômes) qui patrouillent
  3. Atteindre la sortie (chaudron) une fois tous les objets récupérés
  4. Minimiser le nombre de mouvements pour un meilleur score

🗺️ Format des cartes (.ber)

Caractères autorisés

Caractère Élément Description
1 Mur Obstacle infranchissable
0 Sol Espace libre de déplacement
P Joueur Position de départ (unique)
C Collectible Objet à récupérer
E Sortie Point d'arrivée (unique)
M Ennemi Fantôme mobile (optionnel)

Règles de validation

  • ✅ La carte doit être rectangulaire
  • ✅ Entourée de murs (1) sur tous les bords
  • ✅ Contenir exactement un joueur (P) et une sortie (E)
  • ✅ Contenir au moins un collectible (C)
  • ✅ Tous les collectibles doivent être accessibles
  • ✅ La sortie doit être accessible après collecte de tous les objets

Exemple de carte valide

1111111111111111
1P000000C0000001
1001110001110001
100101M001010001
100111000111M001
1C000000000000E1
1111111111111111

🏗️ Architecture du code

so-long/
├── srcs/
│   ├── main/           # Fonctions principales et initialisation
│   ├── parsing/        # Validation et lecture des cartes
│   ├── images/         # Gestion des sprites et textures
│   ├── enemy/          # Intelligence artificielle des ennemis
│   └── backtracking/   # Algorithmes de pathfinding
├── includes/           # Fichiers d'en-tête
├── graphics/           # Assets graphiques (XPM/PNG)
├── maps/              # Cartes de jeu et tests
├── libft/             # Bibliothèque personnelle
└── get_next_line/     # Lecture de fichiers ligne par ligne

Modules principaux

🎮 Main (srcs/main/)

  • main.c : Point d'entrée et boucle de jeu
  • init_*.c : Initialisation des structures et de MLX
  • move.c : Gestion des déplacements du joueur
  • render.c : Affichage et rendu graphique

🔍 Parsing (srcs/parsing/)

  • valid_map_*.c : Validation des cartes selon les règles

🖼️ Images (srcs/images/)

  • charge_images_*.c : Chargement des sprites
  • put_image_*.c : Affichage des éléments graphiques

👻 Enemy (srcs/enemy/)

  • init_enemy.c : Initialisation des ennemis
  • move_enemy.c : IA et déplacements des fantômes

🔄 Backtracking (srcs/backtracking/)

  • valid_path.c : Algorithme de recherche de chemin
  • collectable.c : Vérification d'accessibilité des objets
  • exitable.c : Vérification d'accessibilité de la sortie

🎨 Assets graphiques

Le jeu utilise des sprites personnalisés au format XPM :

🏃 Personnage

  • 4 directions : Haut, Bas, Gauche, Droite
  • 3 frames d'animation par direction : Idle, Walk 1, Walk 2
  • Style : Héros dans un environnement désertique

🧪 Collectibles

  • 3 variations de bouteilles magiques flottantes
  • Animation : Rotation et scintillement

🚪 Sortie

  • 4 états : Fermé, Ouvert basique, Ouvert avec étoiles, Ouvert avec effets
  • Design : Chaudron magique

👻 Ennemis

  • 2 directions : Gauche et Droite
  • 2 frames par direction pour l'animation
  • Style : Fantômes du désert

🔧 Optimisations possibles

Le code actuel présente quelques axes d'amélioration identifiés :

Performance

  • Fonctions de mouvement : Optimiser ft_move_1, ft_move_2, ft_move_3 pour éviter les recalculs
  • Affichage : Utiliser put_image au lieu de put_mlx_img pour réduire les lignes de code

Fonctionnalités

  • Système de score : Ajouter un classement basé sur le nombre de mouvements
  • Niveaux de difficulté : Cartes avec différents niveaux de complexité
  • Sons : Effets sonores pour les actions du jeu

🧪 Tests

Cartes de test incluses

  • map_1.ber à map_5.ber : Cartes valides de difficulté croissante
  • map_with_*.ber : Cartes invalides pour tester la validation

Validation automatique

# Test avec une carte valide
./so_long maps/map_1.ber

# Test avec une carte invalide (doit afficher une erreur)
./so_long maps/map_with_no_path.ber

📝 Gestion des erreurs

Le programme gère intelligemment les erreurs :

  • Arguments invalides : Nombre incorrect d'arguments
  • Fichier introuvable : Carte inexistante
  • Format invalide : Extension non .ber
  • Carte malformée : Ne respecte pas les règles
  • Pas de solution : Aucun chemin valide trouvé
  • Erreur MLX : Problème d'initialisation graphique

👨‍💻 Auteur

Etienne - edesaint@student.42.fr

📄 Licence

Ce projet est développé à des fins éducatives dans le cadre de l'école 42.


Amusez-vous bien et que la collecte commence ! 🎮✨

About

2D video game (same in Pokemon Mystery Dungeon)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors