intra to gitea
This commit is contained in:
+111
@@ -0,0 +1,111 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* utils_3.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <[email protected]> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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);
|
||||
}
|
||||
Reference in New Issue
Block a user