diff --git a/src/main/java/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java
index cf042868aaad396297f8fd541f4668f2819d4134..44fd3c2512d327d67c150257255a0e1136af07f0 100644
--- a/src/main/java/app/SimulatorApplication.java
+++ b/src/main/java/app/SimulatorApplication.java
@@ -20,6 +20,7 @@ public class SimulatorApplication extends javafx.application.Application {
   public static final int INITIAL_FIRE_COUNT = 15;
   public static final int INITIAL_FIREFIGHTER_COUNT = 10;
   public static final int INITIAL_CLOUD_COUNT = 5;
+  public static final int INITIAL_ROAD_COUNT = 5;
 
 
   private Stage primaryStage;
@@ -46,7 +47,7 @@ public class SimulatorApplication extends javafx.application.Application {
     view = loader.load();
     Controller controller = loader.getController();
     controller.initialize(BOX_WIDTH, BOX_HEIGHT, COLUMN_COUNT, ROW_COUNT,
-            INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT,INITIAL_CLOUD_COUNT);
+            INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT,INITIAL_CLOUD_COUNT,INITIAL_ROAD_COUNT);
   }
 
   private void showScene() {
diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java
index 0c9dfb7942e6772ea0f6c2dae5c83127312c8716..0c89bb2fa8a484ab2771a4d9ea2adc3463ae89d2 100644
--- a/src/main/java/controller/Controller.java
+++ b/src/main/java/controller/Controller.java
@@ -88,9 +88,12 @@ public class Controller {
     if (squareState.contains(ModelElement.FIRE)) {
       return ViewElement.FIRE;
     }
-    if (squareState.contains(ModelElement.CLOUD)) {  // Assurez-vous que le modèle inclut bien le nuage
+    if (squareState.contains(ModelElement.CLOUD)) {
       return ViewElement.CLOUD;
     }
+    if (squareState.contains(ModelElement.ROAD)) {
+      return ViewElement.ROAD;
+    }
     return ViewElement.EMPTY;
   }
 
@@ -128,9 +131,9 @@ public class Controller {
   }
 
   public void initialize(int squareWidth, int squareHeight, int columnCount,
-                                int rowCount, int initialFireCount, int initialFirefighterCount,int initialCloudCount) {
+                                int rowCount, int initialFireCount, int initialFirefighterCount,int initialCloudCount,int initialRoadCount) {
     grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight);
-    this.setModel(new FirefighterBoard(columnCount, rowCount, initialFireCount, initialFirefighterCount,initialCloudCount));
+    this.setModel(new FirefighterBoard(columnCount, rowCount, initialFireCount, initialFirefighterCount,initialCloudCount,initialRoadCount));
     repaintGrid();
   }
 
diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java
index b60c9ae13f8c843e33f8167fce5390221e548481..7db4034416a9240dfab547603bdf589c2003476f 100644
--- a/src/main/java/model/FirefighterBoard.java
+++ b/src/main/java/model/FirefighterBoard.java
@@ -12,8 +12,10 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   private final int initialFireCount;
   private final int initialFirefighterCount;
   private final int initialCloudCount;
+  private final int initialRoadCount;
   private final TargetStrategy targetStrategy = new TargetStrategy();
   private List<FireFighter> firefighters;
+  private List<Road> roads;
   private Map<Position, Fire> fires = new HashMap<>();
   private List<Cloud> clouds;
   private final Map<Position, List<Position>> neighbors = new HashMap<>();
@@ -21,7 +23,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   private int step = 0;
   private final Random randomGenerator = new Random();
 
-  public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount,int initialCloudCount) {
+  public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount,int initialCloudCount,int initialRoadCount) {
     this.columnCount = columnCount;
     this.rowCount = rowCount;
     this.positions = new Position[rowCount][columnCount];
@@ -31,6 +33,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
     this.initialFireCount = initialFireCount;
     this.initialFirefighterCount = initialFirefighterCount;
     this.initialCloudCount = initialCloudCount;
+    this.initialRoadCount = initialRoadCount;
     initializeElements();
   }
 
@@ -61,6 +64,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
     firefighters = new ArrayList<>();
     clouds = new ArrayList<>();
     fires.clear();
+    roads = new ArrayList<>();
 
     for (int index = 0; index < initialFireCount; index++) {
       Position position = randomPosition();
@@ -74,6 +78,10 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
       clouds.add(new Cloud(randomPosition()));
     }
 
+    for (int index = 0; index < initialRoadCount; index++) {
+      roads.add(new Road(randomPosition()));
+    }
+
   }
 
   private Position randomPosition() {
@@ -92,6 +100,9 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
     for (Cloud cloud : clouds) {
       if (cloud.getPosition().equals(position)) result.add(ModelElement.CLOUD);
     }
+    for (Road road : roads) {
+      if (road.getPosition().equals(position)) result.add(ModelElement.ROAD);
+    }
     return result;
   }
 
@@ -139,6 +150,9 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
     if (step % 2 == 0) {
       Set<Position> newFirePositions = new HashSet<>();
       for (Position fire : new HashSet<>(fires.keySet())) {
+        List<Position> neighboursAvaiable = neighbors.get(fire);
+
+
         newFirePositions.addAll(neighbors.get(fire));
       }
       for (Position position : newFirePositions) {
@@ -196,11 +210,13 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   public void setState(List<ModelElement> state, Position position) {
     extinguish(position);
     firefighters.removeIf(firefighter -> firefighter.getPosition().equals(position));
+    firefighters.removeIf(cloud -> cloud.getPosition().equals(position));
 
     for (ModelElement element : state) {
       switch (element) {
         case FIRE -> fires.put(position, new Fire(position));
         case FIREFIGHTER -> firefighters.add(new FireFighter(position));
+        case CLOUD ->  clouds.add(new Cloud(position));
       }
     }
   }
diff --git a/src/main/java/model/ModelElement.java b/src/main/java/model/ModelElement.java
index 4613ca6034c1e7c76df1da76a87982b8fee1d716..b441468ecdb207a1e981278f4a2a7c19be8a46a1 100644
--- a/src/main/java/model/ModelElement.java
+++ b/src/main/java/model/ModelElement.java
@@ -3,6 +3,7 @@ package model;
 public enum ModelElement {
   FIREFIGHTER,
   FIRE,
-  CLOUD;
+  CLOUD,
+  ROAD;
 }
 
diff --git a/src/main/java/model/Road.java b/src/main/java/model/Road.java
index 21826f6ba84aa3868f06e104261940b00f62ab5f..5825a8440b20a9c6cdde1da7310065ee721af47b 100644
--- a/src/main/java/model/Road.java
+++ b/src/main/java/model/Road.java
@@ -19,4 +19,6 @@ public class Road {
 
 
 
+
+
 }
diff --git a/src/main/java/view/ViewElement.java b/src/main/java/view/ViewElement.java
index d3e00087e1a9d4e18edfcdbe07eb8be83adb16b3..c7fad49c1f47dae3484d671b744f6255b5310757 100644
--- a/src/main/java/view/ViewElement.java
+++ b/src/main/java/view/ViewElement.java
@@ -3,7 +3,7 @@ package view;
 import javafx.scene.paint.Color;
 
 public enum ViewElement {
-  FIREFIGHTER(Color.BLUE), FIRE(Color.RED),CLOUD(Color.LIGHTSKYBLUE), EMPTY(Color.WHITE);
+  FIREFIGHTER(Color.BLUE), FIRE(Color.RED),CLOUD(Color.LIGHTSKYBLUE),ROAD(Color.GRAY), EMPTY(Color.WHITE);
   final Color color;
   ViewElement(Color color) {
     this.color = color;
diff --git a/src/test/java/model/FirefighterBoardTest.java b/src/test/java/model/FirefighterBoardTest.java
index 5e6540f1ab46921aed249bbc44f71e5eef939a9e..c435da49d9f2c52656a67dccd183cabae21b5805 100644
--- a/src/test/java/model/FirefighterBoardTest.java
+++ b/src/test/java/model/FirefighterBoardTest.java
@@ -10,17 +10,17 @@ import static org.assertj.core.api.Assertions.*;
 public class FirefighterBoardTest {
   @Test
   void testColumnCount(){
-    Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3,1);
+    Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3,1,5);
     assertThat(board.columnCount()).isEqualTo(20);
   }
   @Test
   void testRowCount(){
-    Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3,1);
+    Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3,1,5);
     assertThat(board.rowCount()).isEqualTo(10);
   }
   @Test
   void testStepNumber(){
-    Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3,1);
+    Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3,1,5);
     for(int index = 0; index < 10; index++){
       assertThat(board.stepNumber()).isEqualTo(index);
       board.updateToNextGeneration();
@@ -29,7 +29,7 @@ public class FirefighterBoardTest {
   }
   @Test
   void testGetState_afterSet(){
-    Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 0, 0,1);
+    Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 0, 0,1,5);
     Position position = new Position(1,2);
     assertThat(board.getState(position)).isEmpty();
     board.setState(List.of(ModelElement.FIRE), position);