diff --git a/Makefile b/Makefile index 89d6dfd..b45c076 100644 --- a/Makefile +++ b/Makefile @@ -6,17 +6,18 @@ # 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 SRCS = srcs/main.c\ + srcs/cast_ray.c\ srcs/utils.c OBJS = ${SRCS:.c=.o} CC = gcc LIB = -L ./mlx -lmlx -lXext -lX11 -lm -CFLAGS = -Wall -Wextra +CFLAGS = -Wall -Wextra -g RM = rm -rf LIBFT = ./libft diff --git a/srcs/Cub3D.h b/includes/Cub3D.h similarity index 82% rename from srcs/Cub3D.h rename to includes/Cub3D.h index 1d8a199..b5fb8ea 100644 --- a/srcs/Cub3D.h +++ b/includes/Cub3D.h @@ -6,7 +6,7 @@ /* 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 # include -# define PI 3.14159265359 +# define PI 3.1415926535 typedef struct map_information{ - char **map; - int floor; - int sky; + char **map; + int floor; + int sky; + char *simple_map; + int size; + int x; + int y; } map_info; typedef struct player_position @@ -43,15 +47,19 @@ typedef struct player_position typedef struct s_data { void *mlx; void *mlx_win; - char **map; + char **double_map; + map_info map; player player; } 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); int key_press(int code, t_data *img); int quit_game(t_data *img); void ft_error(char *error_msg); 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 \ No newline at end of file diff --git a/map/map b/map/map index bd164a3..b2bf31c 100644 --- a/map/map +++ b/map/map @@ -1,8 +1,8 @@ -111111111 -101000001 -101000001 -100000001 -100000001 -101001001 -100001001 -111111111 \ No newline at end of file +11111111 +10100001 +10100001 +10000001 +10000001 +10100101 +10000101 +11111111 \ No newline at end of file diff --git a/sprite/Nouveau projet (2).png:Zone.Identifier b/sprite/Nouveau projet (2).png:Zone.Identifier deleted file mode 100644 index ac5aebd..0000000 --- a/sprite/Nouveau projet (2).png:Zone.Identifier +++ /dev/null @@ -1,3 +0,0 @@ -[ZoneTransfer] -ZoneId=3 -HostUrl=https://www.photopea.com/ diff --git a/sprite/Nouveau-projet-_1_.xpm:Zone.Identifier b/sprite/Nouveau-projet-_1_.xpm:Zone.Identifier deleted file mode 100644 index eafbb5c..0000000 --- a/sprite/Nouveau-projet-_1_.xpm:Zone.Identifier +++ /dev/null @@ -1,4 +0,0 @@ -[ZoneTransfer] -ZoneId=3 -ReferrerUrl=https://convertio.co/ -HostUrl=https://s122.convertio.me/p/okLgAQyWaXH3BPAVt8iwfw/56be0757b02ebc3b426877866a2d5391/Nouveau-projet-_1_.xpm diff --git a/sprite/Nouveau-projet-_2_.xpm:Zone.Identifier b/sprite/Nouveau-projet-_2_.xpm:Zone.Identifier deleted file mode 100644 index c0b0f58..0000000 --- a/sprite/Nouveau-projet-_2_.xpm:Zone.Identifier +++ /dev/null @@ -1,4 +0,0 @@ -[ZoneTransfer] -ZoneId=3 -ReferrerUrl=https://convertio.co/ -HostUrl=https://s167.convertio.me/p/yeHxKzYHMsgzX63ZlmVYcg/c44fd54ef093950da76fa0aecf3d2964/Nouveau-projet-_2_.xpm diff --git a/sprite/Nouveau-projet.xpm:Zone.Identifier b/sprite/Nouveau-projet.xpm:Zone.Identifier deleted file mode 100644 index 1b1d476..0000000 --- a/sprite/Nouveau-projet.xpm:Zone.Identifier +++ /dev/null @@ -1,4 +0,0 @@ -[ZoneTransfer] -ZoneId=3 -ReferrerUrl=https://convertio.co/ -HostUrl=https://s112.convertio.me/p/r871wFIJih4QPAabVzANrg/56be0757b02ebc3b426877866a2d5391/Nouveau-projet.xpm diff --git a/sprite/back.xpm b/sprite/back.xpm index 5c5a341..bfab3a0 100644 --- a/sprite/back.xpm +++ b/sprite/back.xpm @@ -1,39 +1,75 @@ /* XPM */ -static char *bb1113caba2a4396da9abfa5b6bd9e69XybgBMHJ8j6bcKH6[] = { +static char *a1ddad0c418f4a35e76242f25979a7e2fCUuqr6bneEEiT2H[] = { /* columns rows colors chars-per-pixel */ -"32 32 1 1 ", -" c white", +"64 64 5 1 ", +" c #808080", +". c #F9F9F9", +"X c #FDFDFD", +"o c #FEFEFE", +"O c white", /* 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 ", +" " }; diff --git a/sprite/back2.xpm b/sprite/back2.xpm deleted file mode 100644 index b232879..0000000 --- a/sprite/back2.xpm +++ /dev/null @@ -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 " -}; diff --git a/sprite/player.xpm b/sprite/player.xpm index 8424355..34a5032 100644 --- a/sprite/player.xpm +++ b/sprite/player.xpm @@ -1,11 +1,15 @@ /* XPM */ -static char *_e3cb0cf605640f8cfaeebccffd9d135vy2vdFXbHJ5SKHnn[] = { +static char *bd85319af077459cedaeeaa7648f429dGIdxmjBFsN6lbeLv[] = { /* columns rows colors chars-per-pixel */ -"4 4 1 1 ", -" c #10F00B", +"8 8 1 1 ", +" c #12E22A", /* pixels */ -" ", -" ", -" ", -" " +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" " }; diff --git a/sprite/snow_tree.xpm b/sprite/snow_tree.xpm deleted file mode 100644 index cf84aaf..0000000 --- a/sprite/snow_tree.xpm +++ /dev/null @@ -1,39 +0,0 @@ -/* XPM */ -static char *_cbafb9a07c3469ffcea1686de5f8991nVqbqFhPdwVvKnWZ[] = { -/* columns rows colors chars-per-pixel */ -"32 32 1 1 ", -" c #3B3737", -/* pixels */ -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" " -}; diff --git a/sprite/snow_tree1.xpm b/sprite/snow_tree1.xpm deleted file mode 100644 index 5da8414..0000000 --- a/sprite/snow_tree1.xpm +++ /dev/null @@ -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 " -}; diff --git a/sprite/wall.xpm b/sprite/wall.xpm new file mode 100644 index 0000000..8612b53 --- /dev/null +++ b/sprite/wall.xpm @@ -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" +}; diff --git a/srcs/cast_ray.c b/srcs/cast_ray.c new file mode 100644 index 0000000..f568542 --- /dev/null +++ b/srcs/cast_ray.c @@ -0,0 +1,126 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* cast_ray.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: apommier +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* 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); + } +} \ No newline at end of file diff --git a/srcs/main.c b/srcs/main.c index 1b88a20..457e011 100644 --- a/srcs/main.c +++ b/srcs/main.c @@ -6,22 +6,45 @@ /* 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) { int i = -1; 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; @@ -48,6 +71,42 @@ char **set_map(char **argv) if (!map_tab) ft_error("Error: Map file is empty"); 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) @@ -56,10 +115,11 @@ void print_case(char type, t_data *img, int y, int x) int img_width; int img_height; + //printf("type= %c\n", type); 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); - else + else if (type == '0') buffer = mlx_xpm_file_to_image(img->mlx, "./sprite/back.xpm", &img_width, &img_height); if (!buffer) @@ -68,14 +128,28 @@ void print_case(char type, t_data *img, int y, int x) 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 x = 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; while (map[j]) { @@ -83,13 +157,21 @@ void print_map(char **map, t_data *img) i = 0; 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++; x++; } j++; 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) @@ -115,13 +197,16 @@ int main(int argc, char **argv) ft_error("Error: mlx_init fail"); img.map = set_map(argv); img.mlx_win = mlx_new_window(img.mlx, 1024, 512, "Cub3D"); - img.player.x = 250; - img.player.y = 250; - img.player.vx = PI / 2; - img.player.vy = PI / 2; - img.player.angle = 0; + //img->player.x=150; img->player.y=400; pa=90; + //pdx=cos(deg_to_rad(pa)); pdy=-sin(deg_to_rad(pa)); + img.player.x = 150; + img.player.y = 400; + 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_player(img.player, &img); + print_ray(&img); mlx_hook(img.mlx_win, 2, 1L << 0, &key_press, &img); mlx_hook(img.mlx_win, 17, 0L, &quit_game, &img); mlx_loop(img.mlx); diff --git a/srcs/utils.c b/srcs/utils.c index 1620e1a..455faea 100644 --- a/srcs/utils.c +++ b/srcs/utils.c @@ -6,11 +6,11 @@ /* 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) { @@ -18,10 +18,24 @@ int quit_game(t_data *img) mlx_destroy_display(img->mlx); if (img->mlx) free(img->mlx); - free_double(img->map); + //free_double(img->map); 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) { /*int i; @@ -33,48 +47,53 @@ void ft_error(char *error_msg) int is_good(t_data *img, int type) { - printf("touche= %c\n", type); - 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("touche= %c\n", type); + //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); + +// + /*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') { - img->player.x += img->player.vx; - img->player.y += img->player.vy; + img->player.x += img->player.vx * 5; + img->player.y += img->player.vy * 5; } else if (type == 's') { - img->player.x -= img->player.vx; - img->player.y -= img->player.vy; + img->player.x -= img->player.vx * 5; + img->player.y -= img->player.vy * 5; } else if (type == 'a') { - img->player.x += img->player.vx * 5; - //img->player.y -= img->player.vy; + img->player.x += img->player.vy * 5; + img->player.y -= img->player.vx * 5; } else if (type == 'd') { - img->player.x -= img->player.vx * 5; - //img->player.y += img->player.vy; + img->player.x -= img->player.vy * 5; + img->player.y += img->player.vx * 5; } else if (type == 65361)//fleche gauche { - img->player.angle -=0.1; - if (img->player.angle < 0) - img->player.angle += 2 * PI; - img->player.vx = cos(img->player.angle) * 5; - img->player.vy = sin(img->player.angle) * 5; + img->player.angle += 5; + img->player.angle = reset_angle(img->player.angle); + img->player.vx = cos(deg_to_rad(img->player.angle)); + img->player.vy = -sin(deg_to_rad(img->player.angle)); } else if (type == 65363)//fleche droite { - img->player.angle +=0.1; - if (img->player.angle > 2 * PI) - img->player.angle -= 2 * PI; - img->player.vx = cos(img->player.angle) * 5; - img->player.vy = sin(img->player.angle) * 5; + img->player.angle -= 5; + img->player.angle = reset_angle(img->player.angle); + img->player.vx = cos(deg_to_rad(img->player.angle)); + img->player.vy = -sin(deg_to_rad(img->player.angle)); } else 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); } @@ -84,12 +103,15 @@ int key_press(int code, t_data *img) quit_game(img); else { - is_good(img, code); - //printf("code = %d\n", code); - //mlx_clear_window(img->mlx, img->mlx_win); - print_map(img->map, img); - print_player(img->player, img); - print_ray(img); + if (is_good(img, code)) + { + //printf("code = %d\n", code); + //mlx_clear_window(img->mlx, img->mlx_win); + print_map(img->map, img); + print_player(img->player, img); + print_ray(img); + draw_ray(img); + } } return (1); }