Cub3D is a project inspired by the game Wolfenstein3D, which is considered the first-ever developed first-person shooter (FPS). It explores the technique of ray-casting and challenges you to create a dynamic view within a maze where you need to find your way.
- Collision with walls for a more realistic gaming experience.
- Mini-map to visualize the structure of the maze.
- Openable/closable doors to add interactions.
- Animations with animated sprites to bring the game to life.
- View rotation using the mouse for a more immersive exploration.
- Enemies
repo
โโโ Makefile
โโโ README.md
โโโ en.subject.pdf
โโโ img
โ โโโ cub.png
โโโ includes
โ โโโ colors.h
โ โโโ cub3d.h
โ โโโ keycodes.h
โ โโโ sprites.h
โโโ libft
โ โโโ Makefile
โ โโโ gnl
โ โ โโโ get_next_line.c
โ โ โโโ get_next_line_utils.c
โ โโโ includes
โ โ โโโ libft.h
โ โ โโโ printf.h
โ โโโ list
โ โ โโโ ft_lstadd_back.c
โ โ โโโ ft_lstadd_front.c
โ โ โโโ ft_lstaddsort.c
โ โ โโโ ft_lstclear.c
โ โ โโโ ft_lstdelone.c
โ โ โโโ ft_lstiter.c
โ โ โโโ ft_lstlast.c
โ โ โโโ ft_lstmap.c
โ โ โโโ ft_lstnew.c
โ โ โโโ ft_lstsize.c
โ โโโ math
โ โโโ mem
โ โ โโโ ft_bzero.c
โ โ โโโ ft_calloc.c
โ โ โโโ ft_memchr.c
โ โ โโโ ft_memcmp.c
โ โ โโโ ft_memcpy.c
โ โ โโโ ft_memmove.c
โ โ โโโ ft_memset.c
โ โโโ print
โ โ โโโ ft_putchar_fd.c
โ โ โโโ ft_putendl_fd.c
โ โ โโโ ft_putnbr_fd.c
โ โ โโโ ft_putstr_fd.c
โ โโโ stdlib
โ โ โโโ ft_atobyte.c
โ โ โโโ ft_atoi.c
โ โ โโโ ft_atol.c
โ โ โโโ ft_itoa.c
โ โโโ string
โ โโโ ft_free_split.c
โ โโโ ft_isalnum.c
โ โโโ ft_isalpha.c
โ โโโ ft_isascii.c
โ โโโ ft_isdigit.c
โ โโโ ft_isprint.c
โ โโโ ft_size_split.c
โ โโโ ft_split.c
โ โโโ ft_splitcharset.c
โ โโโ ft_strchr.c
โ โโโ ft_strcmp.c
โ โโโ ft_strdup.c
โ โโโ ft_striteri.c
โ โโโ ft_strjoin.c
โ โโโ ft_strlcat.c
โ โโโ ft_strlcpy.c
โ โโโ ft_strlen.c
โ โโโ ft_strmapi.c
โ โโโ ft_strncmp.c
โ โโโ ft_strnstr.c
โ โโโ ft_strrchr.c
โ โโโ ft_strtrim.c
โ โโโ ft_substr.c
โ โโโ ft_tolower.c
โ โโโ ft_toupper.c
โโโ sprites[..]
โโโ srcs
โ โโโ colors.c
โ โโโ create_img.c
โ โโโ dda.c
โ โโโ draw_sprite.c
โ โโโ game.c
โ โโโ gun.c
โ โโโ handle_mouse.c
โ โโโ hook_direction.c
โ โโโ hook_direction_2.c
โ โโโ hook_door.c
โ โโโ hook_key_action.c
โ โโโ hook_move.c
โ โโโ init.c
โ โโโ load_textures.c
โ โโโ main.c
โ โโโ minimaps.c
โ โโโ mlx_img_utils.c
โ โโโ mouse_utils.c
โ โโโ parsing_bonus
โ โ โโโ check_color.c
โ โ โโโ debug_parsing.c
โ โ โโโ exit.c
โ โ โโโ info_utils.c
โ โ โโโ load_info.c
โ โ โโโ loading_maps.c
โ โ โโโ maps_utils.c
โ โ โโโ parsing.c
โ โโโ parsing_mandatory
โ โ โโโ check_color.c
โ โ โโโ debug_parsing.c
โ โ โโโ exit.c
โ โ โโโ info_utils.c
โ โ โโโ load_info.c
โ โ โโโ loading_maps.c
โ โ โโโ maps_utils.c
โ โ โโโ parsing.c
โ โโโ quit.c
โ โโโ raycasting.c
โ โโโ raycasting_utils.c
โ โโโ sight_vector.c
โ โโโ sprite.c
โ โโโ sprite_utils.c
โ โโโ time.c
โโโ textures[...]
Before you begin, ensure that you have the following prerequisites installed:
Requirements for Linux :
- MinilibX only support TrueColor visual type (8,15,16,24 or 32 bits depth)
- gcc
- make
- X11 include files (package xorg)
- XShm extension must be present (package libxext-dev)
- Utility functions from BSD systems - development files (package libbsd-dev) e.g. sudo apt-get install gcc make xorg libxext-dev libbsd-dev (Debian/Ubuntu)
Requirements for MacOS
- Xquartz
Brew install Xquartz
reboot
xeyes # run an hello world X11 app
- Clone the 42-cub3d repository:
git clone https://github.com/jremy42/42-cub3d
- Change to the project directory:
cd 42-cub3d
- Compiling the project: mandatory :
make
bonus :
make bonus
Please compiling with the bonuses is much more fun !
./cub3d [maps]
exemple :
./cub3d maps/bonus/minimaps_bonus.cub
- Escape: Quit the game
- Space: Open doors
- Arrow keys (Up/Down/Left/Right): Move character
- Left mouse click: Shoot projectiles
- Mouse movement: Adjust camera/view
for check map parsing :
./test_wrong_maps.sh
-
โ Ray-casting: A technique used to create real-time 3D environments in games. It involves casting virtual rays from a player's perspective to determine what objects or walls are visible in the scene.
-
โ Manipulation of 3D graphics: Creating a realistic graphical representation of a maze using a subjective view. This includes rendering walls, floors, ceilings, and other objects to provide an immersive experience.
-
โ Utilization of the minilibX library: Using the minilibX library to develop simple graphical interfaces. This library provides functions for handling graphics, windows, and events in a minimalistic manner.
-
โ Reading configuration files (*.cub): Parsing configuration files to extract information about the maze's layout, textures, colors, and other parameters. These files define the characteristics of the game environment.
-
โ Mathematics and algorithms in ray-casting: The implementation of mathematical calculations and algorithms for ray-casting and 3D view calculations. This involves determining the intersections of rays with objects, calculating the distances, and rendering the scene accordingly.
-
โ Handling keyboard events: Managing keyboard input events to allow player movement within the maze. This includes detecting key presses, updating the player's position, and rendering the scene from the new perspective.