So_long/srcs/utils_3.c

112 lines
2.8 KiB
C

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* utils_3.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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);
}