From 8f9347d2e71fe42e139bae13691e597da75d9741 Mon Sep 17 00:00:00 2001 From: whaffman Date: Sun, 20 Apr 2025 14:02:23 +0200 Subject: [PATCH] parser er in gefrutseld --- .vscode/settings.json | 3 +- inc/map.h | 17 ++--- inc/parser.h | 4 +- src/main.c | 111 ++++++++++++++--------------- src/map.c | 159 ++++++++++++++++++++++++++---------------- src/parser.c | 27 +------ src/render/render.c | 27 ++++--- 7 files changed, 182 insertions(+), 166 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 7f7aa60..dea6451 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,5 +4,6 @@ "cub3d.h": "c", "screen.h": "c", "mlx42.h": "c" - } + }, + "cmake.ignoreCMakeListsMissing": true } \ No newline at end of file diff --git a/inc/map.h b/inc/map.h index c6f8c0f..15466f9 100644 --- a/inc/map.h +++ b/inc/map.h @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ -/* ::: :::::::: */ -/* map.h :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: qmennen +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/04/17 19:19:19 by qmennen #+# #+# */ -/* Updated: 2025/04/17 19:23:59 by qmennen ### ########.fr */ +/* :::::::: */ +/* map.h :+: :+: */ +/* +:+ */ +/* By: qmennen +#+ */ +/* +#+ */ +/* Created: 2025/04/17 19:19:19 by qmennen #+# #+# */ +/* Updated: 2025/04/20 13:51:19 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -15,7 +15,8 @@ # include "cub3d.h" -int map_create(t_game **game); +int map_create(t_game **game, int argc, char **argv); void map_free(t_map *map); +void print_map(t_map *map); #endif diff --git a/inc/parser.h b/inc/parser.h index 5f6e949..49326f5 100644 --- a/inc/parser.h +++ b/inc/parser.h @@ -6,7 +6,7 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/04/19 14:41:55 by whaffman #+# #+# */ -/* Updated: 2025/04/19 14:46:21 by whaffman ######## odam.nl */ +/* Updated: 2025/04/20 13:50:42 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -24,6 +24,6 @@ int map_width(char **lines); int parse_tile(char c); int parse_map(char **lines, t_map *map); int parse_file(char *buffer, t_map *map); -void print_map(t_map *map); +void print_config(t_map *map); #endif \ No newline at end of file diff --git a/src/main.c b/src/main.c index 156b7c7..af43476 100644 --- a/src/main.c +++ b/src/main.c @@ -6,65 +6,66 @@ /* By: qmennen +#+ */ /* +#+ */ /* Created: 2025/04/15 16:01:29 by qmennen #+# #+# */ -/* Updated: 2025/04/19 14:47:19 by whaffman ######## odam.nl */ +/* Updated: 2025/04/20 13:46:26 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ # include "cub3d.h" -// static int init_game(t_game **game) -// { -// if (!game_create(game)) -// return (FAILURE); -// if (!player_create(game)) -// return (FAILURE); -// if (!map_create(game)) -// return (FAILURE); -// if (!keyboard_create(game)) -// return (FAILURE); -// screen_center((*game)->screen); -// mlx_key_hook((*game)->screen->mlx, keyhandle, *game); -// mlx_loop_hook((*game)->screen->mlx, game_loop, *game); -// return (SUCCESS); -// } - -// int main(void) -// { -// t_game *game; - -// errno = 0; -// game = NULL; -// init_game(&game); -// perror("after init"); -// mlx_loop(game->screen->mlx); -// game_terminate(game); -// return (EXIT_SUCCESS); -// } - - -int main(int argc, char **argv) +static int init_game(t_game **game, int argc, char **argv) { - t_map map; - char *buffer; + if (!game_create(game)) + return (FAILURE); + if (!player_create(game)) + return (FAILURE); + if (!map_create(game, argc, argv)) + return (FAILURE); + if (!keyboard_create(game)) + return (FAILURE); + screen_center((*game)->screen); + mlx_key_hook((*game)->screen->mlx, keyhandle, *game); + mlx_loop_hook((*game)->screen->mlx, game_loop, *game); + return (SUCCESS); +} - if (argc != 2) - { - ft_putstr_fd("Usage: ./cub3d \n", 2); - return (1); - } - buffer = read_map_file(argv[1]); - if (!buffer) - { - perror("Error reading map file"); - return (1); - } - if (parse_file(buffer, &map) == FAILURE) - { - ft_putstr_fd("Error parsing map file\n", 2); - free(buffer); - return (1); - } - print_map(&map); - free(buffer); - return (0); -} \ No newline at end of file + +int main(int argc, char **argv) +{ + t_game *game; + + errno = 0; + game = NULL; + init_game(&game, argc, argv); + perror("after init"); + mlx_loop(game->screen->mlx); + game_terminate(game); + return (EXIT_SUCCESS); +} + + +// int main(int argc, char **argv) +// { +// t_map map; +// char *buffer; + +// if (argc != 2) +// { +// ft_putstr_fd("Usage: ./cub3d \n", 2); +// return (1); +// } +// buffer = read_map_file(argv[1]); +// if (!buffer) +// { +// perror("Error reading map file"); +// return (1); +// } +// if (parse_file(buffer, &map) == FAILURE) +// { +// ft_putstr_fd("Error parsing map file\n", 2); +// free(buffer); +// return (1); +// } +// print_map(&map); +// free(buffer); +// return (0); +// } \ No newline at end of file diff --git a/src/map.c b/src/map.c index 4f63960..8460833 100644 --- a/src/map.c +++ b/src/map.c @@ -8,72 +8,72 @@ #define SUCCESS 1 -t_map *get_temp_map(void) -{ - const t_tile const_map[10][10] = - { - {-1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, - {1, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - {1, 0, 0, 0, 0, 0, 0, 1, 1, 1}, - {1, 0, 0, 2, 0, 0, 0, 1, -1, 1}, - {1, 1, 1, 1, 0, 1, 0, 1, -1, -1 }, - {1, 1, -1, 1, 0, 1, 1, 1, -1, 1}, - {1, 1, 1, 1, 0, 0, 0, 1, 1, 1}, - {1, 0, 0, 0, 1, 0, 0, 1, 0, 1}, - {1, 0, 0, 0, 1, 0, 0, 1, 0, 1}, - {1, 1, 1, 1, 1, 1, 1, 1, 1, 1} - }; - - t_tile **grid = malloc(10 * sizeof(int *)); - if (!grid) - return NULL; - - for (int i = 0; i < 10; i++) - { - grid[i] = malloc(10 * sizeof(int)); - if (!grid[i]) - { - for (int j = 0; j < i; j++) - free(grid[j]); - free(grid); - return NULL; - } - for (int j = 0; j < 10; j++) - { - grid[i][j] = const_map[i][j]; - } - } - t_map *map = malloc(sizeof(t_map)); - if (!map) - { - for (int i = 0; i < 10; i++) - free(grid[i]); - free(grid); - return NULL; - } - map->width = 10; - map->height = 10; - map->grid = grid; - return map; -} - -// void print_map(t_map *map) +// t_map *get_temp_map(void) // { -// const int chars[] = {'X', ' ', '.', '#', 'P'}; -// int i = 0; -// while (i < map->height) -// { -// int j = 0; -// while (j < map->width) +// const t_tile const_map[10][10] = // { -// printf("%c ", chars[map->grid[i][j] + 2]); -// j++; +// {-1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, +// {1, 1, 0, 0, 0, 0, 0, 0, 0, 1}, +// {1, 0, 0, 0, 0, 0, 0, 1, 1, 1}, +// {1, 0, 0, 2, 0, 0, 0, 1, -1, 1}, +// {1, 1, 1, 1, 0, 1, 0, 1, -1, -1 }, +// {1, 1, -1, 1, 0, 1, 1, 1, -1, 1}, +// {1, 1, 1, 1, 0, 0, 0, 1, 1, 1}, +// {1, 0, 0, 0, 1, 0, 0, 1, 0, 1}, +// {1, 0, 0, 0, 1, 0, 0, 1, 0, 1}, +// {1, 1, 1, 1, 1, 1, 1, 1, 1, 1} +// }; + +// t_tile **grid = malloc(10 * sizeof(int *)); +// if (!grid) +// return NULL; + +// for (int i = 0; i < 10; i++) +// { +// grid[i] = malloc(10 * sizeof(int)); +// if (!grid[i]) +// { +// for (int j = 0; j < i; j++) +// free(grid[j]); +// free(grid); +// return NULL; +// } +// for (int j = 0; j < 10; j++) +// { +// grid[i][j] = const_map[i][j]; // } -// printf("\n"); -// i++; // } +// t_map *map = malloc(sizeof(t_map)); +// if (!map) +// { +// for (int i = 0; i < 10; i++) +// free(grid[i]); +// free(grid); +// return NULL; +// } +// map->width = 10; +// map->height = 10; +// map->grid = grid; +// return map; // } +void print_map(t_map *map) +{ + const int chars[] = {'X', ' ', '.', '#', 'P'}; + int i = 0; + while (i < map->height) + { + int j = 0; + while (j < map->width) + { + printf("%c ", chars[map->grid[i][j] + 2]); + j++; + } + printf("\n"); + i++; + } +} + void free_map(t_map **map) { if (!map || !*map) @@ -168,11 +168,46 @@ int enclosed_map(t_map *map) // } -int map_create(t_game **game) +static int parse_args(int argc, char **argv, t_map *map) +{ + char *buffer; + + if (argc != 2) + { + ft_putstr_fd("Usage: ./cub3d \n", 2); + return (FAILURE); + } + buffer = read_map_file(argv[1]); + if (!buffer) + { + perror("Error reading map file"); + return (FAILURE); + } + if (parse_file(buffer, map) == FAILURE) + { + ft_putstr_fd("Error parsing map file\n", 2); + free(buffer); + return (FAILURE); + } + print_map(map); + free(buffer); + return (SUCCESS); +} + +int map_create(t_game **game, int argc, char **argv) + { t_map *map; - map = get_temp_map(); + if (!game || !*game) + return (FAILURE); + map = malloc(sizeof(t_map)); + if (!map) + { + perror("Error allocating memory for map"); + return (FAILURE); + } + parse_args(argc, argv, map); print_map(map); if(!enclosed_map(map)) fprintf(stderr, "NOT GOOD MAP FRIEND\n"); diff --git a/src/parser.c b/src/parser.c index 527fa1f..7655e2b 100644 --- a/src/parser.c +++ b/src/parser.c @@ -6,7 +6,7 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/04/18 11:29:58 by whaffman #+# #+# */ -/* Updated: 2025/04/19 15:50:18 by whaffman ######## odam.nl */ +/* Updated: 2025/04/20 13:51:37 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -247,11 +247,8 @@ int parse_file(char *buffer, t_map *map) } -void print_map(t_map *map) +void print_config(t_map *map) { - int i; - int j; - printf("Map:\n"); printf("Width: %d, Height: %d\n", map->width, map->height); printf("Textures:\n"); @@ -263,23 +260,5 @@ void print_map(t_map *map) printf("Ceiling color: %u\n", map->ceiling_color); printf("Grid:\n"); - i = 0; - while (i < map->height) - { - j = 0; - while (j < map->width) - { - if (map->grid[i][j] == TILE_WALL) - ft_putchar_fd('1', 1); - else if (map->grid[i][j] == TILE_EMPTY) - ft_putchar_fd('0', 1); - else if (map->grid[i][j] == TILE_PLAYER) - ft_putchar_fd('P', 1); - else - ft_putchar_fd(' ', 1); - j++; - } - ft_putchar_fd('\n', 1); - i++; - } + print_map(map); } diff --git a/src/render/render.c b/src/render/render.c index 966f079..7c9fced 100644 --- a/src/render/render.c +++ b/src/render/render.c @@ -6,27 +6,27 @@ /* By: qmennen +#+ */ /* +#+ */ /* Created: 2025/04/15 16:28:10 by qmennen #+# #+# */ -/* Updated: 2025/04/18 11:21:21 by whaffman ######## odam.nl */ +/* Updated: 2025/04/20 14:00:47 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ #include "render.h" #include "MLX42.h" -int render_check_bounds(t_screen *screen, t_vec2 *point) +int render_check_bounds(t_screen *screen, t_vec2 *point) { return (point->x >= 0 && point->x < screen->width && point->y > 0 && point->y < screen->height); } -void render_tile(t_screen *screen, int x, int y, t_tile tile) +void render_tile(t_screen *screen, int x, int y, t_tile tile) { - int i; - int xp; - int yp; + int i; + int xp; + int yp; i = 0; if (tile == 0) - return ; + return; while ((i++) < TILE_SIZE * TILE_SIZE) { xp = x + (i % TILE_SIZE); @@ -38,17 +38,16 @@ void render_tile(t_screen *screen, int x, int y, t_tile tile) } } -void render_map(t_screen *screen, t_map *map) +void render_map(t_screen *screen, t_map *map) { - int i; - int x; - int y; - + int i; + int x; + int y; i = 0; while (i < map->width * map->height) { x = i % map->width; - y = i / map->height; + y = i / map->width; if (x < 0 || x >= map->width || y < 0 || y >= map->height) continue; render_tile(screen, x * TILE_SIZE, y * TILE_SIZE, map->grid[y][x]); @@ -56,7 +55,7 @@ void render_map(t_screen *screen, t_map *map) } } -void render_entities(t_game *game) +void render_entities(t_game *game) { player_render(game->screen, game->player); }