diff --git a/src/main/java/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java
index 86abb8525b4a41c5a54cea60981c01025d5ae3f8..0b2081cdd9186f46454e0c82ac0bce3ce81f5769 100644
--- a/src/main/java/app/SimulatorApplication.java
+++ b/src/main/java/app/SimulatorApplication.java
@@ -13,15 +13,18 @@ import javafx.stage.Stage;
 public class SimulatorApplication extends javafx.application.Application {
   private static final String VIEW_RESOURCE_PATH = "/view/view.fxml";
   private static final String APP_NAME = "Firefighter simulator";
-  private static final int ROW_COUNT = 20;
-  private static final int COLUMN_COUNT = 20;
+  private static final int ROW_COUNT = 22;
+  private static final int COLUMN_COUNT = 22;
   private static final int BOX_WIDTH = 25;
   private static final int BOX_HEIGHT = 25;
   public static final int INITIAL_FIRE_COUNT = 3;
   public static final int INITIAL_FIREFIGHTER_COUNT = 6;
+  public static final int INITIAL_CLOUD_COUNT = 6;
+  public static final int INITIAL_MOUNTAIN_COUNT= 30;
 
   private Stage primaryStage;
   private Parent view;
+
   private void initializePrimaryStage(Stage primaryStage) {
     this.primaryStage = primaryStage;
     this.primaryStage.setTitle(APP_NAME);
@@ -44,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_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT, INITIAL_CLOUD_COUNT, INITIAL_MOUNTAIN_COUNT);
   }
 
   private void showScene() {
diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java
index 04dd45ff4d3470ecc1557ba9b9801c769d15415e..577ca8297d2ffe2d263bb10fdcf88a74a17bcd09 100644
--- a/src/main/java/controller/Controller.java
+++ b/src/main/java/controller/Controller.java
@@ -5,6 +5,8 @@ import static java.util.Objects.*;
 import java.util.ArrayList;
 import java.util.List;
 
+
+
 import javafx.animation.Animation;
 import javafx.animation.KeyFrame;
 import javafx.animation.Timeline;
@@ -117,9 +119,9 @@ public class Controller {
   }
 
   public void initialize(int squareWidth, int squareHeight, int columnCount,
-      int rowCount, int initialFireCount, int initialFirefighterCount) {
+      int rowCount, int initialFireCount, int initialFirefighterCount, int initialcloudCount, int initialmountaincount) {
     grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight);
-    this.setModel(new FireFighterScenario(columnCount, rowCount, initialFireCount, initialFirefighterCount));
+    this.setModel(new FireFighterScenario(columnCount, rowCount, initialFireCount, initialFirefighterCount, initialcloudCount, initialmountaincount));
     repaintGrid();
   }
 
diff --git a/src/main/java/model/Cloud.java b/src/main/java/model/Cloud.java
new file mode 100644
index 0000000000000000000000000000000000000000..52ad4a1846097b7cb9a99325dd94ccbdd77761e9
--- /dev/null
+++ b/src/main/java/model/Cloud.java
@@ -0,0 +1,104 @@
+package model;
+
+import javafx.geometry.Pos;
+import javafx.scene.paint.Color;
+import util.Position;
+import util.PositionUtil;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+public class Cloud implements Entity{
+    private int age;
+    private Position position;
+    private final Color viewColor = Color.GREEN;
+    private final int priority = 3;
+
+
+
+    public Cloud(Position position, Board<Square> b){
+        this.age = 0;
+        this.position = position;
+
+    }
+
+    public Cloud(Position position, Board<Square> b, int age){
+        this.age = age;
+        this.position = position;
+
+    }
+
+    @Override
+    public List<Position> nextTurn(Board<Square> b) {
+        List<Position> adjacentPositions = PositionUtil.generateAdjacentPositions(position, b);
+        adjacentPositions.removeIf( p -> b.doesSquareContainEntity(p, Cloud.class));
+        adjacentPositions.removeIf( p -> b.doesSquareContainEntity(p, Mountain.class));
+
+        // Filtrer pour obtenir uniquement les positions qui ne contiennent pas de pompier
+        adjacentPositions.removeIf(p -> b.doesSquareContainEntity(p, FireFighter.class));
+
+        // Choisir une position aléatoire parmi les mouvements possibles
+        Position next_position = adjacentPositions.get(new Random().nextInt(adjacentPositions.size()));
+
+        // Si la nouvelle position contient un feu, éteindre le feu
+        if (b.getStates(next_position).getEntities().stream().anyMatch(element -> element instanceof Fire) ){
+            extinguish(next_position, b);
+        }
+
+        Position old_position = this.position;
+        this.position = next_position;
+        b.addEntityAtSquare(this, next_position);
+        b.clearCaseFrom(this, old_position);
+
+        return List.of(old_position, this.position);
+    }
+
+
+    private Position extinguish(Position p, Board<Square> b) {
+        b.getStates(p).getEntities().removeIf(element -> element instanceof Fire);
+            List<Entity> entities = b.getStates(p).getEntities();
+            for (Entity e : entities) {
+                if (e instanceof EmptyEntity) {
+                    e.setAge(b.stepNumber() + 1);
+                }
+            }
+
+        return p;
+    }
+
+    @Override
+    public Position getPosition() {
+        return this.position;
+    }
+
+    @Override
+    public void setPosition(Position p) {
+        this.position = p;
+    }
+
+    @Override
+    public int getAge() {
+        return age;
+    }
+
+    @Override
+    public void setAge(int age) {
+        this.age =age;
+    }
+
+    @Override
+    public void incrementAge() {
+        this.age += 1;
+
+    }
+
+    @Override
+    public Color getViewColor() {
+        return this.viewColor;
+    }
+
+    @Override
+    public int getPriority(){ return this.priority;}
+
+}
diff --git a/src/main/java/model/EmptyEntity.java b/src/main/java/model/EmptyEntity.java
index 6a916b89c626b4a0fcbdda433592f07a0cb2050a..69ce92772341497e5da5e6605d9bbff936996bcd 100644
--- a/src/main/java/model/EmptyEntity.java
+++ b/src/main/java/model/EmptyEntity.java
@@ -8,7 +8,7 @@ import util.Position;
 
 public class EmptyEntity implements Entity{
 
-
+    private final int priority=3;
     private Position position;
     private int age;
     public EmptyEntity(Position position){
@@ -55,5 +55,8 @@ public class EmptyEntity implements Entity{
     public Color getViewColor() {
         return Color.WHITE;
     }
+
+    @Override
+    public int getPriority(){return this.priority;}
     
 }
\ No newline at end of file
diff --git a/src/main/java/model/EmptySquare.java b/src/main/java/model/EmptySquare.java
new file mode 100644
index 0000000000000000000000000000000000000000..aa7c5dee8d7e942ccf67ca63824c71531e237947
--- /dev/null
+++ b/src/main/java/model/EmptySquare.java
@@ -0,0 +1,64 @@
+package model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javafx.scene.paint.Color;
+import util.Position;
+
+public class EmptySquare implements Entity {
+
+    private Position position;
+    private final Color viewColor = Color.WHITE;
+    private int age;
+    private final int priotity = 0;
+
+    public EmptySquare(Position p) {
+        this.position = p;
+        this.age = -999;
+    }
+
+    public EmptySquare(Position p, int age) {
+        this.position = p;
+        this.age = age;
+    }
+
+    @Override
+    public List<Position> nextTurn(Board<Square> board) {
+        return new ArrayList<Position>();
+    }
+
+    @Override
+    public Position getPosition() {
+        return position;
+    }
+
+    @Override
+    public void setPosition(Position p) {
+        this.position = p;
+    }
+
+    public Color getViewColor() {
+        return this.viewColor;
+    }
+
+    @Override
+    public int getAge() {
+        return this.age;
+    }
+
+    @Override
+    public void incrementAge() {
+        age = age + 1;
+    }
+
+    @Override
+    public void setAge(int age) {
+        this.age = age;
+    }
+
+    @Override
+    public int getPriority(){
+        return this.priotity;
+    }
+}
diff --git a/src/main/java/model/Entity.java b/src/main/java/model/Entity.java
index a14b34a525698fa52e5d472ccbc57764f78b9435..3270ae89da793de0e332c5802f70d4f60b88c933 100644
--- a/src/main/java/model/Entity.java
+++ b/src/main/java/model/Entity.java
@@ -5,6 +5,7 @@ import java.util.List;
 import javafx.scene.paint.Color;
 import util.Position;
 
+
 public interface Entity {
         /**
      * Exécute un tour de jeu, en vérifiant les cases adjacentes pour des instances de Fire.
@@ -19,4 +20,5 @@ public interface Entity {
     public void setAge(int age);
     public void incrementAge();
     public Color getViewColor();
+    public int getPriority();
 }
diff --git a/src/main/java/model/Fire.java b/src/main/java/model/Fire.java
index 90b9636c8a5f4301af411e291a34e834ed0806cf..3bb763e26843898c634ea8ee3ade0af9963c9316 100644
--- a/src/main/java/model/Fire.java
+++ b/src/main/java/model/Fire.java
@@ -6,12 +6,14 @@ import java.util.List;
 import javafx.scene.paint.Color;
 import util.Position;
 import util.PositionUtil;
+import util.PositionUtil;
 
 public class Fire implements Entity {
     Board<Square> b;
     private Position position;
     private final Color viewColor = Color.RED;
     private int age;
+    private final int priority = 0;
 
     public Fire(Position position, Board<Square> b) {
         this.b = b;
@@ -34,8 +36,9 @@ public class Fire implements Entity {
             return new ArrayList<Position>();
         }
         List<Position> positions = PositionUtil.generateAdjacentPositions(position, board);
+        positions.removeIf( p -> b.doesSquareContainEntity(p, Mountain.class));
         for (Position p : positions) {
-            if (b.getStates(p).isEmpty()) {
+            if (b.getStates(p).isEmpty() && !b.getStates(p).getEntities().contains(Cloud.class)) {
                 if (b.getStates(p).getMaxAge() < b.getStepNumber()
                         && PositionUtil.getManhattanDistance(position, p) == 1) {
                     board.addEntityAtSquare(new Fire(p, board), p);
@@ -76,4 +79,7 @@ public class Fire implements Entity {
     public void setAge(int age) {
         this.age = age;
     }
+
+    @Override
+    public int getPriority(){ return this.priority;}
 }
diff --git a/src/main/java/model/FireFighter.java b/src/main/java/model/FireFighter.java
index 4e8a35e927eb440d3ce9d35ce327dfd741e206c5..e206765c44f675019cb90fc054c926e0d36e170c 100644
--- a/src/main/java/model/FireFighter.java
+++ b/src/main/java/model/FireFighter.java
@@ -1,16 +1,15 @@
 package model;
+import java.util.*;
+import javafx.scene.paint.Color;
+import util.*;
 
-import java.util.ArrayList;
-import java.util.List;
 
-import javafx.scene.paint.Color;
-import util.Position;
-import util.PositionUtil;
 
 public class FireFighter implements Entity {
     private int age;
     private Position position;
     private final Color viewColor = Color.BLUE;
+    private final int priority = 1;
 
     public FireFighter(Position position, Board<Square> b) {
         this.position = position;
@@ -27,6 +26,7 @@ public class FireFighter implements Entity {
 
         // Générer les positions adjacentes
         List<Position> adjacentPositions = PositionUtil.generateAdjacentPositions(position, b);
+        adjacentPositions.removeIf( p -> b.doesSquareContainEntity(p, Mountain.class));
 
         // Vérifier s'il y a du feu dans une des positions adjacentes
         boolean hasFire = adjacentPositions.stream()
@@ -137,4 +137,6 @@ public class FireFighter implements Entity {
     public void setAge(int age) {
         this.age = age;
     }
+    public int getPriority(){ return this.priority;}
+
 }
diff --git a/src/main/java/model/FireFighterScenario.java b/src/main/java/model/FireFighterScenario.java
index 547f543001aa02f794db3bb8d17ec0f2dac16cf9..d0dc3442a2c61acd65e3da672de76834715d6cac 100644
--- a/src/main/java/model/FireFighterScenario.java
+++ b/src/main/java/model/FireFighterScenario.java
@@ -3,12 +3,16 @@ package model;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Iterator;
+import java.util.Collections;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Random;
+import java.util.Random;
 
 import util.Matrix;
 import util.Position;
 import util.PositionUtil;
+import util.PositionUtil;
 
 public class FireFighterScenario extends EntityScenario implements Board<Square> {
 
@@ -17,19 +21,25 @@ public class FireFighterScenario extends EntityScenario implements Board<Square>
 
   private int initialFireCount;
   private int initialFireFightersCount;
+  private int intialCloudCount;
+  private int initialMoutainCount;
 
-  public FireFighterScenario(int columns, int rows, int initialFireCount, int initialFireFightersCount) {
+  public FireFighterScenario(int columns, int rows, int initialFireCount, int initialFireFightersCount, int initialCloudCount, int initialMoutainCount) {
     this.matrix = new Matrix<Square>(columns, rows);
     this.initialFireCount = initialFireCount;
     this.initialFireFightersCount = initialFireFightersCount;
+    this.intialCloudCount = initialCloudCount;
+    this.initialMoutainCount = initialMoutainCount;
     initScenario(matrix);
-    placeInitialActors(initialFireCount, initialFireFightersCount);
+    placeInitialActors(initialFireCount, initialFireFightersCount, initialCloudCount, initialMoutainCount);
     this.step = 0;
   }
 
-  private void placeInitialActors(int initialFireCount, int initialFireFightersCount) {
+  private void placeInitialActors(int initialFireCount, int initialFireFightersCount, int initialCloudCount, int initialMoutainCount) {
     int fireCount = 0;
     int fireFighterCount = 0;
+    int cloudCount = 0;
+    int moutainCount = 0;
     int chance = 5; // Chance initiale en pourcentage
     Random random = new Random();
     List<Position> positions = new ArrayList<>();
@@ -39,7 +49,7 @@ public class FireFighterScenario extends EntityScenario implements Board<Square>
       }
     }
 
-    while (fireCount < initialFireCount || fireFighterCount < initialFireFightersCount) {
+    while (fireCount < initialFireCount || fireFighterCount < initialFireFightersCount || cloudCount < intialCloudCount) {
       Collections.shuffle(positions); // Mélange les positions pour un parcours aléatoire
 
       for (Position pos : positions) {
@@ -47,7 +57,7 @@ public class FireFighterScenario extends EntityScenario implements Board<Square>
           if (fireCount < initialFireCount && random.nextInt(100) < chance) {
             setSquare(new Square(pos, new Fire(pos, this, 1)));
             fireCount++;
-            if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount) {
+            if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount && cloudCount == initialCloudCount  && moutainCount == initialMoutainCount) {
               return;
             }
             continue;
@@ -56,7 +66,23 @@ public class FireFighterScenario extends EntityScenario implements Board<Square>
           if (fireFighterCount < initialFireFightersCount && random.nextInt(100) < chance) {
             setSquare(new Square(pos, new FireFighter(pos, this, 1)));
             fireFighterCount++;
-            if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount) {
+            if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount && cloudCount == initialCloudCount  && moutainCount == initialMoutainCount) {
+              return;
+            }
+          }
+
+          if (cloudCount < intialCloudCount && random.nextInt(100) < chance) {
+            setSquare(new Square(pos, new Cloud(pos, this, 1)));
+            cloudCount++;
+            if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount && cloudCount == initialCloudCount  && moutainCount == initialMoutainCount) {
+              return;
+            }
+          }
+
+          if (moutainCount < initialMoutainCount && random.nextInt(100) < chance) {
+            setSquare(new Square(pos, new Mountain(pos, 1)));
+            moutainCount++;
+            if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount && cloudCount == initialCloudCount && moutainCount == initialMoutainCount) {
               return;
             }
           }
@@ -182,7 +208,7 @@ public class FireFighterScenario extends EntityScenario implements Board<Square>
     step = 0;
     matrix.clear();
     initScenario(matrix);
-    placeInitialActors(initialFireCount, initialFireFightersCount);
+    placeInitialActors(initialFireCount, initialFireFightersCount, intialCloudCount, initialMoutainCount);
   }
 
   public int stepNumber() {
diff --git a/src/main/java/model/Mountain.java b/src/main/java/model/Mountain.java
new file mode 100644
index 0000000000000000000000000000000000000000..4962526a16a524ccd8b34c9b934e3263a69362a0
--- /dev/null
+++ b/src/main/java/model/Mountain.java
@@ -0,0 +1,64 @@
+package model;
+
+import javafx.scene.paint.Color;
+import util.Position;
+
+import java.util.List;
+
+public class Mountain implements Entity{
+    private final int priority = 3;
+    Position position;
+    private int age;
+    private final Color viewColor = Color.YELLOW;
+
+    public Mountain(Position p ){
+        this.position = p;
+    }
+
+
+    public Mountain(Position p ,  int age){
+        this.position = p;
+        this.age = age;
+    }
+
+    @Override
+    public List<Position> nextTurn(Board<Square> board) {
+        return List.of();
+    }
+
+    @Override
+    public Position getPosition() {
+        return this.position;
+    }
+
+    @Override
+    public void setPosition(Position p) {
+        this.position = p;
+
+    }
+
+    @Override
+    public int getAge() {
+        return this.age;
+    }
+
+    @Override
+    public void setAge(int age) {
+        this.age = age;
+    }
+
+    @Override
+    public void incrementAge() {
+        this.age += 1;
+    }
+
+    @Override
+    public Color getViewColor() {
+        return this.viewColor;
+    }
+
+    @Override
+    public int getPriority() {
+        return this.priority;
+    }
+}
diff --git a/src/main/java/model/Scenario.java b/src/main/java/model/Scenario.java
index d491a6542975411890741666160ca88246e544ea..03d319a9325df2547e011ba58d5243e34f116b13 100644
--- a/src/main/java/model/Scenario.java
+++ b/src/main/java/model/Scenario.java
@@ -4,4 +4,5 @@ import util.Matrix;
 
 public interface Scenario {
     public void initScenario(Matrix<Square> matrix);
-}
+
+}
\ No newline at end of file
diff --git a/src/main/java/model/Square.java b/src/main/java/model/Square.java
index cdd616d8778e532772c5821122a4d975dc1ef4d5..779884b2442587710d96ef24ee0c867502f0f369 100644
--- a/src/main/java/model/Square.java
+++ b/src/main/java/model/Square.java
@@ -77,6 +77,9 @@ public class Square {
             for (Entity e : entities) {
                 Color color = e.getViewColor();
                 if (color != null) {
+                    if(sumRed == 255 & sumGreen == 255 & sumBlue == 255){
+                        continue;
+                    }
                     sumRed += color.getRed();
                     sumGreen += color.getGreen();
                     sumBlue += color.getBlue();
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
index 4c36d97709b342e457203c75d081fc5cc1955c0f..1bd3e9a86156ea98b4650fee627b4411b90ff3fd 100644
--- a/src/main/java/module-info.java
+++ b/src/main/java/module-info.java
@@ -2,7 +2,8 @@ module firefighter {
   requires javafx.controls;
   requires javafx.fxml;
   requires javafx.graphics;
-  opens controller to javafx.fxml;
+    requires java.sql;
+    opens controller to javafx.fxml;
   exports app;
   opens app to javafx.fxml;
 }
diff --git a/src/main/java/util/Matrix.java b/src/main/java/util/Matrix.java
index 5bbccfa13e21061d30fd50baf111cacdff888d67..9fb77030ffe0228fcba57d442f8611bc6c8f42ad 100644
--- a/src/main/java/util/Matrix.java
+++ b/src/main/java/util/Matrix.java
@@ -1,5 +1,6 @@
 package util;
 
+
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.NoSuchElementException;