From 5bceacaba8fedaa8ddaa5d7a0383d3a25b628104 Mon Sep 17 00:00:00 2001 From: Quinten Mennen Date: Thu, 17 Apr 2025 19:25:40 +0200 Subject: [PATCH] free and create map --- inc/cub3d.h | 5 ++++- inc/map.h | 21 +++++++++++++++++++++ inc/render.h | 1 + src/game.c | 5 +++-- src/main.c | 4 +++- src/map.c | 37 ++++++++++++++++++++++++++++++++++++- src/player.c | 7 ++++--- src/render.c | 41 +++++++++++++++++++++++++++++++++++++++++ 8 files changed, 113 insertions(+), 8 deletions(-) create mode 100644 inc/map.h diff --git a/inc/cub3d.h b/inc/cub3d.h index 02ec8a6..4bcfed5 100644 --- a/inc/cub3d.h +++ b/inc/cub3d.h @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/15 12:22:29 by qmennen #+# #+# */ -/* Updated: 2025/04/17 17:59:23 by qmennen ### ########.fr */ +/* Updated: 2025/04/17 19:20:17 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,6 +18,7 @@ # include # include "types.h" # include "errors.h" +# include "map.h" # include "game.h" # include "screen.h" # include "keyhandle.h" @@ -42,4 +43,6 @@ # define CYAN "\033[0;36m" # define WHITE "\033[0;37m" +t_tile **get_temp_map(); + #endif diff --git a/inc/map.h b/inc/map.h new file mode 100644 index 0000000..c6f8c0f --- /dev/null +++ b/inc/map.h @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* map.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: qmennen +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/04/17 19:19:19 by qmennen #+# #+# */ +/* Updated: 2025/04/17 19:23:59 by qmennen ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef MAP_H +# define MAP_H + +# include "cub3d.h" + +int map_create(t_game **game); +void map_free(t_map *map); + +#endif diff --git a/inc/render.h b/inc/render.h index 54663d7..5289531 100644 --- a/inc/render.h +++ b/inc/render.h @@ -19,5 +19,6 @@ void render_line(t_screen *screen, t_vec2 start, t_vec2 end, unsigned int color) void render_circle(t_screen *screen, t_vec2 point, int radius, unsigned int color); void render_clear(t_screen *screen); void render_entities(t_game *game); +void render_map(t_screen *screen, t_map *map); #endif diff --git a/src/game.c b/src/game.c index 92ff292..076c0ff 100644 --- a/src/game.c +++ b/src/game.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/15 15:46:08 by qmennen #+# #+# */ -/* Updated: 2025/04/15 19:18:17 by qmennen ### ########.fr */ +/* Updated: 2025/04/17 19:24:14 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -35,6 +35,7 @@ void game_loop(void *param) game = (t_game *)param; render_clear(game->screen); render_entities(game); + render_map(game->screen, game->map); } void game_terminate(t_game *game) @@ -49,7 +50,7 @@ void game_terminate(t_game *game) if (game->player) free(game->player); if (game->map) - free(game->map); + map_free(game->map); free(game); exit(EXIT_SUCCESS); } diff --git a/src/main.c b/src/main.c index 791eba0..9aa06e9 100644 --- a/src/main.c +++ b/src/main.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/15 16:01:29 by qmennen #+# #+# */ -/* Updated: 2025/04/15 19:19:00 by qmennen ### ########.fr */ +/* Updated: 2025/04/17 19:20:05 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,6 +18,8 @@ static int init_game(t_game **game) return (FAILURE); if (!player_create(game)) return (FAILURE); + if (!map_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); diff --git a/src/map.c b/src/map.c index 5677f47..e79252d 100644 --- a/src/map.c +++ b/src/map.c @@ -39,4 +39,39 @@ t_tile **get_temp_map() } return temp_map; -} \ No newline at end of file +} + +int map_create(t_game **game) +{ + t_map *map; + + map = malloc(sizeof(t_map)); + if (!map) + return (FAILURE); + /** + * + * TEMP MAP + * + */ + map->width = 10; + map->height = 10; + map->grid = get_temp_map(); + (*game)->map = map; + return (SUCCESS); +} + +void map_free(t_map *map) +{ + int i; + int j; + + i = 0; + while (i < map->height) + { + j = 0; + free(map->grid[i]); + i++; + } + free(map->grid); + free(map); +} diff --git a/src/player.c b/src/player.c index 2090ca9..b89ad5f 100644 --- a/src/player.c +++ b/src/player.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/15 18:53:19 by qmennen #+# #+# */ -/* Updated: 2025/04/17 18:10:17 by qmennen ### ########.fr */ +/* Updated: 2025/04/17 19:20:56 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -24,7 +24,7 @@ int player_create(t_game **game) player->pos.x = 20.f; player->pos.y = 20.f; player->angle = 0.f; - player->speed = 10.f; + player->speed = 6.f; player->fov = 90.f; (*game)->player = player; return (SUCCESS); @@ -51,9 +51,10 @@ void player_move(keys_t key, t_player *player) void player_render(t_screen *screen, t_player *player) { t_vec2 direction; + if (player->pos.x < 0 || player->pos.x >= screen->width || player->pos.y < 0 || player->pos.y >= screen->height) return ; - render_circle(screen, player->pos, 10, 0x3294a8ff); + render_circle(screen, player->pos, 4, 0x3294a8ff); direction.x = player->pos.x + cos(player->angle) * 30; direction.y = player->pos.y + sin(player->angle) * 30; render_line(screen, player->pos, direction, 0xa83232ff); diff --git a/src/render.c b/src/render.c index c99b910..7046f0c 100644 --- a/src/render.c +++ b/src/render.c @@ -11,6 +11,7 @@ /* ************************************************************************** */ #include "render.h" +#include "MLX42.h" void render_clear(t_screen *screen) { @@ -63,6 +64,46 @@ void render_line(t_screen *screen, t_vec2 start, t_vec2 end, unsigned int color) } } +void render_tile(t_screen *screen, int x, int y, t_tile tile) +{ + int i; + int xp; + int yp; + + i = 0; + if (tile == 0) + return ; + while ((i++) < 16 * 16) + { + xp = x + (i % 16); + yp = y + (i / 16); + if (xp < 0 || xp >= screen->width || yp < 0 || yp >= screen->height) + continue; + if (tile == TILE_WALL) + { + mlx_put_pixel(screen->img, xp, yp, 0xA88132ff); + } + } +} + +void render_map(t_screen *screen, t_map *map) +{ + int i; + int x; + int y; + + i = 0; + while (i < map->width * map->height) + { + x = i % map->width; + y = i / map->height; + if (x < 0 || x >= map->width || y < 0 || y >= map->height) + continue; + render_tile(screen, x * 16, y * 16, map->grid[x][y]); + i++; + } +} + void render_entities(t_game *game) { player_render(game->screen, game->player);