Skip to content
Snippets Groups Projects
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;
  }
}