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