Refactor game and parser files for improved memory management and code clarity, and Error if D is used but texture not set

This commit is contained in:
whaffman 2025-06-10 19:32:55 +02:00
parent 2c37d62475
commit 555f2dc00c
4 changed files with 41 additions and 38 deletions

View File

@ -1,12 +1,12 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* game.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/04/15 15:46:08 by qmennen #+# #+# */
/* Updated: 2025/06/10 15:25:17 by qmennen ### ########.fr */
/* :::::::: */
/* game.c :+: :+: */
/* +:+ */
/* By: qmennen <qmennen@student.codam.nl> +#+ */
/* +#+ */
/* 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;
}

View File

@ -1,12 +1,12 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* main.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/04/15 16:01:29 by qmennen #+# #+# */
/* Updated: 2025/06/04 18:53:54 by qmennen ### ########.fr */
/* :::::::: */
/* main.c :+: :+: */
/* +:+ */
/* By: qmennen <qmennen@student.codam.nl> +#+ */
/* +#+ */
/* 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);

View File

@ -1,12 +1,12 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* parse_map.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/04/22 13:12:04 by whaffman #+# #+# */
/* Updated: 2025/06/10 15:45:35 by qmennen ### ########.fr */
/* :::::::: */
/* parse_map.c :+: :+: */
/* +:+ */
/* By: qmennen <qmennen@student.codam.nl> +#+ */
/* +#+ */
/* 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);

View File

@ -1,18 +1,18 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* parse_tile.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/04/22 13:12:31 by whaffman #+# #+# */
/* Updated: 2025/06/04 17:50:07 by qmennen ### ########.fr */
/* :::::::: */
/* parse_tile.c :+: :+: */
/* +:+ */
/* By: qmennen <qmennen@student.codam.nl> +#+ */
/* +#+ */
/* 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