From cf33c3bd623fda2a3b8e31809d0dccecbf119a55 Mon Sep 17 00:00:00 2001
From: melizzzz <152108637+melizzzz@users.noreply.github.com>
Date: Tue, 19 Nov 2024 16:03:02 +0100
Subject: [PATCH] Ajout des montagnes

---
 src/main/java/app/SimulatorApplication.java  |  3 +-
 src/main/java/controller/Controller.java     |  4 +-
 src/main/java/model/Cloud.java               |  2 +
 src/main/java/model/EmptyEntity.java         |  5 +-
 src/main/java/model/EmptySquare.java         |  6 ++
 src/main/java/model/Fire.java                |  1 +
 src/main/java/model/FireFighter.java         | 10 ++-
 src/main/java/model/FireFighterScenario.java | 25 +++++---
 src/main/java/model/Mountain.java            | 64 ++++++++++++++++++++
 9 files changed, 103 insertions(+), 17 deletions(-)
 create mode 100644 src/main/java/model/Mountain.java

diff --git a/src/main/java/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java
index d90b839..0b2081c 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 = 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;
@@ -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_MOUNTAIN_COUNT);
   }
 
   private void showScene() {
diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java
index ab6b16b..5996272 100644
--- a/src/main/java/controller/Controller.java
+++ b/src/main/java/controller/Controller.java
@@ -122,9 +122,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 initialmountaincount) {
     grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight);
-    this.setModel(new FireFighterScenario(columnCount, rowCount, initialFireCount, initialFirefighterCount, initialcloudCount));
+    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
index c8f74ff..52ad4a1 100644
--- a/src/main/java/model/Cloud.java
+++ b/src/main/java/model/Cloud.java
@@ -33,6 +33,8 @@ public class Cloud implements Entity{
     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));
 
diff --git a/src/main/java/model/EmptyEntity.java b/src/main/java/model/EmptyEntity.java
index 6a916b8..69ce927 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
index 1fff9c1..aa7c5de 100644
--- a/src/main/java/model/EmptySquare.java
+++ b/src/main/java/model/EmptySquare.java
@@ -11,6 +11,7 @@ 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;
@@ -55,4 +56,9 @@ public class EmptySquare implements Entity {
     public void setAge(int age) {
         this.age = age;
     }
+
+    @Override
+    public int getPriority(){
+        return this.priotity;
+    }
 }
diff --git a/src/main/java/model/Fire.java b/src/main/java/model/Fire.java
index 7028c9c..b3d5780 100644
--- a/src/main/java/model/Fire.java
+++ b/src/main/java/model/Fire.java
@@ -32,6 +32,7 @@ public class Fire implements Entity {
         if (board.getStepNumber() % 2 == 0)
             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() && !b.getStates(p).getEntities().contains(Cloud.class)) {
                 if (b.getStates(p).getMaxAge() < b.getStepNumber()
diff --git a/src/main/java/model/FireFighter.java b/src/main/java/model/FireFighter.java
index 8ce37e2..e206765 100644
--- a/src/main/java/model/FireFighter.java
+++ b/src/main/java/model/FireFighter.java
@@ -1,12 +1,9 @@
 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;
-import util.PositionUtil;
 
 public class FireFighter implements Entity {
     private int age;
@@ -29,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()
diff --git a/src/main/java/model/FireFighterScenario.java b/src/main/java/model/FireFighterScenario.java
index 091276f..1e5a5f1 100644
--- a/src/main/java/model/FireFighterScenario.java
+++ b/src/main/java/model/FireFighterScenario.java
@@ -22,21 +22,24 @@ 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, int initialCloudCount) {
+  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, initialCloudCount);
+    placeInitialActors(initialFireCount, initialFireFightersCount, initialCloudCount, initialMoutainCount);
     this.step = 0;
   }
 
-  private void placeInitialActors(int initialFireCount, int initialFireFightersCount, int initialCloudCount) {
+  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<>();
@@ -54,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 && cloudCount == initialCloudCount) {
+            if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount && cloudCount == initialCloudCount  && moutainCount == initialMoutainCount) {
               return;
             }
             continue;
@@ -63,7 +66,7 @@ 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 && cloudCount == initialCloudCount) {
+            if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount && cloudCount == initialCloudCount  && moutainCount == initialMoutainCount) {
               return;
             }
           }
@@ -71,7 +74,15 @@ public class FireFighterScenario extends EntityScenario implements Board<Square>
           if (cloudCount < intialCloudCount && random.nextInt(100) < chance) {
             setSquare(new Square(pos, new Cloud(pos, this, 1)));
             cloudCount++;
-            if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount && cloudCount == initialCloudCount) {
+            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;
             }
           }
@@ -198,7 +209,7 @@ public class FireFighterScenario extends EntityScenario implements Board<Square>
     step = 0;
     matrix.clear();
     initScenario(matrix);
-    placeInitialActors(initialFireCount, initialFireFightersCount, intialCloudCount);
+    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 0000000..e9587e2
--- /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 = position;
+
+    }
+
+    @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;
+    }
+}
-- 
GitLab