From 555f2dc00cb808f6ec36edbcc63ae91a4baca83d Mon Sep 17 00:00:00 2001 From: whaffman Date: Tue, 10 Jun 2025 19:32:55 +0200 Subject: [PATCH] Refactor game and parser files for improved memory management and code clarity, and Error if D is used but texture not set --- src/game/game.c | 19 +++++++++++-------- src/main.c | 20 ++++++++------------ src/parser/parse_map.c | 17 ++++++++--------- src/parser/parse_tile.c | 23 ++++++++++++++--------- 4 files changed, 41 insertions(+), 38 deletions(-) diff --git a/src/game/game.c b/src/game/game.c index d29e458..a959770 100644 --- a/src/game/game.c +++ b/src/game/game.c @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ -/* ::: :::::::: */ -/* game.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: qmennen +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/04/15 15:46:08 by qmennen #+# #+# */ -/* Updated: 2025/06/10 15:25:17 by qmennen ### ########.fr */ +/* :::::::: */ +/* game.c :+: :+: */ +/* +:+ */ +/* By: qmennen +#+ */ +/* +#+ */ +/* Created: 2025/04/15 15:46:08 by qmennen #+# #+# */ +/* Updated: 2025/06/10 19:12:41 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -20,6 +20,7 @@ int game_create(t_game **game) ft_memset(*game, 0, sizeof(t_game)); (*game)->fps = 20; (*game)->scoreboard = malloc(sizeof(t_scoreboard)); + ft_memset((*game)->scoreboard, 0, sizeof(t_scoreboard)); if (!(*game)->scoreboard) { return (free(*game), FAILURE); @@ -100,7 +101,9 @@ void game_free(t_game *game) map_free(game->map); if (game->keyboard) free(game->keyboard); - if (game->scoreboard) + if (game->scoreboard && game->screen && game->screen->mlx) free_scoreboard(game->screen->mlx, game->scoreboard); + else if (game->scoreboard) + free(game->scoreboard); game->scoreboard = NULL; } diff --git a/src/main.c b/src/main.c index c21bdc3..08d7ce7 100644 --- a/src/main.c +++ b/src/main.c @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ -/* ::: :::::::: */ -/* main.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: qmennen +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/04/15 16:01:29 by qmennen #+# #+# */ -/* Updated: 2025/06/04 18:53:54 by qmennen ### ########.fr */ +/* :::::::: */ +/* main.c :+: :+: */ +/* +:+ */ +/* By: qmennen +#+ */ +/* +#+ */ +/* Created: 2025/04/15 16:01:29 by qmennen #+# #+# */ +/* Updated: 2025/06/10 19:13:38 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -22,11 +22,7 @@ int main(int argc, char **argv) if (!valid_arguments(argc, argv)) return (EXIT_FAILURE); if (!initialize_cub3d(&game, argv[1])) - { - perror("initialize_cub3d"); - game_free(game); - return (EXIT_FAILURE); - } + return (game_free(game), EXIT_FAILURE); manager = game_manager_create(game, START_STATE); manager->menu = create_main_menu(manager); manager->end_screen = create_end_screen(manager); diff --git a/src/parser/parse_map.c b/src/parser/parse_map.c index e921413..0812717 100644 --- a/src/parser/parse_map.c +++ b/src/parser/parse_map.c @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ -/* ::: :::::::: */ -/* parse_map.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: qmennen +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/04/22 13:12:04 by whaffman #+# #+# */ -/* Updated: 2025/06/10 15:45:35 by qmennen ### ########.fr */ +/* :::::::: */ +/* parse_map.c :+: :+: */ +/* +:+ */ +/* By: qmennen +#+ */ +/* +#+ */ +/* Created: 2025/04/22 13:12:04 by whaffman #+# #+# */ +/* Updated: 2025/06/10 19:14:51 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -52,7 +52,7 @@ int parse_map_line(char **lines, t_game *game, int y) if (x >= ft_strlen(lines[y])) map->grid[y][x] = TILE_VOID; else - map->grid[y][x] = parse_tile(lines[y][x]); + map->grid[y][x] = parse_tile(game, lines[y][x]); if (map->grid[y][x] == TILE_PLAYER) { if (!parse_player(game, y, x, lines[y][x])) @@ -85,7 +85,6 @@ int prepare_map(char **lines, t_game *game) if (!map->grid) return (FAILURE); ft_memset(map->grid, 0, sizeof(t_tile *) * (map->height + 1)); - printf(" n_sprite_max %d\n", map->n_sprites_max); map->sprites = malloc(sizeof(t_sprite) * (map->n_sprites_max + 1)); if (!map->sprites) return (FAILURE); diff --git a/src/parser/parse_tile.c b/src/parser/parse_tile.c index a999979..049aa8d 100644 --- a/src/parser/parse_tile.c +++ b/src/parser/parse_tile.c @@ -1,18 +1,18 @@ /* ************************************************************************** */ /* */ -/* ::: :::::::: */ -/* parse_tile.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: qmennen +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/04/22 13:12:31 by whaffman #+# #+# */ -/* Updated: 2025/06/04 17:50:07 by qmennen ### ########.fr */ +/* :::::::: */ +/* parse_tile.c :+: :+: */ +/* +:+ */ +/* By: qmennen +#+ */ +/* +#+ */ +/* Created: 2025/04/22 13:12:31 by whaffman #+# #+# */ +/* Updated: 2025/06/10 19:15:19 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ #include "cub3d.h" -int parse_tile(char c) +int parse_tile(t_game *game, char c) { if (c == '1') return (TILE_WALL); @@ -23,7 +23,12 @@ int parse_tile(char c) else if (c == 'N' || c == 'S' || c == 'E' || c == 'W') return (TILE_PLAYER); else if (c == 'D') - return (TILE_DOOR); + { + if (game->map->textures[SIDE_DOOR] == NULL) + return (ft_putstr_fd("Error: Door texture not set\n", 2), -2); + else + return (TILE_DOOR); + } else if (c >= 'a' && c <= 'z') return (TILE_EMPTY); else