diff --git a/src/main/java/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java
index 8be93fae98fd8c3c21df08d6339858c661a20902..99663c3b3a8d152d1fa123db550d79421fd51c0d 100644
--- a/src/main/java/app/SimulatorApplication.java
+++ b/src/main/java/app/SimulatorApplication.java
@@ -22,6 +22,8 @@ public class SimulatorApplication extends javafx.application.Application {
   public static final int INITIAL_CLOUD_COUNT = 6;
   public static final int INITIAL_MONTAIN_COUNT = 4;
   public static final int INITIAL_MOTORIZED_FIREFIGHTER_COUNT = 4;
+  public static final int INITIAL_ROAD_COUNT = 2;
+
 
 
   private Stage primaryStage;
@@ -48,7 +50,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_MONTAIN_COUNT,INITIAL_MOTORIZED_FIREFIGHTER_COUNT);
+            INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT, INITIAL_CLOUD_COUNT,INITIAL_MONTAIN_COUNT,INITIAL_MOTORIZED_FIREFIGHTER_COUNT,INITIAL_ROAD_COUNT);
   }
 
   private void showScene() {
diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java
index 37c6a8aeac22526aed03e11e7f498cc44e25cc69..04e212b1d7037487d524af5107a77093686928e8 100644
--- a/src/main/java/controller/Controller.java
+++ b/src/main/java/controller/Controller.java
@@ -15,6 +15,12 @@ import javafx.util.Pair;
 import model.*;
 import util.Position;
 import view.*;
+import view.Element.EMPTY;
+import view.Element.FIRE;
+import view.Fighters.FIREFIGHTER;
+import view.Fighters.MOTORIZED_FIREFIGHTER;
+import view.Obstacles.MONTAINS;
+import view.Obstacles.ROADS;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -98,6 +104,12 @@ public class Controller {
         return new MOTORIZED_FIREFIGHTER();
       }
 
+      if(model instanceof Roads){
+        return new ROADS();
+      }
+
+
+
     }
 
     return new EMPTY();
@@ -136,9 +148,9 @@ public class Controller {
   }
 
   public void initialize(int squareWidth, int squareHeight, int columnCount,
-                                int rowCount, int initialFireCount, int initialFirefighterCount, int initialCloudsCount, int initialMontainsCount,int initialMorized_firefighterCount) {
+                                int rowCount, int initialFireCount, int initialFirefighterCount, int initialCloudsCount, int initialMontainsCount,int initialMorized_firefighterCount,int initialRoadsCount) {
     grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight);
-    this.setModel(new FirefighterBoard(columnCount, rowCount, initialFireCount, initialFirefighterCount,initialCloudsCount, initialMontainsCount,initialMorized_firefighterCount));
+    this.setModel(new FirefighterBoard(columnCount, rowCount, initialFireCount, initialFirefighterCount,initialCloudsCount, initialMontainsCount,initialMorized_firefighterCount,initialRoadsCount));
     repaintGrid();
   }
 
diff --git a/src/main/java/model/AbstractFighter.java b/src/main/java/model/AbstractFighter.java
new file mode 100644
index 0000000000000000000000000000000000000000..2c1323ac606fb4266cb5c97856b51f69a170787f
--- /dev/null
+++ b/src/main/java/model/AbstractFighter.java
@@ -0,0 +1,57 @@
+package model;
+
+import util.Position;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+public abstract class AbstractFighter extends BoardMethods  implements ModelElement {
+    private List<Position> fighterPositions;
+
+
+    public void add(Position position) {
+        fighterPositions.add(position);
+    }
+
+    public List<Position> getFighterPositions() {
+        return fighterPositions;
+    }
+
+
+    public void initializeElements(int initialfighterCount, int rowCount, int columnCount) {
+        this.rowCount = rowCount;
+        this.columnCount = columnCount;
+        fighterPositions = new ArrayList<>();
+        for (int index = 0; index < initialfighterCount; index++)
+            fighterPositions.add(randomPosition());
+    }
+
+
+    public List<Position> updatefighters(Set<Position> firePositions, Montains montains) {
+        List<Position> result = new ArrayList<>();
+        List<Position> firefighterNewPositions = new ArrayList<>();
+        for (Position firefighterPosition : fighterPositions) {
+            Position newFirefighterPosition = neighborClosestToFire(firefighterPosition, firePositions);
+
+            if (firefighterNewPositions.contains(newFirefighterPosition) || montains.getMontainsPositions().contains(newFirefighterPosition)) {
+                firefighterNewPositions.add(firefighterPosition);
+                extinguish(firefighterPosition, firePositions);
+            } else {
+                firefighterNewPositions.add(newFirefighterPosition);
+                extinguish(newFirefighterPosition, firePositions);
+            }
+            result.add(firefighterPosition);
+            result.add(newFirefighterPosition);
+            List<Position> neighborFirePositions = neighbors(newFirefighterPosition).stream()
+                    .filter(firePositions::contains).toList();
+            for (Position firePosition : neighborFirePositions)
+                extinguish(firePosition, firePositions);
+            result.addAll(neighborFirePositions);
+        }
+        fighterPositions = firefighterNewPositions;
+
+        return result;
+    }
+
+}
diff --git a/src/main/java/model/FireFighters.java b/src/main/java/model/FireFighters.java
index ae6f52ac49d53f37474a29beb8c1ffdf81ece152..98cee1b10366b21c9a83bb8853168cf11ce78d7d 100644
--- a/src/main/java/model/FireFighters.java
+++ b/src/main/java/model/FireFighters.java
@@ -4,9 +4,9 @@ import util.Position;
 
 import java.util.*;
 
-public class FireFighters extends BoardMethods implements ModelElement {
+public class FireFighters extends AbstractFighter implements ModelElement {
 
-    private List<Position> fireFightersPositions;
+   /* private List<Position> fireFightersPositions;
 
 
 
@@ -61,6 +61,9 @@ public class FireFighters extends BoardMethods implements ModelElement {
         fireFightersPositions = firefighterNewPositions;
         return result;
     }
+    */
+   public FireFighters() {
+   }
 
 
 
diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java
index 90c1e6f3113f23662cb1fd81b6847d99451fb574..b0360d50d6fc21f14631a59d32e4e570f22a27b3 100644
--- a/src/main/java/model/FirefighterBoard.java
+++ b/src/main/java/model/FirefighterBoard.java
@@ -12,6 +12,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   private final int initialFirefighterCount;
   private final int initialCloudsCount;
   private final int initialMorized_firefighterCount;
+  private final int initialRoadsCount;
 
   private final int initialMontainCount;
   private Fires fires;
@@ -19,10 +20,11 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   private Cloud clouds;
   private Montains Montains;
   private Motorized_Firefighter motorized_firefighter;
+  private Roads roads;
 
   private int step = 0;
 
-  public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialCloudsCount, int initialMontainCount,int initialMorized_firefighterCount) {
+  public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialCloudsCount, int initialMontainCount,int initialMorized_firefighterCount,int initialRoadsCount) {
     this.columnCount = columnCount;
     this.rowCount = rowCount;
     this.initialFireCount = initialFireCount;
@@ -30,6 +32,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
     this.initialCloudsCount = initialCloudsCount;
     this.initialMontainCount = initialMontainCount;
     this.initialMorized_firefighterCount = initialMorized_firefighterCount;
+    this.initialRoadsCount = initialRoadsCount;
     initializeElements();
   }
 
@@ -39,17 +42,19 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
     this.clouds = new Cloud();
     this.Montains = new Montains();
     this.motorized_firefighter = new Motorized_Firefighter();
+    this.roads = new Roads();
     fires.initializeElements(initialFireCount,rowCount,columnCount);
     fireFighters.initializeElements(initialFirefighterCount,rowCount,columnCount);
     clouds.initializeElements(initialCloudsCount,rowCount, columnCount);
     Montains.initializeElements(initialMontainCount, rowCount,columnCount);
     motorized_firefighter.initializeElements(initialMorized_firefighterCount,rowCount,columnCount);
+    roads.initializeElements(initialRoadsCount,rowCount,columnCount);
   }
 
   @Override
   public List<ModelElement> getState(Position position) {
     List<ModelElement> result = new ArrayList<>();
-    for(Position firefighterPosition : fireFighters.getFireFightersPositions())
+    for(Position firefighterPosition : fireFighters.getFighterPositions())
       if (firefighterPosition.equals(position))
         result.add(new FireFighters());
 
@@ -61,10 +66,16 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
       if (cloudsPositions.equals(position))
         result.add(new Cloud());
 
-    for(Position motorized_firefighter : motorized_firefighter.getMotorized_fireFightersPositions())
+    for(Position motorized_firefighter : motorized_firefighter.getFighterPositions())
       if (motorized_firefighter.equals(position))
         result.add(new Motorized_Firefighter());
 
+    for(Position motorized_firefighter : roads.getRoadsPositions())
+      if (motorized_firefighter.equals(position))
+        result.add(new Roads());
+
+
+
     if(fires.getFirePositions().contains(position))
       result.add(new Fires());
     return result;
@@ -81,11 +92,11 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   }
 
   public List<Position> updateToNextGeneration() {
-    List<Position> result = fireFighters.updateFirefighters(fires.getFirePositions(),Montains);
-    result.addAll(fires.updateFires(Montains));
+    List<Position> result = fireFighters.updatefighters(fires.getFirePositions(),Montains);
+    result.addAll(fires.updateFires(Montains,roads));
     if (!fires.getFirePositions().isEmpty()) {
       result.addAll(clouds.updateCouds(fires.getFirePositions()));
-      result.addAll(motorized_firefighter.updateMotorized_firefighter(fires.getFirePositions(),Montains));
+      result.addAll(motorized_firefighter.updateMotorizedFirefighters(fires.getFirePositions(),Montains));
       step++;
       fires.incrementStep();
     }
@@ -112,7 +123,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   public void setState(List<ModelElement> state, Position position) {
     //fires.extinguish(position);
     for (;;) {
-      if (!fireFighters.getFireFightersPositions().remove(position)) break;
+      if (!fireFighters.getFighterPositions().remove(position)) break;
     }
 
     for(ModelElement element : state){
@@ -129,6 +140,10 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
       if(element instanceof Montains){
         Montains.add(position);
       }
+
+      if(element instanceof Roads){
+        roads.add(position);
+      }
       if (element instanceof Motorized_Firefighter){
         motorized_firefighter.add(position);
       }
diff --git a/src/main/java/model/Fires.java b/src/main/java/model/Fires.java
index 1b157b97efe0d216321a511a0c26c2cec5fca18f..e528cf8f3564635d125d1a24430b2af88ffa6666 100644
--- a/src/main/java/model/Fires.java
+++ b/src/main/java/model/Fires.java
@@ -22,16 +22,15 @@ public class Fires extends BoardMethods implements ModelElement {
         return firePositions;
     }
 
-    public List<Position> updateFires(Montains montains) {
+    public List<Position> updateFires(Montains montains, Roads roads) {
         List<Position> result = new ArrayList<>();
         if (step % 2 == 0) {
             List<Position> newFirePositions = new ArrayList<>();
             for (Position fire : firePositions) {
-                List<Position> neighborsOfFires = neighbors(fire);
-                for(Position neighbor : neighborsOfFires) {
-                    if (!montains.getMontainsPositions().contains(neighbor)){
-                        newFirePositions.add(neighbor);
-                    }
+                List<Position> neighbors= neighbors(fire);
+                for (Position position : neighbors){
+                    if(!montains.getMontainsPositions().contains(position) || !roads.getRoadsPositions().contains(position))
+                        newFirePositions.add(position);
                 }
             }
             firePositions.addAll(newFirePositions);
diff --git a/src/main/java/model/Montains.java b/src/main/java/model/Montains.java
index 46b10c13df1b87677385460cbb207b455385efec..68ce7fa79dfae85446b7df4bbe51056cf6bf5d5a 100644
--- a/src/main/java/model/Montains.java
+++ b/src/main/java/model/Montains.java
@@ -6,7 +6,7 @@ import java.util.*;
 
 public class Montains extends BoardMethods implements ModelElement {
 
-    private Set<Position> MontainsPositions;
+    private List<Position> MontainsPositions;
 
 
     public Montains() {
@@ -16,28 +16,43 @@ public class Montains extends BoardMethods implements ModelElement {
         MontainsPositions.add(newPositions);
     }
 
-    public Set<Position> getMontainsPositions() {
+    public List<Position> getMontainsPositions() {
         return MontainsPositions;
     }
 
 
-
-
-
-    public void initializeElements(int initialFireCount, int rowCount, int columnCount) {
-        this.columnCount = columnCount;
+    public void initializeElements(int initialMontainsCount, int rowCount, int columnCount) {
         this.rowCount = rowCount;
-        MontainsPositions = new HashSet<>();
-        for (int index = 0; index < initialFireCount; index++)
-            MontainsPositions.add(randomPosition());
+        this.columnCount = columnCount;
+        MontainsPositions = new ArrayList<>();
+
+        for (int index = 0; index < initialMontainsCount; index++) {
+            Position blockStart = randomPosition();
+            int blockSize = 3;
+            for (int rowOffset = 0; rowOffset < blockSize; rowOffset++) {
+                for (int colOffset = 0; colOffset < blockSize; colOffset++) {
+                    // Ajoutez chaque position du bloc à la liste des positions des montagnes
+                    int newRow = (blockStart.row() + rowOffset) % rowCount;
+                    int newCol = (blockStart.column() + colOffset) % columnCount;
+
+                    // Assurez-vous que les résultats sont positifs
+                    newRow = (newRow + rowCount) % rowCount;
+                    newCol = (newCol + columnCount) % columnCount;
+
+                    MontainsPositions.add(new Position(newRow, newCol));
+                }
+            }
+        }
     }
 
+}
+
+
 
 
 
 
 
-}
 
 
 
diff --git a/src/main/java/model/Motorized_Firefighter.java b/src/main/java/model/Motorized_Firefighter.java
index 874881bba9c319ff64d5b631f6e17c925aacf479..883f13cfff6737bec1d4a3cba887fd8592c3537c 100644
--- a/src/main/java/model/Motorized_Firefighter.java
+++ b/src/main/java/model/Motorized_Firefighter.java
@@ -6,8 +6,8 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
 
-public class Motorized_Firefighter extends BoardMethods implements ModelElement {
-
+public class Motorized_Firefighter extends AbstractFighter {
+/*
     private List<Position> Motorized_fireFightersPositions;
 
     public Motorized_Firefighter() {
@@ -62,6 +62,16 @@ public class Motorized_Firefighter extends BoardMethods implements ModelElement
         }
         return result;
     }
+    */
+
+    public List<Position> updateMotorizedFirefighters(Set<Position> firePositions, Montains montains) {
+        List<Position> result = new ArrayList<>();
+        for (int i = 0; i < 2; i++) {
+            result.addAll(super.updatefighters(firePositions, montains));
+        }
+        return result;
+    }
+
 
 
 }
diff --git a/src/main/java/model/Roads.java b/src/main/java/model/Roads.java
new file mode 100644
index 0000000000000000000000000000000000000000..00dacc5fd4a10b09510743853a91668ab135f44d
--- /dev/null
+++ b/src/main/java/model/Roads.java
@@ -0,0 +1,48 @@
+package model;
+
+import model.BoardMethods;
+import model.ModelElement;
+import util.Position;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Roads extends BoardMethods implements ModelElement {
+    private List<Position> roadsPositions;
+
+    public Roads() {
+    }
+
+    public void add(Position position){
+        roadsPositions.add(position);
+    }
+    public List<Position> getRoadsPositions() {
+        return roadsPositions;
+    }
+
+
+
+
+    public void initializeElements(int initialRoadsCount, int rowCount, int columnCount) {
+        this.rowCount = rowCount;
+        this.columnCount = columnCount;
+        roadsPositions = new ArrayList<>();
+
+        for (int index = 0; index < initialRoadsCount; index++) {
+            // Choisir une position aléatoire pour le coin supérieur gauche du bloc
+            Position blockStart = randomPosition();
+
+            // Définir la taille du bloc (5x5, par exemple)
+            int blockSize = 6;
+
+            for (int rowOffset = 0; rowOffset < blockSize; rowOffset++) {
+                for (int colOffset = 0; colOffset < 2; colOffset++) {
+                    // Ajoutez chaque position du bloc à la liste des positions des montagnes
+                    int newRow = (blockStart.row() + rowOffset) % rowCount;
+                    int newCol = (blockStart.column() + colOffset) % columnCount;
+                    roadsPositions.add(new Position(newRow, newCol));
+                }
+            }
+        }
+    }
+}
diff --git a/src/main/java/view/EMPTY.java b/src/main/java/view/Element/EMPTY.java
similarity index 77%
rename from src/main/java/view/EMPTY.java
rename to src/main/java/view/Element/EMPTY.java
index 634423ecc762c904932a893e424a01d46da00a0d..8e2b5cbb6d14ff44e0c29ad5d05edca626c5015b 100644
--- a/src/main/java/view/EMPTY.java
+++ b/src/main/java/view/Element/EMPTY.java
@@ -1,6 +1,7 @@
-package view;
+package view.Element;
 
 import javafx.scene.paint.Color;
+import view.ViewElement;
 
 public class EMPTY implements ViewElement {
     @Override
diff --git a/src/main/java/view/FIRE.java b/src/main/java/view/Element/FIRE.java
similarity index 76%
rename from src/main/java/view/FIRE.java
rename to src/main/java/view/Element/FIRE.java
index f66b7f3e3d70e9b368211ab09ccc71987196e6fc..228b1240405a9a32bc15491624072c23ae2801f4 100644
--- a/src/main/java/view/FIRE.java
+++ b/src/main/java/view/Element/FIRE.java
@@ -1,6 +1,7 @@
-package view;
+package view.Element;
 
 import javafx.scene.paint.Color;
+import view.ViewElement;
 
 public class FIRE  implements ViewElement {
     @Override
diff --git a/src/main/java/view/FIREFIGHTER.java b/src/main/java/view/Fighters/FIREFIGHTER.java
similarity index 77%
rename from src/main/java/view/FIREFIGHTER.java
rename to src/main/java/view/Fighters/FIREFIGHTER.java
index eb56dad97d1663d90f48a544764413b9dcc802d4..83c41b0de851064bf61086f8828bf0365d4a77a9 100644
--- a/src/main/java/view/FIREFIGHTER.java
+++ b/src/main/java/view/Fighters/FIREFIGHTER.java
@@ -1,6 +1,7 @@
-package view;
+package view.Fighters;
 
 import javafx.scene.paint.Color;
+import view.ViewElement;
 
 public class FIREFIGHTER implements ViewElement {
     @Override
diff --git a/src/main/java/view/MOTORIZED_FIREFIGHTER.java b/src/main/java/view/Fighters/MOTORIZED_FIREFIGHTER.java
similarity index 51%
rename from src/main/java/view/MOTORIZED_FIREFIGHTER.java
rename to src/main/java/view/Fighters/MOTORIZED_FIREFIGHTER.java
index efd19f59e56d0e7eb260decf7aff96d2090794fa..1cd146fd646dc11895e09064cab733de2e93c73e 100644
--- a/src/main/java/view/MOTORIZED_FIREFIGHTER.java
+++ b/src/main/java/view/Fighters/MOTORIZED_FIREFIGHTER.java
@@ -1,8 +1,9 @@
-package view;
+package view.Fighters;
 
 import javafx.scene.paint.Color;
+import view.ViewElement;
 
-public class MOTORIZED_FIREFIGHTER implements ViewElement{
+public class MOTORIZED_FIREFIGHTER implements ViewElement {
     @Override
     public Color getColor() {
         return Color.BROWN;
diff --git a/src/main/java/view/MONTAINS.java b/src/main/java/view/Obstacles/MONTAINS.java
similarity index 62%
rename from src/main/java/view/MONTAINS.java
rename to src/main/java/view/Obstacles/MONTAINS.java
index b2f55e41a633b41236a1b9cbfdeacc444ecf5020..d01bc1fa83df86d247422304865f7a1252c5e080 100644
--- a/src/main/java/view/MONTAINS.java
+++ b/src/main/java/view/Obstacles/MONTAINS.java
@@ -1,10 +1,11 @@
-package view;
+package view.Obstacles;
 
 import javafx.scene.paint.Color;
+import view.ViewElement;
 
 public class MONTAINS implements ViewElement {
     @Override
     public Color getColor() {
-        return Color.BLACK;
+        return Color.DARKCYAN;
     }
 }
diff --git a/src/main/java/view/Obstacles/ROADS.java b/src/main/java/view/Obstacles/ROADS.java
new file mode 100644
index 0000000000000000000000000000000000000000..cc8c25c92bd681b4aaec92983c95fcfac5fc720e
--- /dev/null
+++ b/src/main/java/view/Obstacles/ROADS.java
@@ -0,0 +1,11 @@
+package view.Obstacles;
+
+import javafx.scene.paint.Color;
+import view.ViewElement;
+
+public class ROADS implements ViewElement {
+    @Override
+    public Color getColor() {
+        return Color.CORAL;
+    }
+}