Skip to content
/ cub3D Public

Modern reinterpretation of Wolfenstein 3D using ray-casting to create 3D graphics.

Notifications You must be signed in to change notification settings

raveriss/cub3D

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
Mar 1, 2024
Mar 1, 2024
Mar 1, 2024
Mar 1, 2024
Mar 1, 2024
Mar 1, 2024
Mar 1, 2024
Dec 21, 2024
Mar 13, 2024
Mar 13, 2024

Repository files navigation

cub3D - École 42 | Paris

MinilibX 42 cub3D
Badge du projet cub3d

cub3d representation

Description

Le projet cub3D vise à recréer une expérience inspirée de Wolfenstein 3D, l’un des premiers FPS, en utilisant des techniques de ray-casting pour générer une vue en 3D à partir d'une carte 2D.

L’objectif est de comprendre les bases de la représentation graphique 3D, tout en respectant les standards de codage et les contraintes imposées par l’École 42.

Objectifs

  • Implémenter un moteur graphique minimal basé sur le ray-casting.
  • Permettre le déplacement du joueur et l’interaction avec un environnement 3D.
  • Charger et valider des cartes personnalisées en format .cub.
  • Assurer une gestion des erreurs robuste (fichiers, textures, cartes, etc.).
  • Respecter la norme graphique MinilibX et les contraintes liées aux fonctions autorisées.

Fonctionnalités

  • Moteur 3D basique : Affichage d’un environnement 3D interactif à partir d’une carte 2D.
  • Validation des cartes : Vérification stricte des fichiers .cub pour éviter les erreurs au chargement.
  • Textures et couleurs : Support des textures en .xpm pour les murs et des couleurs pour le sol et le plafond.
  • Interactions utilisateur : Déplacements du joueur, orientation de la caméra, et interaction avec l’environnement.
  • Minimap : Affichage en temps réel d'une carte simplifiée en 2D.
  • Version bonus : Ajout de fonctionnalités avancées, telles que les portes interactives ou des labyrinthes complexes.

Structure du Projet

raveriss@raveriss-NLx0MU:~$ tree
.
├── Include
│   └── cub3d.h
├── Lib
│   ├── includes
│   │   ├── ft_printf.h
│   │   ├── get_next_line.h
│   │   └── lib.h
│   ├── lib42.a
│   ├── Makefile
│   └── Src
│       ├── ft_atoi.c
│       ├── ft_is_alpha.c
│       ├── ft_len_nb.c
│       ├── ft_len_nb_hexa.c
│       ├── ft_memset.c
│       ├── ft_pointeur.c
│       ├── ft_printf.c
│       ├── ft_putchar.c
│       ├── ft_putnbr_base.c
│       ├── ft_putnbr_base_hex.c
│       ├── ft_putnbr_base_neg.c
│       ├── ft_putstr.c
│       ├── ft_split.c
│       ├── ft_strncmp.c
│       ├── ft_strstr.c
│       ├── get_next_line.c
│       └── get_next_line_utils.c
├── Makefile
├── maps
│   ├── bad
│   │   ├── color_invalid_rgb.cub
│   │   ├── color_missing_ceiling_rgb.cub
│   │   ├── color_missing.cub
│   │   ├── color_missing_floor_rgb.cub
│   │   ├── color_none.cub
│   │   ├── empty.cub
│   │   ├── file_letter_end.cub
│   │   ├── filetype_missing
│   │   ├── filetype_wrong.buc
│   │   ├── map_first.cub
│   │   ├── map_middle.cub
│   │   ├── map_missing.cub
│   │   ├── map_only.cub
│   │   ├── player_multiple.cub
│   │   ├── player_none.cub
│   │   ├── player_on_edge.cub
│   │   ├── test_map_hole.cub
│   │   ├── textures_dir.cub
│   │   ├── textures_duplicates.cub
│   │   ├── textures_forbidden.cub
│   │   ├── textures_invalid.cub
│   │   ├── textures_missing.cub
│   │   ├── textures_none.cub
│   │   ├── textures_not_xpm.cub
│   │   ├── wall_hole_east.cub
│   │   ├── wall_hole_north.cub
│   │   ├── wall_hole_south.cub
│   │   ├── wall_hole_west.cub
│   │   └── wall_none.cub
│   └── good
│       ├── bonus
│       │   ├── cheese_maze.cub
│       │   ├── cub3d.cub
│       │   ├── library.cub
│       │   ├── map_raf_bonus.cub
│       │   ├── space_ship.cub
│       │   ├── subject_map.cub
│       │   └── test_map.cub
│       └── mendatori
│           ├── creepy.cub
│           ├── dungeon.cub
│           ├── map_raf.cub
│           ├── maptest.cub
│           ├── map_too_small.cub
│           ├── matrix.cub
│           ├── sad_face.cub
│           ├── square_map.cub
│           ├── test.cub
│           ├── test_pos_bottom.cub
│           ├── test_pos_left.cub
│           ├── test_pos_right.cub
│           ├── test_pos_top.cub
│           ├── test_textures.cub
│           ├── test_whitespace.cub
│           └── works.cub
├── README.md
├── screenshot.png
├── srcs
│   ├── draw
│   │   ├── dda.c
│   │   ├── dda_utils.c
│   │   ├── game.c
│   │   ├── minimap.c
│   │   ├── player.c
│   │   ├── skyground.c
│   │   └── wall.c
│   ├── free
│   │   ├── free.c
│   │   └── garcol.c
│   ├── get
│   │   ├── check_images_exist.c
│   │   ├── elem2.c
│   │   ├── elem.c
│   │   ├── input.c
│   │   ├── map.c
│   │   └── player.c
│   ├── key
│   │   ├── key1.c
│   │   └── key2.c
│   ├── main.c
│   ├── mlx
│   │   └── mlx.c
│   ├── parse
│   │   └── parse.c
│   └── utils
│       ├── utils2.c
│       └── utils.c
├── srcs_bonus
│   ├── draw
│   │   ├── dda.c
│   │   ├── dda_utils.c
│   │   ├── fix_fisheye.c
│   │   ├── game.c
│   │   ├── game_init.c
│   │   ├── load_texture.c
│   │   ├── minimap.c
│   │   ├── player.c
│   │   ├── ray_utils.c
│   │   ├── skyground.c
│   │   └── wall.c
│   ├── free
│   │   ├── free.c
│   │   └── garcol.c
│   ├── get
│   │   ├── check_images_exist.c
│   │   ├── elem2.c
│   │   ├── elem.c
│   │   ├── input.c
│   │   ├── map.c
│   │   └── player.c
│   ├── key
│   │   ├── key1.c
│   │   ├── key2.c
│   │   └── mouse_event.c
│   ├── main.c
│   ├── mlx
│   │   └── mlx.c
│   ├── parse
│   │   └── parse.c
│   └── utils
│       ├── utils2.c
│       └── utils.c
└── textures
    ├── east_10.xpm
    ├── east_11.xpm
    ├── east_12.xpm
    ├── east_1.xpm
    ├── east_2.xpm
    ├── east_3.xpm
    ├── east_4.xpm
    ├── east_5.xpm
    ├── east_6.xpm
    ├── east_7.xpm
    ├── east_8.xpm
    ├── east_9.xpm
    ├── east.xpm
    ├── north_10.xpm
    ├── north_11.xpm
    ├── north_12.xpm
    ├── north_1.xpm
    ├── north_2.xpm
    ├── north_3.xpm
    ├── north_4.xpm
    ├── north_5.xpm
    ├── north_6.xpm
    ├── north_7.xpm
    ├── north_8.xpm
    ├── north_9.xpm
    ├── north.xpm
    ├── porte.xpm
    ├── south_10.xpm
    ├── south_11.xpm
    ├── south_12.xpm
    ├── south_1.xpm
    ├── south_2.xpm
    ├── south_3.xpm
    ├── south_4.xpm
    ├── south_5.xpm
    ├── south_6.xpm
    ├── south_7.xpm
    ├── south_8.xpm
    ├── south_9.xpm
    ├── south.xpm
    ├── west_10.xpm
    ├── west_11.xpm
    ├── west_12.xpm
    ├── west_1.xpm
    ├── west_2.xpm
    ├── west_3.xpm
    ├── west_4.xpm
    ├── west_5.xpm
    ├── west_6.xpm
    ├── west_7.xpm
    ├── west_8.xpm
    ├── west_9.xpm
    └── west.xpm

Compilation

Utilisez le Makefile pour compiler le projet avec les options de compilation requises. Le projet utilise les flags -Wall -Wextra -Werror.

Commandes disponibles :

make        # Compile le projet
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

Lancer le jeu

./cub3D <path_to_map.cub>

Arguments : <path_to_map.cub> : Chemin vers une carte valide au format .cub. Exemple :

./cub3D maps/good/mendatori/matrix.cub

Aperçu

Aperçu cub3D

Tester le projet

Pour valider votre implémentation :

Cartes valides : Testez avec les cartes du dossier maps/good/ pour vérifier le bon fonctionnement du jeu. Cartes invalides : Utilisez les cartes du dossier maps/bad/ pour tester la robustesse de la validation des entrées.

Controls

Key / Input Action
W Move forward
S Move backward
A Strafe left
D Strafe right
Left Arrow Rotate left
Right Arrow Rotate right
Mouse Rotate by moving the mouse (bonus only)

Débogage et Diagnostic

Vérification des erreurs de segmentation :

valgrind ./cub3D <path_to_map.cub>

Tests des textures et gestion des erreurs

Gestion des textures manquantes ou invalides :

  • Chemin inexistant : Vérifiez que le programme détecte et signale les chemins de fichiers invalides.
  • Chemin pointant vers un dossier : Assurez-vous que le programme distingue un fichier .xpm valide d’un dossier portant le même nom.
  • Fichier .xpm vide : Testez que le programme détecte et signale les fichiers .xpm vides ou corrompus.

Gestion des erreurs de carte :

  • Modifiez une carte (trous dans les murs, coordonnées du joueur manquantes, etc.) pour vérifier la robustesse de la détection des erreurs.

Fonctionnalités Bonus

  • Support des portes interactives.
  • Labyrinthes avec des textures dynamiques.
  • Détection et correction de l’effet de fisheye pour un rendu réaliste.

Contributeurs

Ressources Utilisées

Releases

No releases published

Packages

No packages published