diff --git a/.gradle/8.8/executionHistory/executionHistory.bin b/.gradle/8.8/executionHistory/executionHistory.bin
index da379200dc085b771d4dcddfb52048b307521c21..a3e7f8602849b2e0bf11a56dfc94657962ac3e3d 100644
Binary files a/.gradle/8.8/executionHistory/executionHistory.bin and b/.gradle/8.8/executionHistory/executionHistory.bin differ
diff --git a/.gradle/8.8/executionHistory/executionHistory.lock b/.gradle/8.8/executionHistory/executionHistory.lock
index 4abdef7a3725bed502b1e30b47a4a19cf7b419f4..2b24742372c4a2edb077b6c88e3ae81a1a37cad5 100644
Binary files a/.gradle/8.8/executionHistory/executionHistory.lock and b/.gradle/8.8/executionHistory/executionHistory.lock differ
diff --git a/.gradle/8.8/fileHashes/fileHashes.bin b/.gradle/8.8/fileHashes/fileHashes.bin
index e0921c29234010082a6d5eced33c9083ffa5fa09..bb482b98ce2455d062e85dfc26a00662ad7b96fe 100644
Binary files a/.gradle/8.8/fileHashes/fileHashes.bin and b/.gradle/8.8/fileHashes/fileHashes.bin differ
diff --git a/.gradle/8.8/fileHashes/fileHashes.lock b/.gradle/8.8/fileHashes/fileHashes.lock
index 73a5220e88947f0b23b2fc342a3a2e08c08baef8..9cef599b048a668bc1755a29994b4f2d1a0556de 100644
Binary files a/.gradle/8.8/fileHashes/fileHashes.lock and b/.gradle/8.8/fileHashes/fileHashes.lock differ
diff --git a/.gradle/8.8/fileHashes/resourceHashesCache.bin b/.gradle/8.8/fileHashes/resourceHashesCache.bin
index 492243c6aee7902c2d5ea5e6a2a30df40a9b66cf..086a1f26587e1ac87831545f7527ca5e6e08b178 100644
Binary files a/.gradle/8.8/fileHashes/resourceHashesCache.bin and b/.gradle/8.8/fileHashes/resourceHashesCache.bin differ
diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index 05f878a40f5e8964385444c7be2a851d6e457c15..50ffa5dd9aa03e1dbc8db040e1da93a9dbe8d4a2 100644
Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin
index 6ceb9706079342326a9b878fdb9917e41465a85d..62d54951cfd8ec74075938af7d7a210825601919 100644
Binary files a/.gradle/buildOutputCleanup/outputFiles.bin and b/.gradle/buildOutputCleanup/outputFiles.bin differ
diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe
index aea4134f1fc0809934ccb6fcde7112db656aafc4..71a438e2fa179f36bce0c761b1eb59fb1f8ccff8 100644
Binary files a/.gradle/file-system.probe and b/.gradle/file-system.probe differ
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000000000000000000000000000000000000..c995aa5cefc39b8d1744799a04f27ee68d687c6b
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,3 @@
+{
+    "java.debug.settings.onBuildFailureProceed": true
+}
\ No newline at end of file
diff --git a/build/classes/java/main/model/CellularAutomatonSimulation.class b/build/classes/java/main/model/CellularAutomatonSimulation.class
index 666eee34be1ba6a3882b4a01d6f8c4b665a305ca..f37672785de8861e705be427cbff26aa259a4423 100644
Binary files a/build/classes/java/main/model/CellularAutomatonSimulation.class and b/build/classes/java/main/model/CellularAutomatonSimulation.class differ
diff --git a/build/classes/java/main/model/ConstantCellInitializer.class b/build/classes/java/main/model/ConstantCellInitializer.class
index 603836f0726f5e36360c4e9845e56ce22da0e958..fbb1896f0b62ea6e83c8195ecd5ee66382b4d9b1 100644
Binary files a/build/classes/java/main/model/ConstantCellInitializer.class and b/build/classes/java/main/model/ConstantCellInitializer.class differ
diff --git a/build/classes/java/main/model/NextGenerationInitializer.class b/build/classes/java/main/model/NextGenerationInitializer.class
index 80c0fcd224a6291ccca3999b938dd923af0c1789..f691ed7e25d49609f91727c5f3b9eb1a5105b884 100644
Binary files a/build/classes/java/main/model/NextGenerationInitializer.class and b/build/classes/java/main/model/NextGenerationInitializer.class differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Cell.class.uniqueId0 b/build/tmp/compileJava/compileTransaction/stash-dir/Cell.class.uniqueId0
deleted file mode 100644
index ff54bf87cd3b03b63c7ea9b8a8248506a3c69a92..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/Cell.class.uniqueId0 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/CellularAutomatonSimulation.class.uniqueId2 b/build/tmp/compileJava/compileTransaction/stash-dir/CellularAutomatonSimulation.class.uniqueId2
deleted file mode 100644
index 666eee34be1ba6a3882b4a01d6f8c4b665a305ca..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/CellularAutomatonSimulation.class.uniqueId2 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ConstantCellInitializer.class.uniqueId4 b/build/tmp/compileJava/compileTransaction/stash-dir/ConstantCellInitializer.class.uniqueId4
deleted file mode 100644
index 603836f0726f5e36360c4e9845e56ce22da0e958..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/ConstantCellInitializer.class.uniqueId4 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/NextGenerationInitializer.class.uniqueId1 b/build/tmp/compileJava/compileTransaction/stash-dir/NextGenerationInitializer.class.uniqueId1
deleted file mode 100644
index 80c0fcd224a6291ccca3999b938dd923af0c1789..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/NextGenerationInitializer.class.uniqueId1 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/SimulatorApplication.class.uniqueId3 b/build/tmp/compileJava/compileTransaction/stash-dir/SimulatorApplication.class.uniqueId3
deleted file mode 100644
index d3e7e6501fdcde716363cd6017444d3fbf0f8365..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/SimulatorApplication.class.uniqueId3 and /dev/null differ
diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin
index 35a39514d6fb286df34fb16f88c09c44f12e96f4..cd8eaee3c91978a7b3ca927d9701738bd6e4c633 100644
Binary files a/build/tmp/compileJava/previous-compilation-data.bin and b/build/tmp/compileJava/previous-compilation-data.bin differ
diff --git a/build/tmp/compileTestJava/previous-compilation-data.bin b/build/tmp/compileTestJava/previous-compilation-data.bin
index ab38118fbbff4ce536680120c3cc273e54593135..c179c808f0df12277b3052e7f7eecf48d1130fe4 100644
Binary files a/build/tmp/compileTestJava/previous-compilation-data.bin and b/build/tmp/compileTestJava/previous-compilation-data.bin differ
diff --git a/src/main/java/model/CellularAutomatonSimulation.java b/src/main/java/model/CellularAutomatonSimulation.java
index d08c7a4eb05750d514d2929720bba2c0beeeb694..fcfdfdc2dea8e6882d0a54560a0afcd9b0b5bdc8 100644
--- a/src/main/java/model/CellularAutomatonSimulation.java
+++ b/src/main/java/model/CellularAutomatonSimulation.java
@@ -42,14 +42,12 @@ public class CellularAutomatonSimulation<S extends State<S>>
 
     @Override
     public int numberOfColumns() {
-        //TODO: à compléter
-        return 0;
+        return this.automaton.numberOfColumns();
     }
 
     @Override
     public int numberOfRows() {
-        //TODO: à compléter
-        return 0;
+        return this.automaton.numberOfRows();
     }
 
     /**
@@ -59,14 +57,19 @@ public class CellularAutomatonSimulation<S extends State<S>>
      * @return The cell at the specified coordinate.
      */
     public Cell<S> at(Coordinate coordinate) {
-        //TODO: à compléter
-        return null;
+        return this.grid.get(coordinate);
     }
 
     @Override
     public void updateToNextGeneration() {
-        //TODO: à compléter, en utilisant nextGenerationMatrix()
-    }
+        ListMatrix<S> nextGeneration= nextGenerationMatrix();
+        for(Coordinate coordinate: this.grid.coordinates()){
+            S next= nextGeneration.get(coordinate);
+            Cell<S> cell = this.grid.get(coordinate);
+            cell.set(next);
+        }
+        this.generationNumber.set(this.generationNumber.get()+1);
+        }
 
     /** Computes the {@link ListMatrix} of states obtained after a single step of updates
      * of the simulation.
@@ -74,23 +77,25 @@ public class CellularAutomatonSimulation<S extends State<S>>
      * @return the states of each cell after one generation
      */
     private ListMatrix<S> nextGenerationMatrix() {
-        //TODO: à compléter
-        return null;
+        return new ListMatrix<>(
+            this.numberOfColumns(),this.numberOfRows(),new NextGenerationInitializer<>(this));
     }
     @Override
     public void next(Coordinate coordinate) {
-        //TODO: à compléter
+        Cell <S> cell =this.at(coordinate);
+        S next = cell.get().next();
+        cell.set(next);
     }
 
     @Override
     public void copy(Coordinate source, Coordinate destination) {
-        //TODO: à compléter
+        S value =this.at(source).get();
+        this.at(destination).set(value);
     }
 
     @Override
     public Color getColor(Coordinate coordinate) {
-        //TODO: à compléter
-        return null;
+        return this.at(coordinate).get().getColor();
     }
 
     @Override
@@ -108,17 +113,31 @@ public class CellularAutomatonSimulation<S extends State<S>>
 
     @Override
     public void clear() {
-        //TODO: à compléter (penser à remettre le nombre de génération à 0)
-    }
+        for(Coordinate coordinate : this.grid.coordinates()){
+            this.at(coordinate).set(this.automaton.defaultState());
+        }
+        this.generationNumber.set(0);
+        }
 
 
     @Override
     public void reset() {
-        //TODO: à compléter (penser à remettre le nombre de génération à 0)
-    }
+        for(Coordinate coordinate:this.grid.coordinates()){
+            this.at(coordinate).set(this.automaton.randomState(this.generator));
+        }
+        this.generationNumber.set(0);
+            }
 
     @Override
     public Iterator<Coordinate> iterator() {
         return this.grid.coordinates().iterator();
     }
+
+
+   
+
+
+
+
+  
 }
diff --git a/src/main/java/model/ConstantCellInitializer.java b/src/main/java/model/ConstantCellInitializer.java
index 39a5b7160e7cf25f8240daff179ae177fcd92407..7d12220563e40d4f5b48c101cf8b4dc068cd158f 100644
--- a/src/main/java/model/ConstantCellInitializer.java
+++ b/src/main/java/model/ConstantCellInitializer.java
@@ -11,20 +11,19 @@ import matrix.MatrixInitializer;
  * @param <T> the type of content of each cell
  */
 public class ConstantCellInitializer<T>  implements MatrixInitializer<Cell<T>> {
-    //TODO: ajouter la/les propriétes nécessaires
-
+    private final T defaultValue;
     /** Make a new {@link MatrixInitializer} with cells containing a {@link Cell} with the same
      * value.
      *
      * @param defaultValue the value stored in each cell.
      */
     public ConstantCellInitializer(T defaultValue) {
-        //TODO: à compléter
-    }
+        this.defaultValue=defaultValue;
+        }
 
     @Override
     public Cell<T> initialValueAt(Coordinate coordinate) {
-        //TODO: à compléter
-        return null;
+        //retourne la nouvelle cellule avec la valeur constante par def
+        return new Cell<>(defaultValue);
     }
 }
diff --git a/src/main/java/model/NextGenerationInitializer.java b/src/main/java/model/NextGenerationInitializer.java
index f9462bfbd6fe1b55ad7ee10ada452a78825b6a2e..a0536c1f24475686fd05ce1360f6c7e7fb15f148 100644
--- a/src/main/java/model/NextGenerationInitializer.java
+++ b/src/main/java/model/NextGenerationInitializer.java
@@ -1,9 +1,13 @@
 package model;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import controller.Simulation;
 import matrix.Coordinate;
-import matrix.MatrixInitializer;
 import matrix.ListMatrix;
-import controller.Simulation;
+import matrix.MatrixInitializer;
+
 
 /**
  * An initializer for a {@link ListMatrix} of states, where each state is computed based on the value
@@ -13,7 +17,7 @@ import controller.Simulation;
  */
 public class NextGenerationInitializer<S extends State<S>> implements MatrixInitializer<S> {
 
-    //TODO: ajouter les propriétés nécessaires
+    private final CellularAutomatonSimulation <S> simulation;
 
     /** Create a {@link MatrixInitializer} to compute the next generation in
      * a 2D cellular automaton.
@@ -21,13 +25,18 @@ public class NextGenerationInitializer<S extends State<S>> implements MatrixInit
      * @param simulation the {@link Simulation} representing the cellular automaton.
      */
     public NextGenerationInitializer(CellularAutomatonSimulation<S> simulation) {
-        //TODO: à compléter
+        this.simulation =simulation;
+      
     }
 
     @Override
-    public S initialValueAt(Coordinate coordinate) {
-        //TODO: à compléter
-        return null;
+    public S  initialValueAt(Coordinate coordinate) {
+        List <Coordinate> neighbours=coordinate.orthodiagonalNeighbours();
+        List<S> states =new ArrayList<>();
+        for (Coordinate neighbour:neighbours){
+            states.add(this.simulation.at(wrap(neighbour)).get());
+        }
+        return this.simulation.at(coordinate).get().update(states);
     }
 
     /** Computes the grid {@link Coordinate} for an arbitrary {@link Coordinate}, even outside
@@ -39,10 +48,10 @@ public class NextGenerationInitializer<S extends State<S>> implements MatrixInit
      * @return a corresponding {@link Coordinate}, that is inside the grid.
      */
     Coordinate wrap(Coordinate coordinate) {
-        //TODO: à compléter
         //Il faut recalculer les coordonnées x et y modulo les dimensions de la grille.
         //Pour le modulo, utiliser la fonction ci-dessous, qui s'assure que le résultat est positif.
-        return null;
+       return new Coordinate(modulo(coordinate.x(), this.simulation.numberOfColumns()),
+                    modulo(coordinate.y(), this.simulation.numberOfRows()));
     }
 
     /** The non-negative remainder of n divided by d.