/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* utils_3.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: lfirmin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/11/13 16:51:15 by lfirmin #+# #+# */ /* Updated: 2024/11/13 16:51:15 by lfirmin ### ########.fr */ /* */ /* ************************************************************************** */ #include "../include/so_long.h" void draw_tile(t_game *game, char current, int x, int y) { mlx_put_image_to_window(game->mlx, game->win, game->img_floor, x * 32, y * 32); if (current == '1') mlx_put_image_to_window(game->mlx, game->win, game->img_wall, x * 32, y * 32); else if (current == 'P') mlx_put_image_to_window(game->mlx, game->win, game->img_player, x * 32, y * 32); else if (current == 'C') mlx_put_image_to_window(game->mlx, game->win, game->img_collect, x * 32, y * 32); else if (current == 'E' && game->collectibles == 0) mlx_put_image_to_window(game->mlx, game->win, game->img_exit, x * 32, y * 32); } void draw_map(t_game *game) { int x; int y; char current; y = 0; while (y < game->map_height) { x = 0; while (x < game->map_width) { current = game->map[y][x]; if (current != '\n') draw_tile(game, current, x, y); x++; } y++; } } int check_player(t_game *game, int x, int y, int *found) { if (game->map[y][x] == 'P') { game->player_x = x; game->player_y = y; *found = 1; } return (0); } int find_player_pos(t_game *game) { int x; int y; int found; if (!game || !game->map) return (1); y = 0; found = 0; while (y < game->map_height) { x = 0; while (x < game->map_width) { check_player(game, x, y, &found); x++; } y++; } if (!found) return (ft_printf_fd(2, "Error: Player position not found\n"), 1); return (0); } int key_hook(int keycode, t_game *game) { int new_x; int new_y; new_x = game->player_x; new_y = game->player_y; if (keycode == KEY_ESC) close_game(game); else if (keycode == KEY_W || keycode == KEY_UP) new_y--; else if (keycode == KEY_S || keycode == KEY_DOWN) new_y++; else if (keycode == KEY_A || keycode == KEY_LEFT) new_x--; else if (keycode == KEY_D || keycode == KEY_RIGHT) new_x++; else return (0); if (is_valid_move(game, new_x, new_y)) move_player(game, new_x, new_y); return (0); }