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)
{
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);