start ray casting

This commit is contained in:
kinou-p 2022-05-04 18:37:53 +02:00
parent e9262b7fdd
commit be27eab42c
16 changed files with 464 additions and 377 deletions

View File

@ -6,17 +6,18 @@
# By: apommier <apommier@student.42.fr> +#+ +:+ +#+ # # By: apommier <apommier@student.42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ # # +#+#+#+#+#+ +#+ #
# Created: 2022/02/13 16:27:49 by apommier #+# #+# # # Created: 2022/02/13 16:27:49 by apommier #+# #+# #
# Updated: 2022/05/03 16:19:32 by apommier ### ########.fr # # Updated: 2022/05/04 18:08:34 by apommier ### ########.fr #
# # # #
# **************************************************************************** # # **************************************************************************** #
NAME = Cub3D NAME = Cub3D
SRCS = srcs/main.c\ SRCS = srcs/main.c\
srcs/cast_ray.c\
srcs/utils.c srcs/utils.c
OBJS = ${SRCS:.c=.o} OBJS = ${SRCS:.c=.o}
CC = gcc CC = gcc
LIB = -L ./mlx -lmlx -lXext -lX11 -lm LIB = -L ./mlx -lmlx -lXext -lX11 -lm
CFLAGS = -Wall -Wextra CFLAGS = -Wall -Wextra -g
RM = rm -rf RM = rm -rf
LIBFT = ./libft LIBFT = ./libft

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/02/13 16:30:59 by apommier #+# #+# */ /* Created: 2022/02/13 16:30:59 by apommier #+# #+# */
/* Updated: 2022/05/03 16:48:27 by apommier ### ########.fr */ /* Updated: 2022/05/04 17:34:25 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -23,12 +23,16 @@
# include <stdio.h> # include <stdio.h>
# include <math.h> # include <math.h>
# define PI 3.14159265359 # define PI 3.1415926535
typedef struct map_information{ typedef struct map_information{
char **map; char **map;
int floor; int floor;
int sky; int sky;
char *simple_map;
int size;
int x;
int y;
} map_info; } map_info;
typedef struct player_position typedef struct player_position
@ -43,15 +47,19 @@ typedef struct player_position
typedef struct s_data { typedef struct s_data {
void *mlx; void *mlx;
void *mlx_win; void *mlx_win;
char **map; char **double_map;
map_info map;
player player; player player;
} t_data; } t_data;
int reset_angle(int angle);
float deg_to_rad(int angle);
void draw_ray(t_data *img);
void print_ray(t_data *img); void print_ray(t_data *img);
int key_press(int code, t_data *img); int key_press(int code, t_data *img);
int quit_game(t_data *img); int quit_game(t_data *img);
void ft_error(char *error_msg); void ft_error(char *error_msg);
void print_player(player player, t_data *img); void print_player(player player, t_data *img);
void print_map(char **map, t_data *img); void print_map(map_info map, t_data *img);
#endif #endif

16
map/map
View File

@ -1,8 +1,8 @@
111111111 11111111
101000001 10100001
101000001 10100001
100000001 10000001
100000001 10000001
101001001 10100101
100001001 10000101
111111111 11111111

View File

@ -1,3 +0,0 @@
[ZoneTransfer]
ZoneId=3
HostUrl=https://www.photopea.com/

View File

@ -1,4 +0,0 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=https://convertio.co/
HostUrl=https://s122.convertio.me/p/okLgAQyWaXH3BPAVt8iwfw/56be0757b02ebc3b426877866a2d5391/Nouveau-projet-_1_.xpm

View File

@ -1,4 +0,0 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=https://convertio.co/
HostUrl=https://s167.convertio.me/p/yeHxKzYHMsgzX63ZlmVYcg/c44fd54ef093950da76fa0aecf3d2964/Nouveau-projet-_2_.xpm

View File

@ -1,4 +0,0 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=https://convertio.co/
HostUrl=https://s112.convertio.me/p/r871wFIJih4QPAabVzANrg/56be0757b02ebc3b426877866a2d5391/Nouveau-projet.xpm

View File

@ -1,39 +1,75 @@
/* XPM */ /* XPM */
static char *bb1113caba2a4396da9abfa5b6bd9e69XybgBMHJ8j6bcKH6[] = { static char *a1ddad0c418f4a35e76242f25979a7e2fCUuqr6bneEEiT2H[] = {
/* columns rows colors chars-per-pixel */ /* columns rows colors chars-per-pixel */
"32 32 1 1 ", "64 64 5 1 ",
" c white", " c #808080",
". c #F9F9F9",
"X c #FDFDFD",
"o c #FEFEFE",
"O c white",
/* pixels */ /* pixels */
" ", " ",
" ", " OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" ", " OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" ", " OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" ", " OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" ", " OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" ", " OOOOOOOOO.OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" ", " OOOOOOOOXOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" ", " OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" ", " OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" ", " OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" ", " OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" ", " OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" ", " OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" ", " OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" ", " OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" ", " OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" ", " OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" ", " OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" ", " OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" ", " OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" ", " OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" ", " OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" ", " OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" ", " OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" ", " OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" ", " OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" ", " OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" ", " OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" ", " OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" ", " OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" " " OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOXOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ",
" "
}; };

View File

@ -1,41 +0,0 @@
/* XPM */
static char *_49dd254199246a1977f20555a1f9063nPJ1VTqEOaIleAR1[] = {
/* columns rows colors chars-per-pixel */
"32 32 3 1 ",
" c #6E924D",
". c #4D733E",
"X c #87B055",
/* pixels */
" ",
" ",
" ",
" ",
" ",
" . ",
" . . ",
" . ",
" ",
" ",
" X ",
" XX ",
" X XX X ",
" X X.XX ",
" X X .XX. ",
" X X .. ",
" X ",
" ",
" ",
" X ",
" X X ",
" X ",
" ",
" ",
" ",
" . ",
" . . ",
" . ",
" X ",
" X X ",
" X X ",
" X "
};

View File

@ -1,11 +1,15 @@
/* XPM */ /* XPM */
static char *_e3cb0cf605640f8cfaeebccffd9d135vy2vdFXbHJ5SKHnn[] = { static char *bd85319af077459cedaeeaa7648f429dGIdxmjBFsN6lbeLv[] = {
/* columns rows colors chars-per-pixel */ /* columns rows colors chars-per-pixel */
"4 4 1 1 ", "8 8 1 1 ",
" c #10F00B", " c #12E22A",
/* pixels */ /* pixels */
" ", " ",
" ", " ",
" ", " ",
" " " ",
" ",
" ",
" ",
" "
}; };

View File

@ -1,39 +0,0 @@
/* XPM */
static char *_cbafb9a07c3469ffcea1686de5f8991nVqbqFhPdwVvKnWZ[] = {
/* columns rows colors chars-per-pixel */
"32 32 1 1 ",
" c #3B3737",
/* pixels */
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
};

View File

@ -1,176 +0,0 @@
/* XPM */
static char *ed1556952fcd432ffcab70bbc17ab48bTGW28QFGniQVrKcD[] = {
/* columns rows colors chars-per-pixel */
"32 32 138 2 ",
" c #6E924D",
". c #91AC78",
"X c #DCE5D4",
"o c white",
"O c #7D9E69",
"+ c #F3F6FE",
"@ c #D7E4FD",
"# c #85A36A",
"$ c #628B4D",
"% c #54925A",
"& c #EAF1FE",
"* c #789C78",
"= c #C4D9D5",
"- c #63A05C",
"; c #BFCFBE",
": c #97B28D",
"> c #4D9262",
", c #71A876",
"< c #6FA958",
"1 c #98C09B",
"2 c #619E7B",
"3 c #CCDFD9",
"4 c #ECF2FE",
"5 c #A1BBBE",
"6 c #5B864D",
"7 c #BACCB8",
"8 c #C0D6D4",
"9 c #7DA87D",
"0 c #E0E9FD",
"q c #C8DCD9",
"w c #D0E1E5",
"e c #55846A",
"r c #3E734E",
"t c #42734A",
"y c #7CA89B",
"u c #87B770",
"i c #6AA55A",
"p c #47865A",
"a c #4B8D5F",
"s c #427A53",
"d c #6C9578",
"f c #4B8355",
"g c #E3EEE6",
"h c #D4E5D9",
"j c #7FB186",
"k c #94BE98",
"l c #ADC4BF",
"z c #588B6F",
"x c #497A4E",
"c c #7FAFA0",
"v c #B9D2D8",
"b c #A6C6C5",
"n c #69A37B",
"m c #458258",
"M c #C5D3B8",
"N c #48875B",
"B c #B8CBB7",
"V c #468358",
"C c #437E55",
"Z c #78AC88",
"A c #8BAB95",
"S c #BACDBF",
"D c #87B055",
"F c #84A58C",
"G c #F7F9FF",
"H c #BFD8C6",
"J c #6F9A7C",
"K c #91B69C",
"L c #95B6BA",
"P c #4F7E4E",
"I c #BCCFD3",
"U c #DFECD6",
"Y c #A5C6BF",
"T c #93B1B6",
"R c #C7D7E1",
"E c #407851",
"W c #668D4D",
"Q c #517F4E",
"! c #83A594",
"~ c #608C78",
"^ c #769D94",
"/ c #709C7D",
"( c #B6CBD3",
") c #8FBC81",
"_ c #B8D3C0",
"` c #D6E5E5",
"' c #6BA487",
"] c #7AA498",
"[ c #86AA91",
"{ c #9CB593",
"} c #447F56",
"| c #498B5D",
" . c #87AD93",
".. c #B2C7B8",
"X. c #B5CEBD",
"o. c #72A180",
"O. c #68A45A",
"+. c #9FBAB7",
"@. c #94BEA1",
"#. c #5D896A",
"$. c #74A091",
"%. c #C3D8E4",
"&. c #CBDBFC",
"*. c #62917B",
"=. c #65977F",
"-. c #74A583",
";. c #7AAC99",
":. c #D1E1E2",
">. c #BFD6D8",
",. c #B7D2C6",
"<. c #88B5A0",
"1. c #99BEBE",
"2. c #58995F",
"3. c #46784E",
"4. c #78A796",
"5. c #424643",
"6. c #45283C",
"7. c #4D733E",
"8. c #695D3C",
"9. c #663931",
"0. c #522F38",
"q. c #5A783F",
"w. c #628245",
"e. c #526D39",
"r. c #4D6636",
"t. c #563A36",
"y. c #494E38",
"u. c #535B34",
"i. c #5E3534",
"p. c #4A2B3A",
"a. c #4D2C39",
"s. c #55703B",
"d. c #668848",
"f. c #5C4B33",
"g. c #584035",
"h. c #6D8E45",
"j. c #5E7B3B",
"k. c #618044",
/* pixels */
" ",
" . X o O ",
" . o + @ + # ",
" $ % & o o o o # ",
" * + = - + o o ; ",
" : > , < 1 2 3 4 5 6 ",
" 7 8 9 0 q w 0 e r t ",
" y u i p p p a > s d ",
" f g h j k g o o l 0 z x ",
" p c v b n > v 5 m m s 6 ",
" M o > m m N > > > > N s x ",
" B o - > V C C V > Z n A S 6 ",
" D F G H - > J A K > o o v L P ",
" D x I G H U Y T R & & T V E r W ",
" D D Q o ! ~ ^ y > > p r C m m / r 6 ",
" D D Q ( o ) > > > > > > > _ o 5 r 6 ",
" D Q s c 0 n ` o 4 2 > ' ] ] r [ { ",
" r r s } | ' c 2 > > | p ...5 x ",
" ..X.N Y ` h _ o.} | O._ 4 N E r ",
" +.o @.r ~ ^ #.$.T %.0 &.*.C s r D ",
" =.+ & -.r r r r r p p ..X.Y > r D D ",
" f ;.:.3 Z Z >.,.n <.& & 1.2.p r D ",
" 3.C 4.' > > p > > > > p r r $ ",
" 6 r s } E r r r r r r r W ",
" x r 5.6.6.6.6 ",
" 7. 8.9.0.0.0.q. ",
" 7. 7. w.e.r.t.9.9.0.0.y.r.r.q. ",
" 7. w.r.r.u.y.9.i.0.p.a.u.r.r.s. ",
" d.r.r.r.f.0.a.6.6.g.r.r.r.h. ",
" d.s.r.u.r.r.r.r.y.r.j.k.D ",
" d.k.k.k.k.k. D D ",
" D "
};

76
sprite/wall.xpm Normal file
View File

@ -0,0 +1,76 @@
/* XPM */
static char *f43facccf9fb4a3d880a26056a6bb63funGjxXraBfJ5iPVR[] = {
/* columns rows colors chars-per-pixel */
"64 64 6 1 ",
" c gray24",
". c #3E3E3E",
"X c #3F3F3F",
"o c gray50",
"O c #808080",
"+ c #818181",
/* pixels */
"OOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
"OXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXXX XXXO",
"oXXXX XX X X XXX X X X X XXX X X X X XXX X X X X XXX X X XXXXXo",
"o XX X XX X X X X XXX X X X X XXX X X X X XXX X X X X XXX XXXo",
"oXX X XX X X X X X X X X X X X X X X X X X X X X X X X X X Xo",
"oX XXX X X X X X X X X X X X X X X X X X X X X X X X XXX X XXo",
"oXXX XXX X X X X X X X X X X X X X X X X X X X X X X X XX X Xo",
"oXXXX X X X X X X X X X X X X X X X X X X X X X X X X XX XXXo",
"o X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X Xo",
"oX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXo",
"oXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X Xo",
"oX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXo",
"oXXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X Xo",
"oX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXo",
"o X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X Xo",
"oX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXo",
"oXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X Xo",
"oX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXo",
"oXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X Xo",
"oXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXo",
"o X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X Xo",
"oX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXo",
"oXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X Xo",
"oX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXo",
"oXXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X Xo",
"oX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXo",
"o X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X Xo",
"oX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXo",
"oXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X Xo",
"oX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXo",
"oXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X Xo",
"oXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXo",
"o X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X Xo",
"oX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXo",
"oXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X Xo",
"oX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXo",
"oXXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X Xo",
"oX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXo",
"o X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X Xo",
"oX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXo",
"oXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X Xo",
"oX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXo",
"oXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X Xo",
"oXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXo",
"o X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X Xo",
"oX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXo",
"oXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X Xo",
"oX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXo",
"oXXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X Xo",
"oX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXo",
"o X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X Xo",
"oX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXo",
"oXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X Xo",
"oX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXo",
"oXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X Xo",
"oXXX X X X X X X X X X X X X X X X X X X X X X X X X X X X X XXo",
"oXX XXX X X X X X X X X X X X X X X X X X X X X X X X X X X Xo",
"oX XXX X X X X X X X X X X X X X X X X X X X X X X X X X X XXo",
"oXX X XX X X X X X X X X X X X X X X X X X X X X X X X X XXXo",
"oX X XX X X X X X X X X X X X X X X X X X X X X X X X XXX X XXo",
"oXXXX XX XXX X X X X XXX X X X X XXX X X X X XXX X X X X XXX Xo",
"oXX XXX X X X XXX X X X X XXX X X X X XXX X X X X XXX X X X XXo",
"OX XXXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXXo",
"ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOooooo"
};

126
srcs/cast_ray.c Normal file
View File

@ -0,0 +1,126 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* cast_ray.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/05/04 18:08:14 by apommier #+# #+# */
/* Updated: 2022/05/04 18:35:18 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
#include "../includes/Cub3D.h"
void draw_ray(t_data *img)
{
float ray_angle = 0; //ray angle
float ray_y = 0; //where ray touch x
float ray_x = 0; //where ray touch y
float next_x = 0;
float next_y = 0;
float dist_v = 0;
float dist_h = 0;
int count = 0;
float aTan = 0;
int nb_ray = -1;
int my = 0;
int mx = 0;
int mp = 0;
printf("\nENTER DRAW RAY\n");
count = 0;
ray_angle = img->player.angle;
while (++nb_ray < 1)
{
printf("player_angle= %f\n", img->player.angle);
//start vertical ray
aTan = tan(deg_to_rad(ray_angle));
if (cos(deg_to_rad(ray_angle))> 0.001)//looking left
{
ray_x = (((int)img->player.x>>6)<<6) + 64;
ray_y = (img->player.x - ray_x) * aTan + img->player.y;
next_x = 64;
next_y = -next_x * aTan;
}
else if (cos(deg_to_rad(ray_angle))<-0.001)//looking right
{
ray_x = (((int)img->player.x>>6)<<6) - 0.0001;
ray_y = (img->player.x - ray_x) * aTan + img->player.y;
next_x = -64;
next_y = -next_x * aTan;
}
else
{
ray_x = img->player.x;
ray_y = img->player.y;
count = 8;
}
printf("ray_y= %f ray_x= %f\n", ray_y, ray_x);
printf("next_y= %f next_x= %f\n", next_y, next_x);
printf("BASE p_y= %f p_x= %f\n", img->player.y, img->player.x);
while (count < 8)
{
//printf("count = %d\n", count);
mx = (int)(ray_x)>>6;
my = (int)(ray_y)>>6;
mp = my * img->map.x + mx;
//printf("mx=%d my=%d mp= %d\n", mx, my, mp);
if (mp > 0 && mp < img->map.x * img->map.y && img->map.simple_map[mp] == '1')//hit wall
{
count = 8;
printf("vertical wall\n");
dist_v = cos(deg_to_rad(ray_angle)) * (ray_x-img->player.x) - sin(deg_to_rad(ray_angle)) * (ray_y-img->player.y);
}
else
{
ray_x += next_x;
ray_y += next_y;
count += 1;
}
}
//end vertical ray && start horizontal ray
count = 0;
aTan = 1.0 / aTan;
if (sin(deg_to_rad(ray_angle)) > 0.001)//looking up
{
ray_y = (((int)img->player.y>>6)<<6) - 0.0001;
ray_x = (img->player.y - ray_y) * aTan + img->player.x;
next_y = -64;
next_x = next_y * aTan;
}
else if (sin(deg_to_rad(ray_angle))<-0.001)//looking down
{
ray_y = (((int)img->player.y>>6)<<6) + 64;
ray_x = (img->player.y - ray_y) * aTan + img->player.x;
next_y = 64;
next_x = -next_y * aTan;
}
else
{
ray_x = img->player.x;
ray_y = img->player.y;
count = 8;
} //looking straight left or right
while (count<8)
{
mx = (int)(ray_x)>>6;
my = (int)(ray_y)>>6;
mp = my * img->map.x + mx;
if (mp > 0 && mp < img->map.x * img->map.y && img->map.simple_map[mp] == '1')
{
count = 8;
printf ("horizontal wall\n");
dist_h = cos(deg_to_rad(ray_angle)) * (ray_x - img->player.x) - sin(deg_to_rad(ray_angle)) * (ray_y - img->player.y);
}//hit
else
{
ray_x += next_x;
ray_y += next_y;
count += 1;
} //check next horizontal
}
printf("dist_h= %f dist_v= %f\n", dist_h, dist_v);
}
}

View File

@ -6,22 +6,45 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/02/13 16:42:55 by apommier #+# #+# */ /* Created: 2022/02/13 16:42:55 by apommier #+# #+# */
/* Updated: 2022/05/03 17:13:33 by apommier ### ########.fr */ /* Updated: 2022/05/04 18:08:57 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "Cub3D.h" #include "../includes/Cub3D.h"
void print_ray(t_data *img) void print_ray(t_data *img)
{ {
int i = -1; int i = -1;
while (++i < 15) while (++i < 15)
{ {
mlx_pixel_put(img->mlx, img->mlx_win, (img->player.x + (img->player.vx / 5) * i) + 2, (img->player.y + (img->player.vy / 5) * i) + 2, 255); mlx_pixel_put(img->mlx, img->mlx_win, (img->player.x + (img->player.vx) * i) + 3, (img->player.y + (img->player.vy) * i) + 3, 255);
mlx_pixel_put(img->mlx, img->mlx_win, (img->player.x + (img->player.vx) * i) + 4, (img->player.y + (img->player.vy) * i) + 3, 255);
mlx_pixel_put(img->mlx, img->mlx_win, (img->player.x + (img->player.vx) * i) + 3, (img->player.y + (img->player.vy) * i) + 4, 255);
} }
} }
char **set_map(char **argv) /*map_info set_map(char **argv) //simple local allocation
{
map_info map;
char ret_map[]=
{
'1','1','1','1','1','1','1','1',
'1','0','1','0','0','0','0','1',
'1','0','1','0','0','0','0','1',
'1','0','0','0','0','0','0','1',
'1','0','0','0','0','0','0','1',
'1','0','1','0','0','1','0','1',
'1','0','0','0','0','1','0','1',
'1','1','1','1','1','1','1','1',
};
map.simple_map = ret_map;
map.x = 8;
map.y = 8;
map.size = map.x * map.y;
return (map);
}*/
/*map_info set_map(char **argv)
{ {
char **map_tab; char **map_tab;
char *map; char *map;
@ -48,6 +71,42 @@ char **set_map(char **argv)
if (!map_tab) if (!map_tab)
ft_error("Error: Map file is empty"); ft_error("Error: Map file is empty");
return (map_tab); return (map_tab);
}*/
map_info set_map(char **argv)
{
//char **map_tab;
char *map;
char *del;
char *swap;
int fd;
map_info ret_map;
map = 0;
fd = open(argv[1], O_RDONLY);
if (fd == -1)
ft_error("Error: Open call fail");
swap = get_next_line(fd);
while (swap)
{
del = map;
if (swap[ft_strlen(swap) - 1] == '\n')
swap[ft_strlen(swap) - 1] = 0;
map = ft_strjoin(map, swap);
free(swap);
swap = get_next_line(fd);
free(del);
}
close(fd);
ret_map.simple_map = map;
ret_map.x = 8;
ret_map.y = 8;
ret_map.size = ret_map.x * ret_map.y;
//map_tab = ft_split(map, '\n');
//free(map);
//if (!map_tab)
// ft_error("Error: Map file is empty");
return (ret_map);
} }
void print_case(char type, t_data *img, int y, int x) void print_case(char type, t_data *img, int y, int x)
@ -56,10 +115,11 @@ void print_case(char type, t_data *img, int y, int x)
int img_width; int img_width;
int img_height; int img_height;
//printf("type= %c\n", type);
if (type == '1') if (type == '1')
buffer = mlx_xpm_file_to_image(img->mlx, "./sprite/snow_tree.xpm", buffer = mlx_xpm_file_to_image(img->mlx, "./sprite/wall.xpm",
&img_width, &img_height); &img_width, &img_height);
else else if (type == '0')
buffer = mlx_xpm_file_to_image(img->mlx, "./sprite/back.xpm", buffer = mlx_xpm_file_to_image(img->mlx, "./sprite/back.xpm",
&img_width, &img_height); &img_width, &img_height);
if (!buffer) if (!buffer)
@ -68,14 +128,28 @@ void print_case(char type, t_data *img, int y, int x)
mlx_destroy_image(img->mlx, buffer); mlx_destroy_image(img->mlx, buffer);
} }
void print_map(char **map, t_data *img) void print_map(map_info map, t_data *img)
{ {
int i; int i = 0;
int j; int j;
int x = 0; int x = 0;
int y = 0; int y = 0;
i = 0; //printf("map= -%s-\n", map.simple_map);
while (i < map.size)
{
j = -1;
x = 0;
while (++j < 8)
{
print_case(map.simple_map[i], img, (y * 64), (x * 64));
i++;
x++;
}
y++;
}
/*i = 0;
j = 0; j = 0;
while (map[j]) while (map[j])
{ {
@ -83,13 +157,21 @@ void print_map(char **map, t_data *img)
i = 0; i = 0;
while (map[j][i]) while (map[j][i])
{ {
print_case(map[j][i], img, (j * 32) + y, (i * 32) + x); print_case(map[j][i], img, (j * 64), (i * 64));
i++; i++;
x++; x++;
} }
j++; j++;
y++; y++;
} }*/
}
void print_line(t_data *img, float x, float y)
{
float i = -1;
int j = -1;
while (++i < x && ++j < y)
mlx_pixel_put(img->mlx, img->mlx_win, (img->player.x + (img->player.vx / 5) * i) + 2, (img->player.y + (img->player.vy / 5) * i) + 2, 65);
} }
void print_player(player player, t_data *img) void print_player(player player, t_data *img)
@ -115,13 +197,16 @@ int main(int argc, char **argv)
ft_error("Error: mlx_init fail"); ft_error("Error: mlx_init fail");
img.map = set_map(argv); img.map = set_map(argv);
img.mlx_win = mlx_new_window(img.mlx, 1024, 512, "Cub3D"); img.mlx_win = mlx_new_window(img.mlx, 1024, 512, "Cub3D");
img.player.x = 250; //img->player.x=150; img->player.y=400; pa=90;
img.player.y = 250; //pdx=cos(deg_to_rad(pa)); pdy=-sin(deg_to_rad(pa));
img.player.vx = PI / 2; img.player.x = 150;
img.player.vy = PI / 2; img.player.y = 400;
img.player.angle = 0; img.player.angle = 90;
img.player.vx = cos(deg_to_rad(img.player.angle));
img.player.vy = sin(deg_to_rad(img.player.angle));
print_map(img.map, &img); print_map(img.map, &img);
print_player(img.player, &img); print_player(img.player, &img);
print_ray(&img);
mlx_hook(img.mlx_win, 2, 1L << 0, &key_press, &img); mlx_hook(img.mlx_win, 2, 1L << 0, &key_press, &img);
mlx_hook(img.mlx_win, 17, 0L, &quit_game, &img); mlx_hook(img.mlx_win, 17, 0L, &quit_game, &img);
mlx_loop(img.mlx); mlx_loop(img.mlx);

View File

@ -6,11 +6,11 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/02/13 23:37:02 by apommier #+# #+# */ /* Created: 2022/02/13 23:37:02 by apommier #+# #+# */
/* Updated: 2022/05/03 17:02:42 by apommier ### ########.fr */ /* Updated: 2022/05/04 18:07:18 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "Cub3D.h" #include "../includes/Cub3D.h"
int quit_game(t_data *img) int quit_game(t_data *img)
{ {
@ -18,10 +18,24 @@ int quit_game(t_data *img)
mlx_destroy_display(img->mlx); mlx_destroy_display(img->mlx);
if (img->mlx) if (img->mlx)
free(img->mlx); free(img->mlx);
free_double(img->map); //free_double(img->map);
exit(0); exit(0);
} }
float deg_to_rad(int angle)
{
return (angle * M_PI / 180.0);
}
int reset_angle(int angle)
{
if (angle > 359)
angle -= 360;
if (angle < 0)
angle += 360;
return (angle);
}
void ft_error(char *error_msg) void ft_error(char *error_msg)
{ {
/*int i; /*int i;
@ -33,48 +47,53 @@ void ft_error(char *error_msg)
int is_good(t_data *img, int type) int is_good(t_data *img, int type)
{ {
printf("touche= %c\n", type); //printf("touche= %c\n", type);
printf("vx= %f vy= %f\n", img->player.vx, img->player.vy); //printf("vx= %f vy= %f\n", img->player.vx, img->player.vy);
printf("player: x= %f y= %f\n", img->player.x, img->player.y); //printf("player: x= %f y= %f\n", img->player.x, img->player.y);
//
/*if(key=='a'){ pa+=5; pa=FixAng(pa); pdx=cos(deg_to_rad(pa)); pdy=-sin(deg_to_rad(pa));}
if(key=='d'){ pa-=5; pa=FixAng(pa); pdx=cos(deg_to_rad(pa)); pdy=-sin(deg_to_rad(pa));}
if(key=='w'){ img->player.x+=pdx*5; img->player.y+=pdy*5;}
if(key=='s'){ img->player.x-=pdx*5; img->player.y-=pdy*5;}*/
//
if (type == 'w') if (type == 'w')
{ {
img->player.x += img->player.vx; img->player.x += img->player.vx * 5;
img->player.y += img->player.vy; img->player.y += img->player.vy * 5;
} }
else if (type == 's') else if (type == 's')
{ {
img->player.x -= img->player.vx; img->player.x -= img->player.vx * 5;
img->player.y -= img->player.vy; img->player.y -= img->player.vy * 5;
} }
else if (type == 'a') else if (type == 'a')
{ {
img->player.x += img->player.vx * 5; img->player.x += img->player.vy * 5;
//img->player.y -= img->player.vy; img->player.y -= img->player.vx * 5;
} }
else if (type == 'd') else if (type == 'd')
{ {
img->player.x -= img->player.vx * 5; img->player.x -= img->player.vy * 5;
//img->player.y += img->player.vy; img->player.y += img->player.vx * 5;
} }
else if (type == 65361)//fleche gauche else if (type == 65361)//fleche gauche
{ {
img->player.angle -=0.1; img->player.angle += 5;
if (img->player.angle < 0) img->player.angle = reset_angle(img->player.angle);
img->player.angle += 2 * PI; img->player.vx = cos(deg_to_rad(img->player.angle));
img->player.vx = cos(img->player.angle) * 5; img->player.vy = -sin(deg_to_rad(img->player.angle));
img->player.vy = sin(img->player.angle) * 5;
} }
else if (type == 65363)//fleche droite else if (type == 65363)//fleche droite
{ {
img->player.angle +=0.1; img->player.angle -= 5;
if (img->player.angle > 2 * PI) img->player.angle = reset_angle(img->player.angle);
img->player.angle -= 2 * PI; img->player.vx = cos(deg_to_rad(img->player.angle));
img->player.vx = cos(img->player.angle) * 5; img->player.vy = -sin(deg_to_rad(img->player.angle));
img->player.vy = sin(img->player.angle) * 5;
} }
else else
return (0); return (0);
printf("after player: x= %f y= %f\n", img->player.x, img->player.y); //printf("after player: x= %f y= %f\n", img->player.x, img->player.y);
return (1); return (1);
} }
@ -84,12 +103,15 @@ int key_press(int code, t_data *img)
quit_game(img); quit_game(img);
else else
{ {
is_good(img, code); if (is_good(img, code))
//printf("code = %d\n", code); {
//mlx_clear_window(img->mlx, img->mlx_win); //printf("code = %d\n", code);
print_map(img->map, img); //mlx_clear_window(img->mlx, img->mlx_win);
print_player(img->player, img); print_map(img->map, img);
print_ray(img); print_player(img->player, img);
print_ray(img);
draw_ray(img);
}
} }
return (1); return (1);
} }