diff --git a/player.c b/player.c index 4745b78a81a5157c5a1f8aca01d449f49313e260..61bc2926c62ec0065c70a3b82ca1f2bbac8df074 100644 --- a/player.c +++ b/player.c @@ -1,3 +1,5 @@ +#include <stdio.h> +#include <stdlib.h> #include "player.h" #include "grid.h" @@ -17,11 +19,29 @@ void move_player(grid* G, enum Direction D) { target_column++; } enum CaseType target = G->game_grid[target_row][target_column]; - if (target == WALL || target == BOX || target == GOAL) { + enum CaseType player = G->game_grid[G->player.y][G->player.x]; + if (target == WALL || target == BOX) { return; + } else if (target == GOAL) { + if (player == PLAYER) { + G->game_grid[target_row][target_column] = PLAYER_GOAL; + G->game_grid[G->player.y][G->player.x] = NONE; + } else if (player == PLAYER_GOAL) { + G->game_grid[target_row][target_column] = PLAYER_GOAL; + G->game_grid[G->player.y][G->player.x] = GOAL; + } + } else if (target == NONE) { + if (player == PLAYER) { + G->game_grid[target_row][target_column] = PLAYER; + G->game_grid[G->player.y][G->player.x] = NONE; + } else if (player == PLAYER_GOAL) { + G->game_grid[target_row][target_column] = PLAYER; + G->game_grid[G->player.y][G->player.x] = GOAL; + } + } else { + fprintf(stderr, "Error this level map has features unmanaged by the game\n"); + exit(-1); } - G->game_grid[target_row][target_column] = G->game_grid[G->player.y][G->player.x]; - G->game_grid[G->player.y][G->player.x] = target; G->player.x = target_column; G->player.y = target_row; } diff --git a/test.c b/test.c index b07450841e9073e6e3072e5a1e6701696e9d152b..7db07354d87487c05da585f34c18534f8ad31f19 100644 --- a/test.c +++ b/test.c @@ -56,7 +56,9 @@ int main() { display(level); printf("Votre choix : "); scanf(" %c", &quitCar); - move_player(level, quitCar); + if (quitCar == 'h' || quitCar == 'j' || quitCar == 'k' || quitCar == 'l') { + move_player(level, quitCar); + } } free_level(level); return 0;