An error occurred while loading the file. Please try again.
-
Arnaud Albiez authored04e73ac8
Forked from
TechDevPrintemps2022 / SokobanTechDev
59 commits ahead of the upstream repository.
player.c 1.52 KiB
#include "player.h"
#include "grid.h"
struct coordonee position_to(int col, int row, enum Direction direction)
{
struct coordonee result;
switch (direction)
{
case TOP:
result.col = col;
result.row = row - 1;
break;
case BOTTOM:
result.col = col;
result.row = row + 1;
break;
case LEFT:
result.col = col - 1;
result.row = row;
break;
case RIGHT:
result.col = col + 1;
result.row = row;
break;
}
return result;
}
int move_box(struct Grid *grid, int position_col, int position_row, enum Direction direction)
{
struct coordonee next_position = position_to(position_col, position_row, direction);
if (get_grid(grid, next_position.col, next_position.row) == NONE)
{
change_cell_grid(grid, position_col, position_row, NONE);
change_cell_grid(grid, next_position.col, next_position.row, BOX);
return 1;
}
else{
return -1;
}
}
void move_player(struct Grid *grid, enum Direction direction)
{
struct coordonee next_position = position_to(grid->position->col, grid->position->row, direction);
if (get_grid(grid, next_position.col, next_position.row) == NONE)
{
grid->position->col = next_position.col;
grid->position->row = next_position.row;
}
else if(get_grid(grid, next_position.col, next_position.row) == BOX)
{
if(move_box(grid, next_position.col, next_position.row, direction) == 1){
grid->position->col = next_position.col;
grid->position->row = next_position.row;
}
else{
return;
}
}
else{
return;
}
}