probleme leaks bizarre, reorganiser le code, mettre enemie et assets

This commit is contained in:
xamora 2022-12-15 20:39:37 +01:00
parent 5c39daa38c
commit 6b216f73b1

55
so_long.c Normal file → Executable file
View file

@ -20,13 +20,23 @@ void all_free(t_data *data)
int quit(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_clear_window(data->mlx, data->mlx_win);
mlx_destroy_window(data->mlx, data->mlx_win); mlx_destroy_window(data->mlx, data->mlx_win);
mlx_destroy_display(data->mlx); mlx_destroy_display(data->mlx);
mlx_loop_end(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->mlx);
//free(data);
exit(0); exit(0);
return (0); return (0);
} }
@ -111,16 +121,16 @@ int key_hook(int key, t_data *data)
return (0); return (0);
} }
char *assets(char c) void *assets(t_data *data, char c)
{ {
if (c == '0' || c == 'P') if (c == '0' || c == 'P')
return ("assets/background.xpm"); return (data->imgs.bg);
else if (c == '1') else if (c == '1')
return ("assets/wall.xpm"); return (data->imgs.wall);
else if (c == 'C') else if (c == 'C')
return ("assets/collectible.xpm"); return (data->imgs.col);
else if (c == 'E') else if (c == 'E')
return ("assets/exit.xpm"); return (data->imgs.exit);
return (NULL); return (NULL);
} }
@ -142,22 +152,11 @@ void draw(t_data *data)
while (y < -1) while (y < -1)
y++; y++;
if (x == data->x_player && y == data->y_player) if (x == data->x_player && y == data->y_player)
{ mlx_put_image_to_window(data->mlx, data->mlx_win, data->imgs.ply, data->w_screen / 2, data->h_screen / 2);
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);
}
else if (y < 0 || x < 0 || y >= data->h_map || data->map[y][x] == '\n' || data->map[y][x] == '\0') else if (y < 0 || x < 0 || y >= data->h_map || data->map[y][x] == '\n' || data->map[y][x] == '\0')
{ 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));
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));
}
else else
{ 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));
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));
}
y++; y++;
} }
x++; x++;
@ -183,12 +182,17 @@ void init_data(t_data *data)
data->y_player = 0; data->y_player = 0;
data->mlx = mlx_init(); data->mlx = mlx_init();
mlx_get_screen_size(data->mlx, &data->w_screen, &data->h_screen); 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) void get_map(char *argv[], t_data *data)
{ {
char *tmp_map; char *tmp_map;
//char *tmp_map2;
char *map; char *map;
int i; int i;
int fd; int fd;
@ -201,19 +205,14 @@ void get_map(char *argv[], t_data *data)
tmp_map = NULL; tmp_map = NULL;
while (i == 0 || tmp_map != NULL) while (i == 0 || tmp_map != NULL)
{ {
if (tmp_map)
free(tmp_map);
tmp_map = get_next_line(fd); tmp_map = get_next_line(fd);
if (tmp_map && map) if (tmp_map && map)
{
map = ft_strjoin_free(map, tmp_map, 1); map = ft_strjoin_free(map, tmp_map, 1);
}
else if (tmp_map) else if (tmp_map)
map = ft_strdup(tmp_map); map = ft_strdup(tmp_map);
free(tmp_map);
i++; i++;
} }
if (tmp_map)
free(tmp_map);
data->map = ft_split(map, '\n'); data->map = ft_split(map, '\n');
data->h_map = i - 1; data->h_map = i - 1;
free(map); free(map);