diff --git a/Makefile b/Makefile index 93412fa..6f6867e 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: adjoly +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2023/11/01 11:03:22 by adjoly #+# #+# # -# Updated: 2024/01/13 16:14:46 by adjoly ### ########.fr # +# Updated: 2024/01/13 17:23:48 by adjoly ### ########.fr # # # # **************************************************************************** # @@ -27,13 +27,15 @@ HEADERS = so_long.h LIB = MacroLibX/libmlx.so \ libft/libft.a \ - get_next_line/get_next_line.a + get_next_line/get_next_line.a \ + printf/libftprintf.a MLX_FLAGS = -lSDL2 $(NAME): $(OBJS) make -C libft make -C get_next_line + make -C printf $(CC) $(FLAGS) $(MLX_FLAGS) $(OBJS) $(LIB) -o $(NAME) %.o: %.c @@ -44,11 +46,13 @@ all: $(NAME) clean: make -C libft clean make -C get_next_line clean + make -C printf rm -f $(OBJS) fclean: clean make -C libft fclean make -C get_next_line fclean + make -C printf rm -f $(NAME) re: fclean all diff --git a/ft_move_character.c b/ft_move_character.c index acd4750..ba7ac45 100644 --- a/ft_move_character.c +++ b/ft_move_character.c @@ -6,55 +6,136 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/07 19:13:01 by adjoly #+# #+# */ -/* Updated: 2024/01/13 17:13:08 by adjoly ### ########.fr */ +/* Updated: 2024/01/13 18:14:25 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ #include "MacroLibX/includes/mlx.h" #include "libft/libft.h" +#include "printf/ft_printf.h" #include "so_long.h" void ft_move_up(t_window *win) { - if (win->map[win->p_coords->y - 1][win->p_coords->x] != '1') + if (win->map[win->p_coords->y - 1][win->p_coords->x] == 'C') { - ft_putimg(win->p_coords->x, win->p_coords->y - 1, win, P_PNG); + ft_putimg(win->p_coords->x, win->p_coords->y - 1, win, P_PNG); + ft_putimg(win->p_coords->x, win->p_coords->y, win, G_PNG); + win->map[win->p_coords->y - 1][win->p_coords->x] = '0'; + win->p_coords->y = win->p_coords->y - 1; + ft_printf("%d\n", win->c_count); + win->c_count--; + ft_printf("%d\n", win->c_count); + win->mov_count++; + } + else if (win->p_coords->y == win->e_coords->y && win->e_coords->x == win->p_coords->x && win->map[win->p_coords->y - 1][win->p_coords->x] != '1') + { + ft_putimg(win->p_coords->x, win->p_coords->y - 1, win, P_PNG); + ft_putimg(win->p_coords->x, win->p_coords->y, win, E_PNG); + win->p_coords->y = win->p_coords->y - 1; + win->mov_count++; + } + else if (win->map[win->p_coords->y - 1][win->p_coords->x] == 'E' && win->c_count == 0) + exit(0); + else if (win->map[win->p_coords->y - 1][win->p_coords->x] != '1') + { + ft_putimg(win->p_coords->x, win->p_coords->y - 1, win, P_PNG); ft_putimg(win->p_coords->x, win->p_coords->y, win, G_PNG); win->p_coords->y = win->p_coords->y - 1; - ft_putstr_fd("UP", 1); + win->mov_count++; } } void ft_move_down(t_window *win) { - if (win->map[win->p_coords->y + 1][win->p_coords->x] != '1') + if (win->map[win->p_coords->y + 1][win->p_coords->x] == 'C') + { + ft_putimg(win->p_coords->x, win->p_coords->y + 1, win, P_PNG); + ft_putimg(win->p_coords->x, win->p_coords->y, win, G_PNG); + win->map[win->p_coords->y + 1][win->p_coords->x] = '0'; + win->p_coords->y = win->p_coords->y + 1; + ft_printf("%d\n", win->c_count); + win->c_count--; + ft_printf("%d\n", win->c_count); + win->mov_count++; + } + else if (win->p_coords->x == win->e_coords->x && win->p_coords->y == win->e_coords->y && win->map[win->p_coords->y + 1][win->p_coords->x] != '1') + { + ft_putimg(win->p_coords->x, win->p_coords->y + 1, win, P_PNG); + ft_putimg(win->p_coords->x, win->p_coords->y, win, E_PNG); + win->p_coords->y = win->p_coords->y + 1; + win->mov_count++; + } + else if (win->map[win->p_coords->y + 1][win->p_coords->x] == 'E' && win->c_count == 0) + exit(0); + else if (win->map[win->p_coords->y + 1][win->p_coords->x] != '1') { ft_putimg(win->p_coords->x, win->p_coords->y + 1, win, P_PNG); ft_putimg(win->p_coords->x, win->p_coords->y, win, G_PNG); win->p_coords->y = win->p_coords->y + 1; - ft_putstr_fd("UP", 1); + win->mov_count++; } } void ft_move_left(t_window *win) { - if (win->map[win->p_coords->y][win->p_coords->x - 1] != '1') + if (win->map[win->p_coords->y][win->p_coords->x - 1] == 'C') + { + ft_putimg(win->p_coords->x - 1, win->p_coords->y, win, P_PNG); + ft_putimg(win->p_coords->x, win->p_coords->y, win, G_PNG); + win->map[win->p_coords->y][win->p_coords->x - 1] = '0'; + win->p_coords->x = win->p_coords->x - 1; + ft_printf("%d\n", win->c_count); + win->c_count--; + ft_printf("%d\n", win->c_count); + win->mov_count++; + } + else if (win->p_coords->x == win->e_coords->x && win->e_coords->y == win->p_coords->y && win->map[win->p_coords->y][win->p_coords->x - 1] != '1') + { + ft_putimg(win->p_coords->x - 1, win->p_coords->y, win, P_PNG); + ft_putimg(win->p_coords->x, win->p_coords->y, win, E_PNG); + win->p_coords->x = win->p_coords->x - 1; + win->mov_count++; + } + if (win->map[win->p_coords->y][win->p_coords->x - 1] == 'E' && win->c_count == 0) + exit(0); + else if (win->map[win->p_coords->y][win->p_coords->x - 1] != '1') { ft_putimg(win->p_coords->x - 1, win->p_coords->y, win, P_PNG); ft_putimg(win->p_coords->x, win->p_coords->y, win, G_PNG); win->p_coords->x = win->p_coords->x - 1; - ft_putstr_fd("UP", 1); + win->mov_count++; } } void ft_move_right(t_window *win) { - if (win->map[win->p_coords->y][win->p_coords->x + 1] != '1') + if (win->map[win->p_coords->y][win->p_coords->x + 1] == 'C') + { + ft_putimg(win->p_coords->x + 1, win->p_coords->y, win, P_PNG); + ft_putimg(win->p_coords->x, win->p_coords->y, win, G_PNG); + win->map[win->p_coords->y][win->p_coords->x + 1] = '0'; + win->p_coords->x = win->p_coords->x + 1; + ft_printf("%d\n", win->c_count); + win->c_count--; + ft_printf("%d\n", win->c_count); + win->mov_count++; + } + else if (win->p_coords->x == win->e_coords->x && win->p_coords->y == win->e_coords->y && win->map[win->p_coords->y][win->p_coords->x + 1] != '1') + { + ft_putimg(win->p_coords->x + 1, win->p_coords->y, win, P_PNG); + ft_putimg(win->p_coords->x, win->p_coords->y, win, E_PNG); + win->p_coords->x = win->p_coords->x + 1; + win->mov_count++; + } + else if (win->map[win->p_coords->y][win->p_coords->x + 1] == 'E' && win->c_count == 0) + exit(0); + else if (win->map[win->p_coords->y][win->p_coords->x + 1] != '1') { ft_putimg(win->p_coords->x + 1, win->p_coords->y, win, P_PNG); ft_putimg(win->p_coords->x, win->p_coords->y, win, G_PNG); win->p_coords->x = win->p_coords->x + 1; - ft_putstr_fd("UP", 1); + win->mov_count++; } (void)win; } @@ -78,5 +159,6 @@ int ft_key_event(int key, void *param) // RIGHT/D else if (key == 7) ft_move_right(win); + ft_printf("Mouvement : %d\n", win->mov_count); return (0); } diff --git a/ft_move_character.o b/ft_move_character.o index bd1b736..4b5f77b 100644 Binary files a/ft_move_character.o and b/ft_move_character.o differ diff --git a/get_map.c b/get_map.c index 6406928..4e34d42 100644 --- a/get_map.c +++ b/get_map.c @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/08 13:13:18 by adjoly #+# #+# */ -/* Updated: 2024/01/13 15:27:42 by adjoly ### ########.fr */ +/* Updated: 2024/01/13 19:02:19 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -56,6 +56,7 @@ char **ft_read_map(char *file_name) break ; i++; } + map_read[i] = NULL; close(fd); return (map_read); } diff --git a/get_map.o b/get_map.o index fb4c417..e57de24 100644 Binary files a/get_map.o and b/get_map.o differ diff --git a/main.c b/main.c index 855e48f..5cf2587 100644 --- a/main.c +++ b/main.c @@ -6,10 +6,11 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/06 16:18:56 by adjoly #+# #+# */ -/* Updated: 2024/01/13 17:02:27 by adjoly ### ########.fr */ +/* Updated: 2024/01/13 19:01:34 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ +#include "libft/libft.h" #include "so_long.h" void ft_freemap(char **map) @@ -25,13 +26,6 @@ void ft_freemap(char **map) free(map); } -int key_close(int key, void *param) -{ - if (key == 41) - mlx_loop_end(param); - return (0); -} - int win_close(int event, void *param) { if (event == 0) @@ -39,16 +33,16 @@ int win_close(int event, void *param) return (0); } -/*int win_update(void *param) +void ft_exit(t_window *win) { - t_window *win; - int y; - int x; - - win = (t_window *)param; - ft_move_character(key, void *param) - return (0); -}*/ + mlx_destroy_image(win->mlx, win->img); + mlx_destroy_window(win->mlx, win->win); + mlx_destroy_display(win->mlx); + ft_freemap(win->map); + free(win->p_coords); + free(win->e_coords); + free(win); +} int main(int ac, char **av) { @@ -62,7 +56,7 @@ int main(int ac, char **av) win->mlx = mlx_init(); win->win = mlx_new_window(win->mlx, 1600, 900, "so_fluffy"); win->map = map; - + win->mov_count = 0; mlx_on_event(win->mlx, win->win, MLX_WINDOW_EVENT, win_close, win->mlx); mlx_on_event(win->mlx, win->win, MLX_KEYDOWN, ft_key_event, win); // mlx_loop_hook(win->mlx, win_update, win); @@ -71,11 +65,9 @@ int main(int ac, char **av) mlx_destroy_image(win->mlx, win->img); mlx_destroy_window(win->mlx, win->win); mlx_destroy_display(win->mlx); - ft_freemap(map); - free(win->c_count); - // free(win->p_coords->y); - // free(win->p_coords->x); + ft_freemap(win->map); free(win->p_coords); + free(win->e_coords); free(win); return (0); } diff --git a/main.o b/main.o index 41b8386..15d3014 100644 Binary files a/main.o and b/main.o differ diff --git a/map.ber b/map.ber index 242be01..2954fea 100644 --- a/map.ber +++ b/map.ber @@ -1,5 +1,5 @@ 1111111111111 -10010000000C1 +100100C0000C1 1000011111001 -1P0011E000001 +1P0011E00C001 1111111111111 diff --git a/print_map.c b/print_map.c index 609dbc5..61fbeac 100644 --- a/print_map.c +++ b/print_map.c @@ -6,12 +6,13 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/09 15:30:06 by adjoly #+# #+# */ -/* Updated: 2024/01/13 17:14:56 by adjoly ### ########.fr */ +/* Updated: 2024/01/13 17:56:32 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ #include "MacroLibX/includes/mlx.h" #include "libft/libft.h" +#include "printf/ft_printf.h" #include "so_long.h" #include #include @@ -35,7 +36,7 @@ void ft_printmap(char **map, t_window *win) int y; y = 0; - win->c_count = malloc(1 * sizeof(size_t)); + // win->c_count = malloc(1 * sizeof(size_t)); win->c_count = 0; while (map[y]) { @@ -52,7 +53,12 @@ void ft_printmap(char **map, t_window *win) win->c_count++; } else if (map[y][x] == 'E') + { + win->e_coords = malloc(sizeof(t_coords *)); + win->e_coords->x = x; + win->e_coords->y = y; ft_putimg(x, y, win, E_PNG); + } else if (map[y][x] == 'P') { win->p_coords = malloc(sizeof(t_coords *)); diff --git a/print_map.o b/print_map.o index 0c07408..5536727 100644 Binary files a/print_map.o and b/print_map.o differ diff --git a/printf b/printf new file mode 160000 index 0000000..71ce8f7 --- /dev/null +++ b/printf @@ -0,0 +1 @@ +Subproject commit 71ce8f741dae4b145a4d5cb2bf74de651c859100 diff --git a/so_long b/so_long index b255364..7a08e25 100755 Binary files a/so_long and b/so_long differ diff --git a/so_long.h b/so_long.h index ece6883..e8c9da5 100644 --- a/so_long.h +++ b/so_long.h @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/06 16:19:42 by adjoly #+# #+# */ -/* Updated: 2024/01/13 17:13:56 by adjoly ### ########.fr */ +/* Updated: 2024/01/13 19:00:01 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,12 +16,12 @@ # include "MacroLibX/includes/mlx.h" # include "libft/libft.h" # include "get_next_line/get_next_line.h" +# include "printf/ft_printf.h" # include # include # include # include -# define T_SIZE 64 # define P_PNG "assets/player.png" # define G_PNG "assets/ground.png" # define E_PNG "assets/exit.png" @@ -32,7 +32,7 @@ typedef struct s_coords { int x; int y; -} t_coords; +} t_coords; typedef struct s_window { @@ -41,8 +41,9 @@ typedef struct s_window void *img; char **map; t_coords *p_coords; - size_t *c_count; - size_t *mov_count; + t_coords *e_coords; + size_t c_count; + size_t mov_count; } t_window; int ft_key_event(int key, void *param);