Cub 3 D
Cub 3 D
Cub 3 D
Résumé: Ce projet est inspiré du jeu éponyme mondialement connu, considéré comme
le premier FPS jamais développé. Il vous permettra d’explorer la technique du
ray-casting. Votre objectif est de faire une vue dynamique au sein d’un labyrinthe, dans
lequel vous devrez trouver votre chemin.
Table des matières
I Préambule 2
II Objectifs 3
V Bonus part 9
VI Exemples 10
1
Chapitre I
Préambule
Figure I.1 – John Romero (gauche) et John Carmack (droite) posant pour la postérité
Wolfenstein 3D est l’ancêtre des jeux tels que Doom (Id Software, 1993), Doom II
(Id Software, 1994), Duke Nukem 3D (3D Realm, 1996) et Quake (Id Software, 1996),
qui sont des pierres angulaires additionnelles dans le monde du jeu vidéo.
2
Chapitre II
Objectifs
Les objectifs de ce projet sont similaires à tous les autres projets et leurs objectifs :
Rigueur, utilisation du C, utilisation d’algorithmes basiques, recherche d’informations, etc.
Comme c’est un projet de design graphique, Cub3D vous permettra de travailler vos
talents de designer : fenêtres, couleurs, evènements, formes, etc.
En conclusion, Cub3D est une aire de jeu remarquable pour explorer les applications
pratique des mathématiques sans avoir a en comprendre les spécificités.
Avec l’aide des nombreux documents disponibles sur internet, vous utiliserez les ma-
thématiques en temps qu’outil de création d’algorithmes élégants et efficaces.
3
Chapitre III
Règles communes
• Votre projet doit être codé à la Norme. Si vous avez des fichiers ou fonctions bonus,
celles-ci seront inclues dans la vérification de la norme et vous aurez 0 au projet
en cas de faute de norme.
• Toute mémoire allouée sur la heap doit être libéré lorsque c’est nécessaire. Aucun
leak ne sera toléré.
• Si le projet le demande, vous devez rendre un Makefile qui compilera vos sources
pour créer la sortie demandée, en utilisant les flags -Wall, -Wextra et -Werror.
Votre Makefile ne doit pas relink.
• Pour rendre des bonus, vous devez inclure une règle bonus à votre Makefile qui
ajoutera les divers headers, librairies ou fonctions qui ne sont pas autorisées dans la
partie principale du projet. Les bonus doivent être dans une fichier _bonus.{c/h}.
L’évaluation de la partie obligatoire et de la partie bonus sont faites séparément.
• Si le projet autorise votre libft, vous devez copier ses sources et son Makefile
associé dans un dossier libft contenu à la racine. Le Makefile de votre projet doit
compiler la librairie à l’aide de son Makefile, puis compiler le projet.
• Nous vous recommandons de créer des programmes de test pour votre projet, bien
que ce travail ne sera pas rendu ni noté. Cela vous donnera une chance de
tester facilement votre travail ainsi que celui de vos pairs.
• Vous devez rendre votre travail sur le git qui vous est assigné. Seul le travail déposé
sur git sera évalué. Si Deepthought doit corriger votre travail, cela sera fait à la fin
des peer-evaluations. Si une erreur se produit pendant l’évaluation Deepthought,
celle-ci s’arrête.
4
Chapitre IV
• Vous devez afficher des textures différentes (vous avez le choix) selon si les murs
sont face nord, sud, est, ouest.
5
Cub3D Mon premier RayCaster avec la minilibX
• Votre programme doit être capable d’afficher un objet (sprite) au lieu d’un mur.
• Votre programme doit être capable d’avoir des couleurs différentes pour le sol et
le plafond
• En prévision du jour où deepthought aura des yeux pour évaluer votre projet,
votre programme doit pouvoir sauver la première image rendue au format bmp
lorsque le second argument est "–save".
• Si il n’y a pas de second argument, le programme affiche l’image dans une fenêtre,
tout en respectant les règles suivantes :
◦ Les touches flèches du gauche et droite du clavier doivent permettre de faire
une rotation de la caméra (regarder a gauche et a droite)
◦ Si la taille de fenêtre demandée dans la map est plus grande que celle de l’écran,
la taille de fenêtre doit être celle de l’écran.
◦ Mis à part la description de la map, chaque type d’élément peut être séparée
par une ou plusieurs lignes vides.
6
Cub3D Mon premier RayCaster avec la minilibX
◦ Pour chaque élement, le premier caractère est l’identifiant (un ou deux carac-
tères), suivi de toutes les informations spécifiques à l’élément dans un ordre
strict tel que :
— Resolution :
R 1920 1080
— identifiant : R
— texture nord :
NO ./path_to_the_north_texture
— identifiant : NO
— South texture :
SO ./path_to_the_south_texture
— identifiant : SO
— West texture :
WE ./path_to_the_west_texture
— identifiant : WE
— East texture :
EA ./path_to_the_east_texture
— identifiant : EA
— Sprite texture :
S ./path_to_the_sprite_texture
— identifiant : S
— Couleur du sol :
F 220,100,0
— identifiant : F
7
Cub3D Mon premier RayCaster avec la minilibX
— Couleur du plafond :
C 225,30,0
— identifiant : C
R 1920 1080
NO ./path_to_the_north_texture
SO ./path_to_the_south_texture
WE ./path_to_the_west_texture
EA ./path_to_the_east_texture
S ./path_to_the_sprite_texture
F 220,100,0
C 225,30,0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 0 2 0 0 0 0 0 1 0 0 0 1
1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1
1 0 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1
1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 0 1 1 1 1 0 0 0 1
1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 0 0 0 1 0 0 0 1
1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 0 1 0 0 1 0 0 0 1
1 1 0 0 0 0 0 0 1 1 0 1 0 1 0 1 1 1 0 0 0 0 0 0 1 0 0 0 1
1 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 1 0 0 1 0 0 0 1
1 1 0 0 0 0 0 0 1 1 0 1 0 1 0 1 1 1 1 1 0 1 1 1 1 0 N 0 1
1 1 1 1 0 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 1 1 1 0 0 0 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
8
Chapitre V
Bonus part
9
Chapitre VI
Exemples
10
Cub3D Mon premier RayCaster avec la minilibX
Figure VI.3 – Exemple de bonus avec une minimap, des textures sol et plafond, et un celèbre hérisson
animé.
Figure VI.4 – Un autre exemple de bonus avec un HUD, une barre de vie, un effet d’ombre et une
arme qui peut tirer
11
Cub3D Mon premier RayCaster avec la minilibX
Figure VI.5 – Autre exemple de partie bonus avec une arme de votre choix et le joueur qui regarde
le plafond
12