diff --git a/travail_de_groupe/jeu_appren_par_renfo/.vscode/settings.json b/travail_de_groupe/jeu_appren_par_renfo/.vscode/settings.json
new file mode 100644
index 0000000000000000000000000000000000000000..a7361b1789711920f04de454549e57ad57fb63f1
--- /dev/null
+++ b/travail_de_groupe/jeu_appren_par_renfo/.vscode/settings.json
@@ -0,0 +1,5 @@
+{
+    "files.associations": {
+        "qlearn.h": "c"
+    }
+}
\ No newline at end of file
diff --git a/travail_de_groupe/jeu_appren_par_renfo/Res/humanscored.png b/travail_de_groupe/jeu_appren_par_renfo/Res/humanscored.png
new file mode 100644
index 0000000000000000000000000000000000000000..d8430c98d53b284bd1e9ae8b1bcbc621d3e5bf7c
Binary files /dev/null and b/travail_de_groupe/jeu_appren_par_renfo/Res/humanscored.png differ
diff --git a/travail_de_groupe/jeu_appren_par_renfo/Res/iascored.png b/travail_de_groupe/jeu_appren_par_renfo/Res/iascored.png
new file mode 100644
index 0000000000000000000000000000000000000000..65d5538e28932bf5b48f667416635b06d964a94d
Binary files /dev/null and b/travail_de_groupe/jeu_appren_par_renfo/Res/iascored.png differ
diff --git a/travail_de_groupe/jeu_appren_par_renfo/Res/racket.png b/travail_de_groupe/jeu_appren_par_renfo/Res/racket.png
index 0c54b73d27e8ef725f32fa8bb27f8e725e2f4e1c..9184203390362c88d6cc145d5889b3e892ab5920 100644
Binary files a/travail_de_groupe/jeu_appren_par_renfo/Res/racket.png and b/travail_de_groupe/jeu_appren_par_renfo/Res/racket.png differ
diff --git a/travail_de_groupe/jeu_appren_par_renfo/Res/sky.png b/travail_de_groupe/jeu_appren_par_renfo/Res/sky.png
index 1526c651f281167ff093aa7785e3b389779125d2..9ff0b7b86f9063ff498b83d6283794295507f803 100644
Binary files a/travail_de_groupe/jeu_appren_par_renfo/Res/sky.png and b/travail_de_groupe/jeu_appren_par_renfo/Res/sky.png differ
diff --git a/travail_de_groupe/jeu_appren_par_renfo/src/ball.c b/travail_de_groupe/jeu_appren_par_renfo/src/ball.c
index 11d96b4ba15876b34ef0fffcf1a22469b89d07ca..db3b95a0529d986d41b369e270ff2b878c286299 100644
--- a/travail_de_groupe/jeu_appren_par_renfo/src/ball.c
+++ b/travail_de_groupe/jeu_appren_par_renfo/src/ball.c
@@ -1,18 +1,21 @@
 #include "ball.h"
 
 ball_t ball;
+int whoScored;
 int trajectoireAntoine[NUMBERPOINT_TRAJEC][2];
 
 void initBall()
 {
-    ball.x = (rand()%(MAP_WIDTH/2)) * BLOCK_SIZE + BLOCK_SIZE;
-    ball.y = (rand()% (MAP_HEIGHT - 2)) * BLOCK_SIZE + BLOCK_SIZE;
+    ball.x = player.x + player.w / 2;
+    ball.y = player.y;
     ball.z = player.h / BLOCK_SIZE;
     ball.h = 0.5 * BLOCK_SIZE;
     ball.w = 0.5 * BLOCK_SIZE;
     ball.isHit = 0;
     ball.angle = -pi;
     ball.speed = 0;
+    landingPointEnnemyIsFind = 0;
+    landingPointPlayerIsFind = 0;
 }
 //ball_t ball;
 int trajectoireAntoine[NUMBERPOINT_TRAJEC][2];
@@ -134,14 +137,27 @@ void updateBall()
     if (ball.isHit)
     {
         // landingPoint est déjà / BLOCK_SIZE de base
-        ball.z = lagrangeInterpolation(ball.x / BLOCK_SIZE, lastHitPoint[0] / BLOCK_SIZE, lastHitPoint[1] / BLOCK_SIZE, 15, 2 * player.h / BLOCK_SIZE, landingPoint[0], 0);
+        if (ball.isTravelingTo == AI){
+            ball.z = lagrangeInterpolation(ball.x / BLOCK_SIZE, lastHitPointPlayerX / BLOCK_SIZE, lastHitPointPlayerY / BLOCK_SIZE, 15, 2 * player.h / BLOCK_SIZE, landingPointPlayerX, 0);
+        }
+        else if (ball.isTravelingTo == PLAYER){
+            ball.z = lagrangeInterpolation(ball.x / BLOCK_SIZE, lastHitPointEnnemyX / BLOCK_SIZE, lastHitPointEnnemyY / BLOCK_SIZE, 15, 2 * ennemy.h / BLOCK_SIZE, landingPointEnnemyX, 0);
+        }
     }
-
-    if ((int)ball.z == 0)
+    if (ball.z < 0)
     {
-        ball.x = 0;
-        ball.y = 0;
+        if (ball.x/BLOCK_SIZE < MAP_WIDTH/2){
+            whoScored = AI;
+        }
+        else {
+            whoScored = PLAYER;
+        }
         ball.z = 0;
         ball.speed = 0;
+        //initBall();
+    }
+    else {
+        whoScored = NONE;
     }
+
 }
diff --git a/travail_de_groupe/jeu_appren_par_renfo/src/ball.h b/travail_de_groupe/jeu_appren_par_renfo/src/ball.h
index fb82d4cd05dee4c0e096475de3cb6de1bcec3882..fdac7e189c41daf132f00926f3873fe0deddd992 100644
--- a/travail_de_groupe/jeu_appren_par_renfo/src/ball.h
+++ b/travail_de_groupe/jeu_appren_par_renfo/src/ball.h
@@ -15,6 +15,7 @@
 
 #define PLAYER 0
 #define AI 1
+#define NONE 2
 
 typedef enum
 {
@@ -43,6 +44,7 @@ typedef struct point{
 
 //extern ball_t ball;
 extern int trajectoireAntoine[NUMBERPOINT_TRAJEC][2];
+extern int whoScored;
 
 void initBall();
 float defineAngle(int, int, int, int);
diff --git a/travail_de_groupe/jeu_appren_par_renfo/src/ennemy.c b/travail_de_groupe/jeu_appren_par_renfo/src/ennemy.c
index d398e3f26629d1459a2821082869f5b2b451c5df..1ecf078bc3cb02204ea14df16adccf75c70ee2f6 100644
--- a/travail_de_groupe/jeu_appren_par_renfo/src/ennemy.c
+++ b/travail_de_groupe/jeu_appren_par_renfo/src/ennemy.c
@@ -1,5 +1,13 @@
 #include "player.h"
 
+int landingPointEnnemyX;
+int landingPointEnnemyY;
+
+int lastHitPointEnnemyX;
+int lastHitPointEnnemyY = 0;
+
+int landingPointEnnemyIsFind = 0;
+
 int angleF;
 int angleH;
 int ennemyZone;
@@ -22,12 +30,12 @@ void manageEnnemyMovement()
 {
     if (ball.isTravelingTo == AI)
     {
-        angleF = defineAngleF(lastHitPoint[0], lastHitPoint[1], landingPoint[0], landingPoint[1]);
+        angleF = defineAngleF(lastHitPointPlayerX, lastHitPointPlayerY, landingPointPlayerX, landingPointPlayerY);
         angleF = converterIntoAngleF(angleF);
-        angleH = defineAngleH(lastHitPoint[0], landingPoint[0]);
+        angleH = defineAngleH(lastHitPointPlayerX, landingPointPlayerX);
         angleH = converterIntoAngleH(angleH);
         ennemyZone = convertIntoZone(ennemy.x, ennemy.y);
-        canonZone = convertIntoZone(lastHitPoint[0], lastHitPoint[1]);
+        canonZone = convertIntoZone(lastHitPointPlayerX, lastHitPointPlayerY);
         action = takeAction(ennemy.x, ennemy.y, Q, canonZone, angleH, angleF, 1);
         while (ennemyHasMoved == 0)
         {
@@ -90,7 +98,42 @@ void manageEnnemyMovement()
     }
 }
 
-void manageEnnemy()
-{
+int generatelandingPointEnnemy(){
+
+    int randomPointX = rand() % ((MAP_WIDTH-1)/2);
+
+    landingPointEnnemyIsFind = 1;
+    landingPointPlayerIsFind = 0;
+
+    return randomPointX;
+}
+
+
+void ennemyHitBall(){
+    if (sqrt(pow(ennemy.x - ball.x, 2) + pow(ennemy.y - ball.y, 2)) / BLOCK_SIZE < HIT_RANGE)
+    {
+        if (ball.isTravelingTo == AI)
+        {
+            
+                //cherche et trouve point de chute, UNE SEULE FOIS!
+            if(landingPointEnnemyIsFind == 0){
+                landingPointEnnemyX = generatelandingPointEnnemy();
+                ball.isTravelingTo = PLAYER;
+                ball.angle = ennemy.angle;
+                ball.speed = 4 * HIT_FORCE;
+                ball.isHit = 1;
+                ball.z = ball.z;
+                lastHitPointEnnemyX = ball.x;
+                lastHitPointEnnemyY = player.h;
+                }
+
+        }
+    }
+}
+
+void manageEnnemy(){
+
     manageEnnemyMovement();
+
+    ennemyHitBall();
 }
\ No newline at end of file
diff --git a/travail_de_groupe/jeu_appren_par_renfo/src/ennemy.h b/travail_de_groupe/jeu_appren_par_renfo/src/ennemy.h
index 660453be677e92987bb34dee561e04e36fa87d61..a4f58a2d7e941ceb86fd61491097792e57c4bd9d 100644
--- a/travail_de_groupe/jeu_appren_par_renfo/src/ennemy.h
+++ b/travail_de_groupe/jeu_appren_par_renfo/src/ennemy.h
@@ -8,7 +8,13 @@
 #include "qlearn.h"
 
 
+extern int landingPointEnnemyX;
+extern int landingPointEnnemyY;
 
+extern int lastHitPointEnnemyX;
+extern int lastHitPointEnnemyY;
+
+extern int landingPointEnnemyIsFind;
 
 void initEnnemy();
 void manageEnnemy();
diff --git a/travail_de_groupe/jeu_appren_par_renfo/src/gest_event.c b/travail_de_groupe/jeu_appren_par_renfo/src/gest_event.c
index 7e2656a61fe2fc93d978cfd4d068f2585fd52c76..c8820a7125538c776f736626136d2dd47b24de46 100644
--- a/travail_de_groupe/jeu_appren_par_renfo/src/gest_event.c
+++ b/travail_de_groupe/jeu_appren_par_renfo/src/gest_event.c
@@ -68,11 +68,11 @@ void gestGame()
             }
             if (event.motion.yrel > 0)
             {
-                player.viewAngle -= 1;
+                player.viewAngle -= 0.05 * RD;
             }
             if (event.motion.yrel < 0)
             {
-                player.viewAngle += 1;
+                player.viewAngle += 0.05 * RD;
             }
             player.deltax = cos(player.angle);
             player.deltay = sin(player.angle);
@@ -118,7 +118,8 @@ void gestGame()
 
             case SDLK_b:
                 initBall();
-                landingPointIsFind = 0;
+                landingPointPlayerIsFind = 0;
+                landingPointEnnemyIsFind = 0;
                 break;
 
             default:
@@ -151,21 +152,20 @@ void gestGame()
         case SDL_MOUSEBUTTONDOWN:
             if (event.button.button == SDL_BUTTON_LEFT)
             {
-                if (player.isHitting)
-                {
-                    player.isHitting = 0;
-                }
-                else
-                {
-                    player.isHitting = 1;
-                }
+                player.isHoldingClick = 1;
+                player.startHitTimer = timer;
+                player.startHitBool = 0;
             }
             break;
 
         case SDL_MOUSEBUTTONUP:
+
             if (event.button.button == SDL_BUTTON_LEFT)
             {
-                player.isHitting = 0;
+                player.endHitTimer = timer;
+                player.startHitBool = 1;
+                player.hitIntensity = (player.endHitTimer - player.startHitTimer) / 200;
+                player.isHoldingClick = 0;
             }
             break;
 
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 b46f504deefb981fee874ec537284018f3e55333..fd90101074bd545467cf0dbaefe07f8c27c9e2f6 100644
--- a/travail_de_groupe/jeu_appren_par_renfo/src/player.c
+++ b/travail_de_groupe/jeu_appren_par_renfo/src/player.c
@@ -3,9 +3,16 @@
 player_t player;
 player_t ennemy;
 
-int *landingPoint;
-int *lastHitPoint;
-int landingPointIsFind = 0;
+int landingPointPlayerX;
+int landingPointPlayerY = 0;
+
+int lastHitPointPlayerX;
+int lastHitPointPlayerY;
+
+int rxWall, ryWall;
+float distanceWall;
+
+int landingPointPlayerIsFind = 0;
 
 void initPlayer()
 {
@@ -21,84 +28,65 @@ void initPlayer()
     ennemy.angle = -pi;
     player.speed = 100;
     player.isMoving = 0;
-    player.HPMax = 3;
-    player.currentHP = player.HPMax;
-    player.coins = 0;
     player.angle = 0;
     player.deltax = 1;
     player.deltay = 0;
     player.viewAngle = 0;
 }
 
-int *generateLandingPoint(int rxWall)
+int generatelandingPointPlayer(int rxWall, float hitIntensity)
 {
-    int *landingPoint = malloc(sizeof(int) * 2);
 
-    int randomPointX = MAP_WIDTH / 2 + 1 + rand() % (rxWall / BLOCK_SIZE - (MAP_WIDTH / 2));
-    int randomPointY = -1;
+    int randomPointX = MAP_WIDTH/2 + hitIntensity * 5;
 
-    landingPoint[0] = randomPointX;
-    landingPoint[1] = randomPointY / BLOCK_SIZE;
-    landingPointIsFind = 1;
-
-    return landingPoint;
-}
+    landingPointPlayerIsFind = 1;
+    landingPointEnnemyIsFind = 0;
 
-int *allocLastHitPoint()
-{
-    int *lastHitPoint = (int *)malloc(sizeof(int) * 2);
-    lastHitPoint[0] = 0;
-    lastHitPoint[1] = 0;
-    return lastHitPoint;
-}
-
-void freeIntList(int *list)
-{
-    if (list != NULL)
-    {
-        free(list);
-    }
+    return randomPointX;
 }
 
 void hitBall()
 {
     if (sqrt(pow(player.x - ball.x, 2) + pow(player.y - ball.y, 2)) / BLOCK_SIZE < HIT_RANGE)
     {
-        int rxWall, ryWall;
-        float distanceWall;
 
         int rxNet, ryNet;
         float distanceNet;
-        if (player.isHitting)
+        if (player.startHitBool)
         {
-            castSingleRay(player.angle, &distanceWall, &distanceNet, &rxWall, &ryWall, &rxNet, &ryNet);
-            if (rxWall > MAP_WIDTH / 2)
+        castSingleRay(player.angle, &distanceWall, &distanceNet, &rxWall, &ryWall, &rxNet, &ryNet);
+            // printf("hit\n");
+            if (rxWall > MAP_WIDTH/2)
             {
 
-                freeIntList(lastHitPoint);
-                lastHitPoint = allocLastHitPoint();
+                //cherche et trouve point de chute, UNE SEULE FOIS!
+                if(landingPointPlayerIsFind == 0){
 
-                // cherche et trouve point de chute, UNE SEULE FOIS!
-                if (landingPointIsFind == 0)
-                {
-                    freeIntList(landingPoint);
-                    landingPoint = generateLandingPoint(rxWall);
-                }
+                    landingPointPlayerX = generatelandingPointPlayer(rxWall, player.hitIntensity);
 
-                lastHitPoint[0] = ball.x;
-                lastHitPoint[1] = player.h;
+                    lastHitPointPlayerX = ball.x;
+                    lastHitPointPlayerY = player.h;
+
+                    ball.angle = player.angle;
+                    ball.speed = player.hitIntensity * 5;
+                   // ball.z = player.h;
+                    ball.isHit = 1;
+                    ball.isTravelingTo = AI;
+
+                    player.startHitBool = 0;
+                }
 
-                ball.angle = player.angle;
-                ball.speed = 2 * HIT_FORCE;
-                ball.z = player.h;
-                ball.isHit = 1;
-                ball.isTravelingTo = AI;
             }
+            // printf("valid hit\n");
+        }
+        else
+        {
+            // printf("unvalid hit\n");
         }
     }
+    //}
 }
 
-
 void manageMovement()
 {
     // z : keys[2] : avance
@@ -109,8 +97,7 @@ void manageMovement()
     float y_increment = (Keys[0] - Keys[2]) * player.deltay + (Keys[1] - Keys[3]) * cos(player.angle);
     float newpos_x = (player.x + x_increment * MOVEMENT_SPEED) / BLOCK_SIZE;
     float newpos_y = (player.y + y_increment * MOVEMENT_SPEED) / BLOCK_SIZE;
-    int widthColli = player.w / (3 * BLOCK_SIZE);
-    if (newpos_x > widthColli && newpos_x < MAP_WIDTH - widthColli && newpos_y > widthColli && newpos_y < MAP_HEIGHT - widthColli)
+    if (newpos_x >= 0 && newpos_x < MAP_WIDTH && newpos_y >= 0 && newpos_y < MAP_HEIGHT)
     {
         if (map[(int)newpos_y][(int)newpos_x] != 1)
         {
@@ -124,4 +111,6 @@ void managePlayer()
 {
     manageMovement();
     hitBall();
+    updateBall();
+    player.hitIntensityTimer = timer - player.startHitTimer;
 }
\ 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 af0ca971a4fb605ec00e9cf372f9232ed12df0d7..191e3e342c2ae9b090dd6e36f92e57795c68defd 100644
--- a/travail_de_groupe/jeu_appren_par_renfo/src/player.h
+++ b/travail_de_groupe/jeu_appren_par_renfo/src/player.h
@@ -11,8 +11,9 @@
 #define ENTITIES_RIGHT 3
 
 #define HIT_RANGE 2
-#define HIT_FORCE 10
+#define HIT_FORCE 2
 #define MOVEMENT_SPEED 10
+#define MAX_HIT_TIME 3
 
 typedef struct player
 {
@@ -23,25 +24,34 @@ typedef struct player
     int w;
     int speed;
     int isMoving;
-    int isHitting;
+    int startHitBool;
     int isHit;
     int direction;
-    int HPMax;
-    int currentHP;
-    int coins;
     float angle;
     float deltax;
     float deltay;
     float viewAngle;
+    float startHitTimer;
+    float endHitTimer;
+    float hitIntensity;
+    float hitIntensityTimer;
+    int isHoldingClick;
 } player_t;
 
 extern player_t player;
 extern player_t ennemy;
-extern int *landingPoint;
-extern int *lastHitPoint;
-extern int landingPointIsFind;
+extern int landingPointPlayerX;
+extern int landingPointPlayerY;
 
+extern int lastHitPointPlayerX;
+extern int lastHitPointPlayerY;
+extern int landingPointPlayerIsFind;
+
+extern int rxWall;
+
+int generatelandingPointPlayer(int rxWall, float hitIntensity);
 void initPlayer();
 void managePlayer();
+void freeIntList(int *list);
 
 #endif
\ No newline at end of file
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 0f71a7a840f624857b66013e7401da3cc2bcf13f..cbfc06f4552bd8b609b9b17876c53e2278c2fa06 100644
--- a/travail_de_groupe/jeu_appren_par_renfo/src/render.c
+++ b/travail_de_groupe/jeu_appren_par_renfo/src/render.c
@@ -1,5 +1,7 @@
 #include "render.h"
 
+float timer = 0;
+
 SDL_Window *window;
 SDL_Renderer *renderer;
 
@@ -12,7 +14,7 @@ SDL_Rect sky;
 SDL_Rect ground;
 SDL_Rect racket;
 
-int showHub = 0;
+int showHub = 1;
 
 SDL_Texture *netTexture;
 SDL_Texture *netEdgeLeftTexture;
@@ -23,6 +25,8 @@ SDL_Texture *ballTexture;
 SDL_Texture *skyTexture;
 SDL_Texture *groundTexture;
 SDL_Texture *racketTexture;
+SDL_Texture *iaScoredTexture;
+SDL_Texture *humanScoredTexture;
 
 int **rays;
 int raysListLength = 0;
@@ -795,7 +799,7 @@ void drawBall()
         rect.x = screenDimension.w / 2 + (screenDimension.w * tan(ballAngle - player.angle)) * sqrt(3) * 0.5;
         rect.w = (ballWidth * screenDimension.w) / (2 * ballDistance / BLOCK_SIZE);
         rect.h = (ballHeight * screenDimension.h) / (2 * ballDistance / BLOCK_SIZE);
-        rect.y = (3 * screenDimension.h / 4 + player.viewAngle) - 2 * tan(ballViewAngle) * ballDistance;
+        rect.y = (2.5 * screenDimension.h / 4 + player.viewAngle) - 2 * tan(ballViewAngle) * ballDistance;
 
         destRect.x = 32 * (SDL_GetTicks() / 150 % 4);
         destRect.y = 0;
@@ -808,22 +812,29 @@ void drawBall()
 
 void drawSkyAndGround()
 {
-    destRect.x = ((int)((player.angle + pi) * RD + player.x / BLOCK_SIZE));
-    destRect.y = 0;
-    destRect.w = 100;
-    destRect.h = 128 / 2;
 
     rect.x = 0;
     rect.y = screenDimension.h / 2 + player.viewAngle;
     rect.h = screenDimension.h - rect.y;
     rect.w = screenDimension.w;
-    SDL_RenderCopy(renderer, groundTexture, &destRect, &rect);
 
+    
+    SDL_RenderCopy(renderer, groundTexture, NULL, &rect);
+
+    
     sky.x = 0;
     sky.y = 0;
     sky.w = screenDimension.w;
     sky.h = screenDimension.h / 2 + player.viewAngle;
 
+    destRect.x = 500 + (((player.angle + pi) * RD + player.x / BLOCK_SIZE));
+    if (player.angle > pi){
+        destRect.x = 500 + (((player.angle - pi) * RD + player.x / BLOCK_SIZE));
+    }
+    destRect.y =0;
+    destRect.w = 100;
+    destRect.h = 128;
+    
     SDL_RenderCopy(renderer, skyTexture, &destRect, &sky);
 
     SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
@@ -831,7 +842,14 @@ void drawSkyAndGround()
 
 void drawRacket()
 {
-    // todo
+    destRect.x = 0;
+    destRect.y = 0;
+    destRect.w = 64;
+    destRect.h = 32;
+    if (player.isHoldingClick){
+        destRect.x = 64 * ((int)(player.hitIntensityTimer/100) % 4);
+    }
+    SDL_RenderCopy(renderer, racketTexture, &destRect, NULL);
 }
 
 void drawMap2D(int map[][MAP_WIDTH])
@@ -894,10 +912,22 @@ void drawMap2D(int map[][MAP_WIDTH])
     SDL_RenderFillRect(renderer, &rect);
 
     // draw landing point
-    if (landingPointIsFind == 1)
+    if (landingPointPlayerIsFind == 1)
+    {
+        SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
+        rect.x = landingPointPlayerX * CELL_SIZE;
+        rect.y = CELL_SIZE;
+        rect.h = (MAP_HEIGHT - 2) * CELL_SIZE;
+        rect.w = 3;
+        SDL_RenderFillRect(renderer, &rect);
+        // reset taille cellule
+        rect.h = CELL_SIZE;
+        rect.w = CELL_SIZE;
+    }
+    if (landingPointEnnemyIsFind == 1)
     {
         SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
-        rect.x = landingPoint[0] * CELL_SIZE;
+        rect.x = landingPointEnnemyX * CELL_SIZE;
         rect.y = CELL_SIZE;
         rect.h = (MAP_HEIGHT - 2) * CELL_SIZE;
         rect.w = 3;
@@ -930,6 +960,16 @@ void drawString(char *str, int x, int y, int w, int h, int r, int g, int b, int
     SDL_DestroyTexture(texture);
 }
 
+void drawHitIntensity(){
+    SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
+    rect.w = screenDimension.w/20;
+    rect.x = screenDimension.w - rect.w;
+    //printf("%f\n", player.hitIntensityTimer);
+    rect.h = 2 * screenDimension.h/2 * ( player.hitIntensityTimer/1000);
+    rect.y = 3 * screenDimension.h/4 - rect.h;
+    SDL_RenderFillRect(renderer, &rect);
+}
+
 void drawFPS()
 {
     char str[10];
@@ -985,6 +1025,25 @@ void drawHub()
     drawInfosBall();
 }
 
+void drawWhoScored(){
+    switch (whoScored)
+    {
+        case NONE:
+            break;
+
+        case AI:
+            SDL_RenderCopy(renderer, iaScoredTexture, NULL, NULL);
+            break;
+
+        case PLAYER:
+            SDL_RenderCopy(renderer, humanScoredTexture, NULL, NULL);
+            break;
+
+        default:
+            break;
+    }
+}
+
 void drawGame()
 {
     SDL_RenderClear(renderer);
@@ -993,28 +1052,33 @@ void drawGame()
     if (ball.x < MAP_WIDTH * BLOCK_SIZE / 2)
     {
         drawVerticalWalls();
-        drawEnnemy();
         drawHorizentalWalls();
+        drawEnnemy();
         drawVerticalNet();
         drawBall();
     }
     else
     {
         drawVerticalWalls();
-        drawEnnemy();
         drawHorizentalWalls();
+        drawEnnemy();
         // todo bonus : draw point de chute de la balle
         drawBall();
         drawVerticalNet();
     }
     drawMap2D(map);
     drawRacket();
+    if (player.isHoldingClick){
+
+        drawHitIntensity();
+    }
     drawFPS();
     // affiche le hub
     if (showHub)
     {
         drawHub();
     }
+    drawWhoScored();
 
     SDL_RenderPresent(renderer);
 }
@@ -1033,6 +1097,8 @@ void mainLoop()
     skyTexture = loadTexture("Res/sky.png");
     groundTexture = loadTexture("Res/ground.png");
     racketTexture = loadTexture("Res/racket.png");
+    iaScoredTexture = loadTexture("Res/iascored.png");
+    humanScoredTexture = loadTexture("Res/humanscored.png");
 
     ray1 = malloc(sizeof(int) * 2);
     ray2 = malloc(sizeof(int) * 2);
@@ -1055,6 +1121,7 @@ void mainLoop()
         if (delta > 1000 / FPS_TO_GET)
         {
             fps = 1000 / delta;
+            timer += delta;
             b = a;
             switch (game_state)
             {
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 f6a2215409ecd55ef5310278554c9b07bea55bbe..85b98f2182a8593afdb1f69257b6c3aa40307129 100644
--- a/travail_de_groupe/jeu_appren_par_renfo/src/render.h
+++ b/travail_de_groupe/jeu_appren_par_renfo/src/render.h
@@ -35,8 +35,7 @@ extern SDL_Window *window;
 extern SDL_Renderer *renderer;
 extern SDL_DisplayMode screenDimension;
 
-extern int *ray1;
-extern int *ray2;
+extern float timer;
 
 extern int showHub;