diff --git a/travail_de_groupe/jeu_appren_par_renfo/src/player.c b/travail_de_groupe/jeu_appren_par_renfo/src/player.c
index ac6ae73c79707739665d2a4f3023a9c64d188ced..4a1974e3dca673a71ceffd19f9da2de4c65ed050 100644
--- a/travail_de_groupe/jeu_appren_par_renfo/src/player.c
+++ b/travail_de_groupe/jeu_appren_par_renfo/src/player.c
@@ -30,6 +30,30 @@ void initPlayer(){
     player.viewAngle = 0;
 }
 
+void hitBall(){
+    //printf("map edges: %d %d\n",  BLOCK_SIZE * MAP_WIDTH/2,  BLOCK_SIZE *MAP_HEIGHT/2);
+    //printf("ray1: %d %d\n", ray1[0], ray1[1]);
+    int angleMin = RD * atan2((MAP_WIDTH/2)*BLOCK_SIZE - player.x, player.y);
+    int angleMax = 90 + RD * atan2((MAP_WIDTH/2)*BLOCK_SIZE - player.x, MAP_HEIGHT * BLOCK_SIZE - player.y);
+    int currAngle = (int) ((player.angle) * RD +90) %360;
+    //printf("player angle: %d\n",(int) ((player.angle) * RD +90) %360 );
+    printf("distance to ball: %f\n", sqrt(pow(ball.x - player.x, 2) + pow(ball.y - player.y, 2))/BLOCK_SIZE);
+    if (sqrt(pow(player.x - ball.x, 2) + pow(player.y - ball.y, 2))/BLOCK_SIZE < HIT_RANGE){
+        if (currAngle < angleMax && currAngle > angleMin){
+            printf("hit\n");
+            if (player.isHitting){
+                ball.x = player.x;
+                ball.y = player.y;
+            }
+           printf("valid hit\n");
+        }
+        else {
+            printf("unvalid hit\n");
+        }
+    }
+    //}
+}
+
 void manageMovement(){
     float x_increment = (Keys[0] - Keys[2]) * player.deltax + (Keys[3] - Keys[1]) * sin(player.angle);
     float y_increment = (Keys[0] - Keys[2]) * player.deltay + (Keys[1] - Keys[3]) * cos(player.angle);
@@ -45,4 +69,5 @@ void manageMovement(){
 
 void managePlayer(){
     manageMovement();
+    hitBall();
 }
\ No newline at end of file
diff --git a/travail_de_groupe/jeu_appren_par_renfo/src/player.h b/travail_de_groupe/jeu_appren_par_renfo/src/player.h
index 947f3bccced758a487bd020200baf68c3c884a8e..b95048ddaa059bf3406a29621773764fde293457 100644
--- a/travail_de_groupe/jeu_appren_par_renfo/src/player.h
+++ b/travail_de_groupe/jeu_appren_par_renfo/src/player.h
@@ -9,6 +9,8 @@
 #define ENTITIES_LEFT 2
 #define ENTITIES_RIGHT 3
 
+#define HIT_RANGE 2
+
 #define MOVEMENT_SPEED 2
 typedef struct player{
     float x;
@@ -17,6 +19,7 @@ typedef struct player{
     int w;
     int speed;
     int isMoving;
+    int isHitting;
     int direction;
     int HPMax;
     int currentHP;
diff --git a/travail_de_groupe/jeu_appren_par_renfo/src/render.c b/travail_de_groupe/jeu_appren_par_renfo/src/render.c
index af7310fc1b5fbd5a6f330984103aeee4bcf8c3a7..69ef960536fac797274864b98bb56b7a5ba62d21 100644
--- a/travail_de_groupe/jeu_appren_par_renfo/src/render.c
+++ b/travail_de_groupe/jeu_appren_par_renfo/src/render.c
@@ -18,6 +18,8 @@ SDL_Texture * playerTexture;
 int ** rays;
 int  raysListLength = 0;
 
+int * ray1;
+int * ray2;
 
 rayInfo_t raysListHead;
 
@@ -69,6 +71,10 @@ void initRays(){
     }
 }
 
+int isRaysListEmpty(){
+    return raysListLength == 0;
+}
+
 void addRayToList(int x, int y){
     if (raysListLength < 2 * NB_RAYS){
         *rays[raysListLength] = x;
@@ -391,6 +397,21 @@ void castRays(int map[][MAP_WIDTH]){
             }
         }
         // draw the ray in the minimap
+        if (r == 0){
+            //printf("%d %d\n", (int)rx, (int)ry);
+            ray1[0] = (int)rx;
+            ray1[1] = (int)ry;
+            //printf("ray1 %d %d\n", ray1[0], ray1[1]);
+            //printf("ray2 %d %d\n", ray2[0], ray2[1]);
+        }
+        if (r == NB_RAYS - 1){
+            //printf("%d %d\n", (int)rx, (int)ry);
+            ray2[0] = (int)rx;
+            ray2[1] = (int)ry;
+            printf("ray1 %d %d\n", ray1[0]/BLOCK_SIZE, ray1[1]/BLOCK_SIZE);
+            printf("ray2 %d %d\n", ray2[0]/BLOCK_SIZE, ray2[1]/BLOCK_SIZE);
+        }
+        //printf("raylistlength %d\n", raysListLength);
         addRayToList(rx, ry);
         addRayToList(rx2, ry2);
 
@@ -410,7 +431,7 @@ void drawEnnemy(){
     int ennemyHeight = 200;
 
     //printf("%f %f\n", ennemyAngle, player.angle - (FOV_ANGLE)/2 * DR);
-
+    //printf("%f\n", player.angle * RD);
 
     if (ennemyAngle >= player.angle - (FOV_ANGLE)/2 * DR && ennemyAngle <= player.angle + (FOV_ANGLE)/2 * DR){
         rect.x = screenDimension.w/2 + (screenDimension.w * tan(ennemyAngle - player.angle)) * sqrt(3) * 0.5;
@@ -422,7 +443,7 @@ void drawEnnemy(){
         destRect.y = 0;
         destRect.w = 64;
         destRect.h = 64;
-        printf("%d %d %d %d\n", rect.x, rect.y, rect.w, rect.h); 
+        //printf("%d %d %d %d\n", rect.x, rect.y, rect.w, rect.h);
         SDL_RenderCopy(renderer, playerTexture, &destRect, &rect);
     }
 }
@@ -449,7 +470,7 @@ void drawBall(){
         destRect.y = 0;
         destRect.w = 64;
         destRect.h = 64;
-        printf("%d %d %d %d\n", rect.x, rect.y, rect.w, rect.h); 
+        //printf("%d %d %d %d\n", rect.x, rect.y, rect.w, rect.h); 
         SDL_RenderCopy(renderer, playerTexture, &destRect, &rect);
     }
 }
@@ -546,6 +567,9 @@ void mainLoop(){
     crowdTexture = loadTexture("Res/crowd.png");
     playerTexture = loadTexture("Res/player_sprite.png");
 
+    ray1 = malloc(sizeof(int) * 2);
+    ray2 = malloc(sizeof(int) * 2);
+
     unsigned int a = SDL_GetTicks();
     unsigned int b = SDL_GetTicks();
     double delta = 0;
diff --git a/travail_de_groupe/jeu_appren_par_renfo/src/render.h b/travail_de_groupe/jeu_appren_par_renfo/src/render.h
index 0bc2bb8a397f0732a4be0dec094aedc7abb9c3b2..82d11b5c907bf920d0d29cc656744a611b67c355 100644
--- a/travail_de_groupe/jeu_appren_par_renfo/src/render.h
+++ b/travail_de_groupe/jeu_appren_par_renfo/src/render.h
@@ -12,6 +12,7 @@
 #define DOF 100
 #define BLOCK_SIZE 64
 #define DR 0.0174533
+#define RD 57.2958
 #define FOV_ANGLE 120
 #define pi 3.14159265358979323846
 #define NB_RAYS (screenDimension.w)
@@ -31,6 +32,8 @@ extern SDL_Window *window;
 extern SDL_Renderer *renderer;
 extern SDL_DisplayMode screenDimension;
 
+extern int * ray1;
+extern int * ray2;
 
 void mainLoop();