diff --git a/travail_de_groupe/jeu_appren_par_renfo/src/main.c b/travail_de_groupe/jeu_appren_par_renfo/src/main.c
index 084b9de618c8397569bf386c7b4e25a4f6b83b45..f16624fdcda502583afb8f349c7540ea326e5e06 100644
--- a/travail_de_groupe/jeu_appren_par_renfo/src/main.c
+++ b/travail_de_groupe/jeu_appren_par_renfo/src/main.c
@@ -5,14 +5,20 @@ int game_state;
 
 
 int main(){
+    agent_t * agent; 
+    int i ; 
     float ***** Q = allocateAndInitiateQ();
+    srand ( time(NULL));
+    agent =initAgent(); 
     writeQ(Q);
     running = 1;
+    i=setReward( agent->x , agent->y, 0);
+    printf("%d \n ",i );
     game_state = GAME;
     readMapFromFile("map.txt");
     initPlayer();
     initKeys();
-
+    
     mainLoop();
 
 } 
\ No newline at end of file
diff --git a/travail_de_groupe/jeu_appren_par_renfo/src/qlearn.c b/travail_de_groupe/jeu_appren_par_renfo/src/qlearn.c
index efed9ae37434db73c3149decbc4153655e142796..9b06103b077fa0d1a16e95df582ecd59adc7dbd7 100644
--- a/travail_de_groupe/jeu_appren_par_renfo/src/qlearn.c
+++ b/travail_de_groupe/jeu_appren_par_renfo/src/qlearn.c
@@ -1,5 +1,20 @@
 #include "qlearn.h"
 
+agent_t * initAgent (){
+    agent_t * agent =(agent_t*)malloc(sizeof(agent_t));
+    if (agent ==NULL){
+        printf("erreur alloc\n  ");
+        exit (1);
+    }  
+    agent->x=(16+rand()%16)*BLOCK_SIZE;
+    agent->y=(1+rand()%14)*BLOCK_SIZE;
+    agent->high=2*BLOCK_SIZE;
+    agent->weight=2*BLOCK_SIZE; 
+    agent->speed = 1;   
+      // si changement de speed => changement de collisiosn dans le takeaction 
+      return(agent);
+}   
+
 void moveAgent(agent_t * agent, int choice){
     switch (choice)
     {
@@ -115,6 +130,8 @@ int argmax(float * arr){
 
 int convertIntoZone(int xAgent,int yAgent){
     int zone; 
+    xAgent=xAgent/BLOCK_SIZE;
+    yAgent=yAgent/BLOCK_SIZE;
     if(xAgent<23 && yAgent<=8){zone=0;} 
     else if(xAgent<31 && yAgent<=8){zone=1;} 
     else if(xAgent<23 && yAgent<=18){zone=2;} 
@@ -146,43 +163,43 @@ int converterIntoAngleH(float angleH){
     return(angleZone);    
 } 
 
-int takeAction(int xagent, int yagent, float ***** Q, int canonZone, int angleHZone, int angleFZone, float eps){
+int takeAction(int xAgent, int yAgent, float ***** Q, int canonZone, int angleHZone, int angleFZone, float eps){
     int action;
     int proba = rand() % 100;
     int receiverZone=0;
     if (proba < eps * 100){
-        if (xagent > (MAP_WIDTH-1)/2+1 && xagent < MAP_WIDTH- 2 && yagent > 1 && yagent < MAP_HEIGHT - 2){
+        if (xAgent/BLOCK_SIZE > (MAP_WIDTH-1)/2+1 && xAgent/BLOCK_SIZE < MAP_WIDTH- 2 && yAgent/BLOCK_SIZE > 1 && yAgent/BLOCK_SIZE < MAP_HEIGHT - 2){
             action = rand() % 5;// OK cas au centre
         }
-        else if (xagent == (MAP_WIDTH-1)/2+1 && yagent > 1 && yagent < MAP_HEIGHT - 2){
+        else if (xAgent/BLOCK_SIZE == (MAP_WIDTH-1)/2+1 && yAgent/BLOCK_SIZE > 1 && yAgent/BLOCK_SIZE < MAP_HEIGHT - 2){
             int possibleActions[4] = {1, 2, 3,4};
             action = possibleActions[rand() % 4];// OK cas filet 
         }
-        else if (xagent == (MAP_WIDTH-1)/2+1 && yagent == 1){
+        else if (xAgent/BLOCK_SIZE == (MAP_WIDTH-1)/2+1 && yAgent/BLOCK_SIZE== 1){
             int possibleActions[3] = {1, 3, 4};
             action = possibleActions[rand() % 3];// cas en haut a gauche 
         }
-        else if (xagent == (MAP_WIDTH-1)/2+1  && yagent==MAP_HEIGHT - 2){
+        else if (xAgent/BLOCK_SIZE == (MAP_WIDTH-1)/2+1  && yAgent/BLOCK_SIZE==MAP_HEIGHT - 2){
             int possibleActions[3] = {1, 2, 4};
             action = possibleActions[rand() % 3];// cas en bas a gauche 
         }
-        else if (yagent ==1 && xagent > (MAP_WIDTH-1)/2+1 && xagent < MAP_WIDTH- 2){
+        else if (yAgent/BLOCK_SIZE ==1 && xAgent/BLOCK_SIZE > (MAP_WIDTH-1)/2+1 && xAgent/BLOCK_SIZE < MAP_WIDTH- 2){
             int possibleActions[4] = {0, 1,3,4};
             action = possibleActions[rand() % 4];// cas en haut au milieu  
         }
-        else if (xagent == MAP_WIDTH- 2 && yagent == 1){
+        else if (xAgent/BLOCK_SIZE == MAP_WIDTH- 2 && yAgent/BLOCK_SIZE == 1){
             int possibleActions[3] = {0, 3,4};
             action = possibleActions[rand() % 3];// cas en haut a droite
         }
-        else if (xagent ==  MAP_WIDTH-2  && yagent <MAP_HEIGHT-2 && yagent>1){
+        else if (xAgent/BLOCK_SIZE ==  MAP_WIDTH-2  && yAgent/BLOCK_SIZE <MAP_HEIGHT-2 && yAgent/BLOCK_SIZE>1){
             int possibleActions[4] = {0,2,3,4};
             action = possibleActions[rand() % 4];// cas a droite au milieu 
         }
-        else if (xagent == MAP_WIDTH-2 && yagent == MAP_HEIGHT-2){
+        else if (xAgent/BLOCK_SIZE== MAP_WIDTH-2 && yAgent/BLOCK_SIZE == MAP_HEIGHT-2){
             int possibleActions[3] = {0, 2,4};
             action = possibleActions[rand() % 3];// cas en bas a droite 
         }
-        else if (xagent > (MAP_WIDTH-1)/2+1 && xagent < MAP_WIDTH- 2 && yagent == MAP_HEIGHT-2){
+        else if (xAgent/BLOCK_SIZE > (MAP_WIDTH-1)/2+1 && xAgent/BLOCK_SIZE < MAP_WIDTH- 2 && yAgent/BLOCK_SIZE == MAP_HEIGHT-2){
             int possibleActions[4] = {0,1,2,4};
             action = possibleActions[rand() % 4];
         }
@@ -191,9 +208,45 @@ int takeAction(int xagent, int yagent, float ***** Q, int canonZone, int angleHZ
         }
     }
     else{
-        receiverZone= convertIntoZone(xagent,yagent);
+        receiverZone= convertIntoZone(xAgent/BLOCK_SIZE,yAgent/BLOCK_SIZE);
         action = argmax(Q[receiverZone][canonZone][angleHZone][angleFZone]);
         //printf("wtf");
     }
     return action;
-}
\ No newline at end of file
+}
+
+void insertPointToLine(ptline_t head, int receiverZone, int canonZone, int angleHZone, int angleFZone){
+    ptline_t newPoint = (ptline_t )malloc(sizeof(line_t));
+    if (newPoint==NULL){
+        printf("error malloc\n "); 
+        exit(1);
+    } 
+    newPoint->receiverZone = receiverZone;
+    newPoint->shooterZone = canonZone;
+    newPoint-> angleHZone= angleHZone; 
+    newPoint->angleFZone=angleFZone; 
+    newPoint->next =head;// problème pt 
+    head = newPoint;    
+}
+
+void freeLine ( ptline_t headLine){
+    ptline_t current= headLine; 
+    while ( current !=NULL){ 
+        ptline_t temporary = current; 
+        current = current ->next; 
+        free(temporary);
+    } 
+} 
+
+int setReward(int xAgent, int yAgent, int dropZone){
+    int zoneAgent; 
+    int reward=0; 
+
+    zoneAgent= convertIntoZone( xAgent,yAgent); 
+    if (zoneAgent==dropZone){
+        reward=1;
+    } 
+    return (reward); 
+}  
+
+
diff --git a/travail_de_groupe/jeu_appren_par_renfo/src/qlearn.h b/travail_de_groupe/jeu_appren_par_renfo/src/qlearn.h
index 830c3054f54a1721a18c77c001a58ead858753cd..15cf2773f949b6b0dc8f461c4d4b4bb1d486d04b 100644
--- a/travail_de_groupe/jeu_appren_par_renfo/src/qlearn.h
+++ b/travail_de_groupe/jeu_appren_par_renfo/src/qlearn.h
@@ -23,12 +23,21 @@
 typedef struct agent {
     int x;
     int y;
-    int heigth;
+    int high;
     int weight;
     int speed; 
 } agent_t;
 
+typedef struct line {
+    int receiverZone;
+    int shooterZone; 
+    int angleHZone;
+    int angleFZone; 
+    struct line *next ;
 
+}line_t,*ptline_t; 
+
+agent_t* initAgent ( );
 void moveAgent(agent_t * agent, int choice);
 float ***** allocateAndInitiateQ();
 void writeQ(float *****);
@@ -37,4 +46,7 @@ int convertIntoZone(int ,int y);
 int converterIntoAngleF(float);
 int converterIntoAngleH(float);
 int takeAction(int ,int , float ***** , int , int, int, float );
+void insertPointToLine(ptline_t head, int, int , int , int); 
+void freeLine ( ptline_t makeheadLine);
+int setReward(int , int , int );
 #endif
\ No newline at end of file