diff --git a/Assets/Scenes/CourseAPieds/sceneCourseAPied.unity b/Assets/Scenes/CourseAPieds/sceneCourseAPied.unity
index 3301a7e9c127b7a52888fd6458adfb25bb9fd3f8..656723f02c062a4f4b204181086c50530cf37e29 100644
--- a/Assets/Scenes/CourseAPieds/sceneCourseAPied.unity
+++ b/Assets/Scenes/CourseAPieds/sceneCourseAPied.unity
@@ -38,7 +38,7 @@ RenderSettings:
   m_ReflectionIntensity: 1
   m_CustomReflection: {fileID: 0}
   m_Sun: {fileID: 705507994}
-  m_IndirectSpecularColor: {r: 0.44657844, g: 0.49641222, b: 0.57481694, a: 1}
+  m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1}
   m_UseRadianceAmbientProbe: 0
 --- !u!157 &3
 LightmapSettings:
@@ -214,10 +214,13 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 86c7bfd105ba6e14180f833234cbc0b8, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  depth: 20
-  width: 256
-  height: 256
+  nombreDePointsAGenerer: 10
+  terrain: {fileID: 0}
+  terrainDeph: 20
+  heightmapWidth: 256
+  heightmapHeight: 256
   scale: 2
+  ptProches: 
 --- !u!1 &705507993
 GameObject:
   m_ObjectHideFlags: 0
diff --git a/Assets/Scripts/CourseAPieds/V7.cs b/Assets/Scripts/CourseAPieds/V7.cs
index 123ffd6a9f979f9944ec6b44dce94d1149a182f0..dcab6fd23a20f1726aa796907089019a178cec10 100644
--- a/Assets/Scripts/CourseAPieds/V7.cs
+++ b/Assets/Scripts/CourseAPieds/V7.cs
@@ -1,17 +1,28 @@
+/* 
+République de Clément Geraudie
+*/
+
 using UnityEngine;
 
 public class V7 : MonoBehaviour
 {
-    public int depth = 20;
+    [Header("Initialisation")]
+    public int nombreDePointsAGenerer = 5;
+
+    [Header("Terrain")]
+    [SerializeField] private Terrain terrain;
+    public int terrainDeph = 20;
+
+    // Constantes pour la heightmap
+    [SerializeField] private int heightmapWidth = 256;
+    [SerializeField] private int heightmapHeight = 256;
 
-    public int width = 256;
-    public int height = 256;
 
     public float scale = 2f;
-    public int[,] values;
+    public int[,] pointsDuChemin;
     public int[] ptProches;
-    int dim1;
-    int dim2;
+    int ptsCheminX;
+    int ptsCheminY;
 
 
     //public float offsetX = 100f;
@@ -19,71 +30,80 @@ public class V7 : MonoBehaviour
 
     void Start()
     {
-        values = new int[2, 5];
-        dim1 = values.GetLength(0);
-        dim2 = values.GetLength(1);
-        for (int i = 0; i < dim1; i++)
+        // Création du tableau des points aléatoires (chemin)
+        pointsDuChemin = new int[2, nombreDePointsAGenerer];
+        // Récupère les dimensions du tableau de manière optimisée
+        ptsCheminX = pointsDuChemin.GetLength(0);
+        ptsCheminY = pointsDuChemin.GetLength(1);
+        
+        // On va générer les points de sorte à ce qu'il ne puissent pas se croiser
+        // On va découper le terrain en N partie, n étant le nombre de pts à générer
+        int lastBorder = 0;
+        int newBorder;
+        for (int x = 0; x < ptsCheminX; x++)
         {
-            for (int j = 0; j < dim2; j++)
+            for (int y = 0; y < ptsCheminY; y++)
             {
-                values[i, j] = Random.Range(0, width);
+                if(x==1){
+                    // Si i = 0, ça veut dire qu'on est sur l'axe Y du terrain
+                    newBorder = (heightmapWidth / nombreDePointsAGenerer) + lastBorder; // On calcule dynamiquement la taille de la zone de terrain où l'on va générer le pt
+                    pointsDuChemin[x, y] = Random.Range(lastBorder, newBorder); // On génère un pt aléatoire dans la zone définie
+                    // Debug.Log("Point Y=" + pointsDuChemin[x, y]);
+                    lastBorder = newBorder; // On met à jour la zone de terrain où l'on va générer le pt
+                }else{
+                    // Normalement, on est sur 0 (c'set un tableau de taille 2)
+                    pointsDuChemin[x, y] = Random.Range(0, heightmapWidth);
+                    // Debug.Log("Point X=" + pointsDuChemin[x, y]);
+                }
             }
         }
 
-    }
-
-    void Update()
-    {
-        Terrain terrain = GetComponent<Terrain>();
+        // On va récupérer le terrain et on va générer sa forme
+        terrain = GetComponent<Terrain>();
         terrain.terrainData = GenerateTerrain(terrain.terrainData);
+
+        // On va faire quelques vérifications
+        if(terrain == null)
+        {
+            Debug.LogError("Terrain non trouvé");
+            return;
+        }
+        if(terrain.terrainData == null)
+        {
+            Debug.LogError("TerrainData non trouvé");
+            return;
+        }
+        
+        // On va tracer le chemin
+        tracerChemin();
     }
     TerrainData GenerateTerrain(TerrainData terrainData)
     {
-        terrainData.heightmapResolution = width + 1;
+        terrainData.heightmapResolution = heightmapWidth + 1;
 
-        terrainData.size = new Vector3(width, depth, height);
+        terrainData.size = new Vector3(heightmapWidth, terrainDeph, heightmapHeight);
 
         terrainData.SetHeights(0, 0, GenerateHeights());
 
-        // offsetX += Time.deltaTime * 5f;
-
         return terrainData;
     }
 
-    bool PisteTest(int x, int y)
-    {
-        int ptLePlusProche;
-        for (int i = 0; i < dim2; i++)
-        {
-            if (x == values[0, i] && y == values[1, i])
-            {
-                int x1 = values[0, i];
-                int y1 = values[1, i];
-                int x2 = values[0, ptProches[i]];
-                int y2 = values[1, ptProches[i]];
-
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    void ptLePlusProche()
+    /*void ptLePlusProche()
     {
         int ptProche = -1;
         double resultPtProche = 256;
         double resultPtActuel = 256;
-        for (int i = 0; i < dim2; i++)
+        ptProches = new int[ptsCheminY];
+        for (int i = 0; i < ptsCheminY; i++)
         {
-            for (int j = 0; j < dim2; j++)
+            for (int j = 0; j < ptsCheminY; j++)
             {
-                if (values[0, j] != values[0, i] || values[1, j] != values[1, i])
+                if (pointsDuChemin[0, j] != pointsDuChemin[0, i] || pointsDuChemin[1, j] != pointsDuChemin[1, i])
                 {
-                    int x1 = values[0, i];
-                    int y1 = values[1, i];
-                    int x2 = values[0, j];
-                    int y2 = values[1, j];
+                    int x1 = pointsDuChemin[0, i];
+                    int y1 = pointsDuChemin[1, i];
+                    int x2 = pointsDuChemin[0, j];
+                    int y2 = pointsDuChemin[1, j];
                     resultPtActuel = Mathf.Sqrt((x2 - x1) ^ 2 + (y2 - y1) ^ 2);
                     if (resultPtActuel < resultPtProche)
                     {
@@ -94,40 +114,49 @@ public class V7 : MonoBehaviour
             }
             ptProches[i] = ptProche;
         }
-    }
+        // Debug liste de ptProches
+        for (int i = 0; i < ptsCheminY; i++)
+        {
+            Debug.Log("ptProches[" + i + "] = " + ptProches[i]);
+        }
+    }*/
 
-    bool tracerChemin(int x1, int y1, int x2, int y2, int x, int y)
+    // Tracer chemin va se charger de dessinner le chemin au sol
+    private void tracerChemin()
     {
-        double m = (y2 - y1) / (x2 - x1);
-        double p = y - m * x;
-        bool equation = m == (p - y) / x;
-        return equation;
+        // On va parcourir les pointsDuChemin et tracer le chemin entre ces points
     }
 
     float[,] GenerateHeights()
     {
-        float[,] heights = new float[width, height];
-
-        for (int x = 0; x < width; x++)
+        // On initialise le tableau
+        float[,] terrainHeightsList = new float[heightmapWidth, heightmapHeight];
+        
+        // On remplit le tableau
+        for (int widthIndex = 0; widthIndex < heightmapWidth; widthIndex++)
         {
-            for (int y = 0; y < height; y++)
+            for (int heightIndex = 0; heightIndex < heightmapHeight; heightIndex++)
             {
-                heights[x, y] = CalculateHeight(x, y);
+                // On calcule hauteur
+                terrainHeightsList[widthIndex, heightIndex] = CalculateHeight(widthIndex, heightIndex);
             }
         }
-
-        for (int i = 0; i < dim2; i++)
+        
+        // Pour chaque point à générer, on va définir la hauteur à 0
+        for (int i = 0; i < nombreDePointsAGenerer; i++)
         {
-            heights[values[0, i], values[1, i]] = 0;
+            terrainHeightsList[pointsDuChemin[0, i], pointsDuChemin[1, i]] = 0; // terrainHeightsList[ ptPosX, ptPosY ] = 0;
+            Debug.Log("Point: "+pointsDuChemin[0, i] + ";" + pointsDuChemin[1, i]);
         }
-        return heights;
+        return terrainHeightsList;
     }
 
 
+    // Renvoie une valeur semi-aléaoite (perlin noise) entre un point x et y
     float CalculateHeight(int x, int y)
     {
-        float xCoord = (float)x / width * scale;//+ offsetX;
-        float yCoord = (float)y / height * scale;//+ offsetY;
+        float xCoord = (float)x / heightmapWidth * scale;//+ offsetX;
+        float yCoord = (float)y / heightmapHeight * scale;//+ offsetY;
 
         return Mathf.PerlinNoise(xCoord, yCoord);
     }
diff --git a/Assets/Terrains/terrainCourseAPied.asset b/Assets/Terrains/terrainCourseAPied.asset
index 178b1f87c5e15621eb3d78180da6f5eedaef4a83..3841391704b1421f5b1abc88baa4670b6d2fc4ca 100644
Binary files a/Assets/Terrains/terrainCourseAPied.asset and b/Assets/Terrains/terrainCourseAPied.asset differ