From 6b216f73b1fd27894f79f34f3144cdea73a657ad Mon Sep 17 00:00:00 2001 From: xamora Date: Thu, 15 Dec 2022 20:39:37 +0100 Subject: [PATCH] probleme leaks bizarre, reorganiser le code, mettre enemie et assets --- so_long.c | 55 +++++++++++++++++++++++++++---------------------------- 1 file changed, 27 insertions(+), 28 deletions(-) mode change 100644 => 100755 so_long.c diff --git a/so_long.c b/so_long.c old mode 100644 new mode 100755 index 067dc1f..2c493bc --- a/so_long.c +++ b/so_long.c @@ -20,13 +20,23 @@ void all_free(t_data *data) int quit(t_data *data) { - mlx_destroy_image(data->mlx, data->mlx_img); + int i; + + mlx_destroy_image(data->mlx, data->imgs.ply); + mlx_destroy_image(data->mlx, data->imgs.bg); + mlx_destroy_image(data->mlx, data->imgs.wall); + mlx_destroy_image(data->mlx, data->imgs.col); + mlx_destroy_image(data->mlx, data->imgs.exit); + mlx_destroy_image(data->mlx, data->imgs.ene); mlx_clear_window(data->mlx, data->mlx_win); mlx_destroy_window(data->mlx, data->mlx_win); mlx_destroy_display(data->mlx); mlx_loop_end(data->mlx); + i = 0; + while (data->map[i]) + free(data->map[i++]); + free(data->map); free(data->mlx); - //free(data); exit(0); return (0); } @@ -111,16 +121,16 @@ int key_hook(int key, t_data *data) return (0); } -char *assets(char c) +void *assets(t_data *data, char c) { if (c == '0' || c == 'P') - return ("assets/background.xpm"); + return (data->imgs.bg); else if (c == '1') - return ("assets/wall.xpm"); + return (data->imgs.wall); else if (c == 'C') - return ("assets/collectible.xpm"); + return (data->imgs.col); else if (c == 'E') - return ("assets/exit.xpm"); + return (data->imgs.exit); return (NULL); } @@ -142,22 +152,11 @@ void draw(t_data *data) while (y < -1) y++; if (x == data->x_player && y == data->y_player) - { - data->mlx_img = mlx_xpm_file_to_image(data->mlx, "assets/player.xpm", &data->size, &data->size); - mlx_put_image_to_window(data->mlx, data->mlx_win, data->mlx_img, data->w_screen / 2, data->h_screen / 2); - } + mlx_put_image_to_window(data->mlx, data->mlx_win, data->imgs.ply, data->w_screen / 2, data->h_screen / 2); else if (y < 0 || x < 0 || y >= data->h_map || data->map[y][x] == '\n' || data->map[y][x] == '\0') - { - data->mlx_img = mlx_xpm_file_to_image(data->mlx, "assets/background.xpm", &data->size, &data->size); - mlx_put_image_to_window(data->mlx, data->mlx_win, data->mlx_img, (data->w_screen / 2) + ((x - data->x_player) * data->size), (data->h_screen / 2) + ((y - data->y_player) * data->size)); - } + mlx_put_image_to_window(data->mlx, data->mlx_win, data->imgs.bg, (data->w_screen / 2) + ((x - data->x_player) * data->size), (data->h_screen / 2) + ((y - data->y_player) * data->size)); else - { - data->mlx_img = mlx_xpm_file_to_image(data->mlx, assets(data->map[y][x]), &data->size, &data->size); - //if (!data->mlx_img) - //data->mlx_img = mlx_xpm_file_to_image(data->mlx, assets('0'), &data->size, &data->size); - mlx_put_image_to_window(data->mlx, data->mlx_win, data->mlx_img, (data->w_screen / 2) + ((x - data->x_player) * data->size), (data->h_screen / 2) + ((y - data->y_player) * data->size)); - } + mlx_put_image_to_window(data->mlx, data->mlx_win, assets(data, data->map[y][x]), (data->w_screen / 2) + ((x - data->x_player) * data->size), (data->h_screen / 2) + ((y - data->y_player) * data->size)); y++; } x++; @@ -183,12 +182,17 @@ void init_data(t_data *data) data->y_player = 0; data->mlx = mlx_init(); mlx_get_screen_size(data->mlx, &data->w_screen, &data->h_screen); + data->imgs.ply = mlx_xpm_file_to_image(data->mlx, "assets/player.xpm", &data->size, &data->size); + data->imgs.bg = mlx_xpm_file_to_image(data->mlx, "assets/background.xpm", &data->size, &data->size); + data->imgs.wall = mlx_xpm_file_to_image(data->mlx, "assets/wall.xpm", &data->size, &data->size); + data->imgs.col = mlx_xpm_file_to_image(data->mlx, "assets/collectible.xpm", &data->size, &data->size); + data->imgs.exit = mlx_xpm_file_to_image(data->mlx, "assets/exit.xpm", &data->size, &data->size); + data->imgs.ene = mlx_xpm_file_to_image(data->mlx, "assets/enemy.xpm", &data->size, &data->size); } void get_map(char *argv[], t_data *data) { char *tmp_map; - //char *tmp_map2; char *map; int i; int fd; @@ -201,19 +205,14 @@ void get_map(char *argv[], t_data *data) tmp_map = NULL; while (i == 0 || tmp_map != NULL) { - if (tmp_map) - free(tmp_map); tmp_map = get_next_line(fd); if (tmp_map && map) - { map = ft_strjoin_free(map, tmp_map, 1); - } else if (tmp_map) map = ft_strdup(tmp_map); + free(tmp_map); i++; } - if (tmp_map) - free(tmp_map); data->map = ft_split(map, '\n'); data->h_map = i - 1; free(map);