Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/acensjj/cub3d

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.
https://github.com/acensjj/cub3d

42 42born2code c cub3d minilibx

Last synced: about 8 hours ago
JSON representation

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.

Awesome Lists containing this project

README

        


42-lyon

# cub3d

Note

### Description

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.

> *Project en collaboration avec Nemuel Page Léonie (nepage-l).*



# Partie Obligatoire - Cub3D

![sujet](https://user-images.githubusercontent.com/45235527/97051624-c419ff00-157f-11eb-9e39-bf54a70006c7.PNG)

Les contraintes sont les suivantes :
- Vous devez utiliser la minilibX. Soit dans la version disponible sur votre OS, ou
depuis ses sources. Si vous décidez de travailler avec les sources, les mêmes règles
que la libft s’appliquent.
- La gestion des fenêtres doit être parfaite : gestion de la minimalisation, du passage
d’une autre fenetre, etc
- Vous devez afficher des textures différentes (vous avez le choix) selon si les murs
sont face nord, sud, est, ouest.
- 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)
- Les touches W, A, S et D doivent permettre de déplacer la caméra (déplacement
du personnage)
- Appuyer sur la touche ESC doit fermer la fenêtre et quitter le programme
proprement
- Cliquer sur la croix rouge de la fenêtre doit fermer la fenêtre et quitter le
programme proprement
- 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.
- L’utilisation d’images de la minilibX est fortement recommandée.
- Votre programme doit prendre en premier argument un fichier de description de
scène avec pour extension .cub
- La map doit être composée d’uniquement ces 4 caractères : 0 pour les espaces
vides, 1 pour les murs, 2 pour un objet, N,S,E ou W qui représentent la
position de départ du joueur et son orientation.
Cette simple map doit être valide :
```
111111
100101
102001
1100N1
111111
```
- La map doit être fermée/entourée de murs, sinon le programme doit renvoyer
une erreur.
- Mis à part la description de la map, chaque type d’élément peut être séparée
par une ou plusieurs lignes vides.
- La description de la carte sera toujours en dernier dans le fichier, le reste des
éléments peut être dans n’importe quel ordre.
- Les informations de chaque élément peuvent être séparées par un ou plusieurs
espace(s).
- Pour chaque élement, le premier caractère est l’identifiant (un ou deux caractères), suivi de toutes les informations spécifiques à l’élément dans un ordre
strict tel que :
- Resolution :
```
R 1920 1080
```
- identifiant : R
- taille de rendu axe x
- taille de rendu axe y
- texture nord :
```
NO ./path_to_the_north_texture
```
- identifiant : NO
- chemin vers la texture nord
- South texture :
```
SO ./path_to_the_south_texture
```
- identifiant : SO
- chemin vers la texture sud
- West texture :
```
WE ./path_to_the_west_texture
```
- identifiant : WE
- chemin vers la texture ouest
- East texture :
```
EA ./path_to_the_east_texture
```
- identifiant : EA
- chemin vers la texture est
- Sprite texture :
```
S ./path_to_the_sprite_texture
```
- identifiant : S
- chemin vers la texture sprite
- Couleur du sol :
```
F 220,100,0
```
- identifiant : F
- couleurs R,G,B range [0,255] : 0, 255, 255
- Couleur du plafond :
```
C 225,30,0
```
- identifiant : C
- couleurs R,G,B range [0,255] : 0, 255, 255
- Exemple minimaliste de scène de la partie obligatoire .cub :
```
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
```
- Si un problème de configuration de n’importe quel type est rencontré dans
le fichier, le programme doit quitter et renvoyer "Error\n" suivi d’un message
d’erreur explicite de votre choix.

# Bonus part

Liste des bonus :
- Collision contre les murs
- Un HUD.
- Une barre de vie.
- Plus d’objets dans le labyrinthe.
- Gain ou perte de points/de vie en prenant des objets/pièges.
- Portes secrètes.
- Son et musique.

# Raycasting

Le raycasting est une technique de calcul d'images de synthèse 3D, facilement accélérée matériellement par une carte graphique dédiée. L'accélération peut se faire en utilisant l'API OpenGL, Glide (tombé en désuétude), ou Direct3D.


Raycasting



# Results

map3.cub

map.cub