{"id":20205783,"url":"https://github.com/raveriss/so_long","last_synced_at":"2026-06-10T05:31:10.887Z","repository":{"id":193512237,"uuid":"688951292","full_name":"raveriss/so_long","owner":"raveriss","description":"2D escape game where the player collects items and finds the shortest path to escape. Developed in C using the MiniLibX graphics library, this project combines window management, keyboard and mouse events, and display of textures and sprites. It is designed to introduce the basics of game creation","archived":false,"fork":false,"pushed_at":"2024-12-06T23:58:50.000Z","size":3418,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-03T09:42:27.285Z","etag":null,"topics":["2d-game","c-pr","game-development","graphic-design","minilibx","sprite-animation","texture-mapping"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/raveriss.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-09-08T13:00:20.000Z","updated_at":"2025-01-30T18:21:52.000Z","dependencies_parsed_at":null,"dependency_job_id":"3497e529-89b9-48f1-ab56-4a19637cee9f","html_url":"https://github.com/raveriss/so_long","commit_stats":null,"previous_names":["omisev/so_long","raveriss/so_long"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/raveriss/so_long","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raveriss%2Fso_long","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raveriss%2Fso_long/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raveriss%2Fso_long/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raveriss%2Fso_long/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/raveriss","download_url":"https://codeload.github.com/raveriss/so_long/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raveriss%2Fso_long/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34139178,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-10T02:00:07.152Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["2d-game","c-pr","game-development","graphic-design","minilibx","sprite-animation","texture-mapping"],"created_at":"2024-11-14T05:19:09.449Z","updated_at":"2026-06-10T05:31:10.866Z","avatar_url":"https://github.com/raveriss.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# so_long - École 42 | Paris\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/graphics-MinilibX-green\" alt=\"MinilibX\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/school-42-blue\" alt=\"42\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/project-so_long-orange\" alt=\"so_long\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/language-C-blue\" alt=\"Language\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/norm-42-green\" alt=\"42 Norm\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/library-Libft-orange\" alt=\"Libft\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/objective-2D%20game-yellowgreen\" alt=\"2D Game\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/assets-sprites-lightblue\" alt=\"Sprites\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/feature-pathfinding-9cf\" alt=\"Pathfinding\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/feature-keyboard%20controls-ff69b4\" alt=\"Keyboard Controls\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/repo_size-3.33%20MiB-blue\" alt=\"Repo Size\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/last_commit-14%20March%202024-lightgrey\" alt=\"Last Commit\"\u003e\n\u003c/div\u003e\n\n###\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/ayogun/42-project-badges/refs/heads/main/badges/so_longe.png?raw=true\" alt=\"Badge du projet push_swap\"\u003e\n\u003c/div\u003e\n\n##\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/Omisev/so_long/blob/main/so_long_representation.webp\" alt=\"representation\"\u003e\n\u003c/div\u003e\n\n## Description\n\nLe 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.).\n\nLe 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`**.\n\n## Objectifs\n\n- Afficher une grille de jeu en **`2D`** à partir d’une carte **`.ber`**.\n- Gérer le déplacement du joueur dans un environnement fermé.\n- Collecter tous les objets (collectibles) avant d’atteindre la sortie.\n- Assurer une validation robuste du contenu de la carte (bords, format, nombre de collectibles, position du joueur et de la sortie).\n- Respecter les règles imposées par **`MinilibX`** et l’écosystème **`42`**.\n- Optionnel (bonus) : Ajouter des ennemis, un compteur de mouvements à l’écran, des animations, ou d’autres fonctionnalités avancées.\n\n## Fonctionnalités\n\n- **Moteur 2D basique** : Affiche chaque case de la carte avec la texture correspondante (murs, sol, collectibles, sortie, joueur).\n- **Validation des cartes** : Vérification stricte des fichiers **`.ber`** (format, présence des éléments obligatoires, validation par flood-fill, etc.).\n- **Collecte d’objets \u0026 condition de victoire** : Le joueur doit récupérer tous les objets avant de pouvoir sortir.\n- **Mouvements du joueur** : Contrôle du déplacement via le clavier, gestion des collisions, et affichage du compteur de mouvements.\n- **Version bonus** : Support d’ennemis, animations supplémentaires, effets visuels, comptage du temps ou affichage sur la fenêtre, etc.\n\n## Structure du Projet\n\n```bash\n.\n├── includes\n│   ├── so_long.h\n│   └── so_long_bonus.h\n├── Makefile\n├── maps\n│   ├── mandatory\n│   │   └── map1.ber\n│   └── bonus\n│       └── map1.ber\n├── README.md\n├── screenshot.png\n├── so_long_representation.webp\n├── srcs\n│   ├── border_and_character_checks.c\n│   ├── collectible_assets_handler.c\n│   ├── collectible_exit_map_validation.c\n│   ├── elements_positioning.c\n│   ├── error_and_exit_handler.c\n│   ├── grid_regularity_check.c\n│   ├── keyboard_controls_and_movement.c\n│   ├── main.c\n│   ├── map_allocation_and_reading.c\n│   ├── map_ber_file_check.c\n│   ├── map_flood_fill_check.c\n│   ├── move_counter_display.c\n│   ├── player_actions_and_game_update.c\n│   ├── resource_cleanup.c\n│   ├── set_and_win_init.c\n│   ├── texture_file_existence_check.c\n│   ├── texture_init.c\n│   ├── texture_loader.c\n│   └── texture_positioning.c\n├── srcs_bonus\n│   ├── border_and_character_checks_bonus.c\n│   ├── collectible_assets_handler_bonus.c\n│   ├── collectible_exit_map_validation_bonus.c\n│   ├── elements_positioning_bonus.c\n│   ├── error_and_exit_handler_bonus.c\n│   ├── grid_regularity_check_bonus.c\n│   ├── keyboard_controls_and_movement_bonus.c\n│   ├── main_bonus.c\n│   ├── map_allocation_and_reading_bonus.c\n│   ├── map_ber_file_check_bonus.c\n│   ├── map_flood_fill_check_bonus.c\n│   ├── move_counter_display_bonus.c\n│   ├── player_actions_and_game_update_bonus.c\n│   ├── resource_cleanup_bonus.c\n│   ├── set_and_win_init_bonus.c\n│   ├── texture_file_existence_check_bonus.c\n│   ├── texture_init_bonus.c\n│   ├── texture_loader_bonus.c\n│   └── texture_positioning_bonus.c\n└── xpm\n    ├── border_bottom.xpm\n    ├── border_left.xpm\n    ├── border_right.xpm\n    ├── border_top.xpm\n    ├── collectible*.xpm\n    ├── corner_*.xpm\n    ├── exit_*.xpm\n    ├── ground_texture.xpm\n    ├── lethal_enemies_*.xpm\n    ├── player_*.xpm\n    └── wall_texture.xpm\n```\n-  (Note : Le symbole **`*`** indique de multiples variantes de fichiers similaires.)\n\n## Installation\n```\ngit clone git@github.com:raveriss/so_long.git\ncd so_long\n```\n## Compilation\n**Utilisez le Makefile pour compiler le projet avec les options requises (`-Wall` `-Wextra` `-Werror`).**\n\nCommandes disponibles :\n\n```bash\nmake        # Compile la version mandatory\nmake clean  # Supprime les fichiers objets\nmake fclean # Supprime les fichiers objets et binaires\nmake re     # Recompile le projet\nmake bonus  # Compile la version bonus du projet\n```\n## Lancement du Jeu\n\nArgument :\n**`\u003cpath_to_map.ber\u003e`** : Chemin vers une carte valide au format **`.ber`**.\n\n## Mandatory\n\n  ```\n  ./so_long \u003cpath_to_map.ber\u003e\n  ```\n  \n  Exemple :\n  \n  ```bash\n  ./so_long maps/mandatory/map1.ber\n  ```\n\n## Bonus\n```\n./so_long_bonus \u003cpath_to_map.ber\u003e\n```\n\n  Exemple :\n  ```bash\n  ./so_long_bonus maps/bonus/map1.ber\n  ```\n\n## Aperçu\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/Omisev/so_long/blob/main/screenshot.png\" alt=\"sreenshot\"\u003e\n\u003c/div\u003e\n\n## Tester le Projet\n- Cartes valides : Testez avec les cartes du dossier **`maps/mandatory/`** pour vérifier le bon fonctionnement.\n- 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.).\n\n## Contrôles\n\n| Key / Input    | Action                       |\n|----------------|------------------------------|\n|   **`W`** / **`Z`**\t | Déplacer vers le haut        |\n|   **`A`** / **`Q`**\t | Déplacer vers la gauche      |\n|      **`S`**\t | Déplacer vers le bas         |\n|      **`D`**\t | Déplacer vers la droite      |\n| **`ESC`** / **`Croix`**| Quitter le jeu               |\n\n(Adapter les touches suivant le clavier **`AZERTY`**/**`QWERTY`** si besoin.)\n\n## Débogage et Diagnostic\nVérifiez l'absence de fuites de mémoire et autres erreurs :\n\n```bash\nvalgrind ./so_long \u003cpath_to_map.ber\u003e\n```\n\n## Gestion des Erreurs et Validation\n- **Fichiers .ber invalides** : Testez les scénarios où le fichier n’existe pas, est corrompu ou ne se termine pas par **`.ber`**.\n- **Validation de la carte** : Vérifiez les erreurs liées au placement du **`joueur`**, des **`murs`**, des **`collectibles`**, et de la **`sortie`**.\n- **Manque d’éléments essentiels** : Assurez-vous que le programme signale l’absence du **`joueur`**, de la **`sortie`** ou des **`collectibles`**.\n\n## Fonctionnalités Bonus\n- Ajout d’ennemis mobiles ou statiques.\n- Animations avancées (mouvement du **`joueur`**, changement de **`texture`**, etc.).\n- Affichage du compteur de mouvements à l’écran.\n- Détection de collisions plus complexes ou introduction de mécanismes additionnels.\n\n## Contributeurs\n[raveriss](https://github.com/raveriss) \n\n## Ressources Utilisées\n- [Documentation de la MiniLibX](https://harm-smits.github.io/42docs/libs/minilibx)\n- [minilibx](https://github.com/42Paris/minilibx-linux)\n- [Raycasting / Rendering 2D Basics](https://lodev.org/cgtutor/)\n- [Pixel drawing with the minilibx](https://aurelienbrabant.fr/blog/pixel-drawing-with-the-minilibx)\n- [Game art 2D](https://www.gameart2d.com/freebies.html)\n- [Algorithme de remplissage par diffusion](https://fr.wikipedia.org/wiki/Algorithme_de_remplissage_par_diffusion)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraveriss%2Fso_long","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fraveriss%2Fso_long","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraveriss%2Fso_long/lists"}