From 65a98a2ef6a732d64fdfdb37abb49dd79d987bd9 Mon Sep 17 00:00:00 2001 From: Efe ERKEN <efe.erken@etu.unistra.fr> Date: Wed, 9 Nov 2022 09:49:27 +0100 Subject: [PATCH] :wrench: UPDATE: Add functionality to move_player Added functionality to the move_player function and fixed its test. --- player.c | 26 +++++++++++++++++++++++--- test.c | 4 +++- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/player.c b/player.c index 4745b78..61bc292 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 b074508..7db0735 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; -- GitLab