From 1ecf9f7aa817aa7e4db380e368df1f2d43fbdf97 Mon Sep 17 00:00:00 2001
From: m23022217 <ilyas.maazouz@etu.univ-amu.fr>
Date: Mon, 20 Nov 2023 15:48:33 +0100
Subject: [PATCH] FTHFGHFGHFGHFH

---
 src/main/java/controller/Controller.java    | 15 ++++--
 src/main/java/newmodel/Extinguisher.java    |  8 ++-
 src/main/java/newmodel/Fboard.java          | 56 ++++++++++++++-------
 src/main/java/newmodel/Fire.java            | 32 +++++++-----
 src/main/java/newmodel/FireFighter.java     | 16 ++++--
 src/main/java/newmodel/FireManager.java     | 15 ------
 src/main/java/newmodel/MotoFireFighter.java |  8 ++-
 src/main/java/newmodel/Nuages.java          | 12 +++--
 src/main/java/newmodel/Pompiers.java        | 17 +++++--
 src/main/java/newmodel/item.java            |  7 ++-
 10 files changed, 123 insertions(+), 63 deletions(-)
 delete mode 100644 src/main/java/newmodel/FireManager.java

diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java
index 462ef39..d31718d 100644
--- a/src/main/java/controller/Controller.java
+++ b/src/main/java/controller/Controller.java
@@ -15,6 +15,7 @@ import javafx.util.Pair;
 import model.Board;
 import model.ModelElement;
 import model.FirefighterBoard;
+import newmodel.*;
 import util.Position;
 import view.Grid;
 import view.ViewElement;
@@ -40,7 +41,7 @@ public class Controller {
   @FXML
   private Grid<ViewElement> grid;
   private Timeline timeline;
-  private Board<List<ModelElement>> board;
+  private Fboard board;
 
 
   //this function initialise the frame of the execution of updateboard function and adds the play&pause buttons
@@ -58,8 +59,8 @@ public class Controller {
 
   //this function checks if our model of the class firefighterboard is not null and raises an exception if so
   // and affect the model to board
-  private void setModel(FirefighterBoard firefighterBoard) {
-    this.board = requireNonNull(firefighterBoard, "firefighter.model is null");
+  private void setModel(Fboard board) {
+    this.board = requireNonNull(board, "firefighter.model is null");
   }
 
   //this function is a combination of multiple functions that re update the board elements get the new positions and colors of new elements
@@ -149,7 +150,13 @@ public class Controller {
   public void initialize(int squareWidth, int squareHeight, int columnCount,
                                 int rowCount, int initialFireCount, int initialFirefighterCount) {
     grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight);
-    this.setModel(new FirefighterBoard(columnCount, rowCount, initialFireCount, initialFirefighterCount));
+    List<item> items= new ArrayList<>();
+    Fboard b=new Fboard(columnCount,rowCount);
+    List<item> list= new ArrayList<>();
+    list.add(new Fire(initialFireCount,b));
+    list.add(new FireFighter(initialFirefighterCount,b));
+    b.setItems(list);
+    this.setModel(b);
     repaintGrid();
   }
 
diff --git a/src/main/java/newmodel/Extinguisher.java b/src/main/java/newmodel/Extinguisher.java
index e9f7c6e..ec4eccd 100644
--- a/src/main/java/newmodel/Extinguisher.java
+++ b/src/main/java/newmodel/Extinguisher.java
@@ -1,17 +1,21 @@
 package newmodel;
+import model.ModelElement;
 import newmodel.Fboard;
 import util.Position;
 import java.util.List;
 public abstract class Extinguisher implements item {
 
+        final int ID=1;
+
+
         public abstract List<Position> update();
         public abstract void extinguish(Position position);
         public abstract void setState();
-        public abstract String getState();
+        public abstract ModelElement getState();
 
         public abstract void initialize();
         public abstract List<Position> getPositions();
 
     }
 
-}
+
diff --git a/src/main/java/newmodel/Fboard.java b/src/main/java/newmodel/Fboard.java
index 6199065..059764b 100644
--- a/src/main/java/newmodel/Fboard.java
+++ b/src/main/java/newmodel/Fboard.java
@@ -13,15 +13,17 @@ public class Fboard {
 
     private List<item> items;
 
-    public Fboard(int columnCount, int rowCount, Fire fire ,List<item> items) {
+    public Fboard(int columnCount, int rowCount) {
         this.columnCount = columnCount;
         this.rowCount = rowCount;
-        this.items=items;
-        }
+    }
 
     public int rowCount() {
         return rowCount;
     }
+    public void setItems(List<item> s){
+        this.items=s;
+    }
 
     public int columnCount() {
         return columnCount;
@@ -29,8 +31,16 @@ public class Fboard {
 
     public List<Position> updateToNextGeneration() {
         List<Position> result = new ArrayList<>();
-        for(item item : items)
-           result.addAll(item.update());
+        for(item item : items){
+            if(item.getID()==1){
+                result.addAll(item.update());
+            }
+        }
+        for(item item : items){
+            if(item.getID()==0 && step % 2 ==0){
+                result.addAll(item.update());
+            }
+        }
         step++;
         return result;
     }
@@ -43,9 +53,15 @@ public class Fboard {
         initializeElements();
     }
     public void initializeElements() {
-        fire.initialize();
-        for(item e: extinguishers) {
-            e.initialize();
+        for(item e: items) {
+            if(e.getID()==0){
+              e.initialize();
+            }
+        }
+        for(item e:items){
+            if(e.getID()==1){
+                e.initialize();
+            }
         }
     }
     public int getStep(){
@@ -59,8 +75,14 @@ public class Fboard {
         return this.rowCount;
     }
 
-    public FireManager getFire(){
-        return this.fire;
+    public Fire getFire() {
+        Fire x = null;
+        for (item e : items) {
+            if(e.getID()==0){
+                x= (Fire) e;
+            }
+        }
+        return x;
     }
     public List<Position> neighbors(Position position) {
         List<Position> list = new ArrayList<>();
@@ -79,7 +101,7 @@ public class Fboard {
             firstMove.put(initialMove, initialMove);
         while (!toVisit.isEmpty()) {
             Position current = toVisit.poll();
-            if (this.fire.getFirepositions().contains(current))
+            if (this.getFire().getPositions().contains(current))
                 return firstMove.get(current);
             for (Position adjacent : neighbors(current)) {
                 if (seen.contains(adjacent)) continue;
@@ -91,15 +113,15 @@ public class Fboard {
         return position;
     }
 
-    public List<String> getState(Position position){
-        List<String> result = new ArrayList<>();
-        for (Extinguisher e :extinguishers){
-            if (e.getPositions().equals(position)){
+    public List<ModelElement> getState(Position position){
+        List<ModelElement> result = new ArrayList<>();
+        for (item e :items){
+            if (e.getPositions().equals(position) && e.getID()==1){
                 result.add(e.getState());
             }
         }
-        if(fire.containsFire(position))
-            result.add(fire.getState());
+        if(getFire().containsFire(position))
+            result.add(getFire().getState());
         return result;
     }
 
diff --git a/src/main/java/newmodel/Fire.java b/src/main/java/newmodel/Fire.java
index 2876058..3e86218 100644
--- a/src/main/java/newmodel/Fire.java
+++ b/src/main/java/newmodel/Fire.java
@@ -1,18 +1,21 @@
 package newmodel;
 
+import model.ModelElement;
 import util.Position;
 
 import java.util.*;
 
-public class Fire extends FireManager {
+public class Fire implements item{
 
     private final int initialFireCount;
 
-    private Set<Position> firePositions;
-    private String state;
+    private List<Position> firePositions;
+    private ModelElement state;
     private final Random randomGenerator = new Random();
 
     private final Fboard board;
+    private final int ID=0;
+
     public Fire(int initialFireCount,Fboard b) {
         this.initialFireCount = initialFireCount;
         this.board=b;
@@ -21,32 +24,41 @@ public class Fire extends FireManager {
 
     public List<Position> update() {
         List<Position> result = new ArrayList<>();
-        if (board.getStep() % 2 == 0) {
             List<Position> newFirePositions = new ArrayList<>();
             for (Position fire : firePositions) {
                 newFirePositions.addAll(board.neighbors(fire));
             }
             firePositions.addAll(newFirePositions);
             result.addAll(newFirePositions);
-        }
+
         return result;
 
     }
 
     public void setState() {
-        state="Fire";
+        state=ModelElement.FIRE;
     }
 
 
-    public String getState() {
+    public ModelElement getState() {
         return state;
     }
 
+    public int getID() {
+        return this.ID;
+    }
+
     public void initialize() {
-        firePositions = new HashSet<>();
+        firePositions = new ArrayList<>();
         for (int index = 0; index < initialFireCount; index++)
             firePositions.add(randomPosition());
     }
+
+    @Override
+    public List<Position> getPositions() {
+        return firePositions;
+    }
+
     public Position randomPosition() {
         return new Position(randomGenerator.nextInt(board.rowCount), randomGenerator.nextInt(board.columnCount));
     }
@@ -55,11 +67,7 @@ public class Fire extends FireManager {
         firePositions.remove(position);
     }
 
-    public Set<Position> getFirepositions(){
-        return firePositions;
-    }
 
-    @Override
     public boolean containsFire(Position position) {
         if (firePositions.contains(position)) {
             return true;
diff --git a/src/main/java/newmodel/FireFighter.java b/src/main/java/newmodel/FireFighter.java
index 82a638d..c42ee69 100644
--- a/src/main/java/newmodel/FireFighter.java
+++ b/src/main/java/newmodel/FireFighter.java
@@ -1,11 +1,12 @@
 package newmodel;
+import model.ModelElement;
 import util.Position;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Random;
 
-public class FireFighter implements Extinguisher {
-    private String state;
+public class FireFighter extends Extinguisher {
+    private ModelElement state;
     private final Fboard board;
     private List<Position> firefighterPositions;
     private final Random randomGenerator = new Random();
@@ -27,7 +28,7 @@ public class FireFighter implements Extinguisher {
                 result.add(firefighterPosition);
                 result.add(newFirefighterPosition);
                 List<Position> neighborFirePositions = board.neighbors(newFirefighterPosition).stream()
-                        .filter(board.getFire().getFirepositions()::contains).toList(); //this code create a list filtred with only the fire positions that are close to the newfirefighter position
+                        .filter(board.getFire().getPositions()::contains).toList(); //this code create a list filtred with only the fire positions that are close to the newfirefighter position
                 for(Position firePosition : neighborFirePositions) //and exist in the firepositions list also
                     extinguish(firePosition);
                 result.addAll(neighborFirePositions);
@@ -43,14 +44,19 @@ public class FireFighter implements Extinguisher {
 
 
     public void setState() {
-        state="FireFighter";
+        state= ModelElement.FIREFIGHTER;
     }
 
 
-    public String getState() {
+    public ModelElement getState() {
         return state;
     }
 
+    @Override
+    public int getID() {
+        return this.ID;
+    }
+
     public void initialize() {
         firefighterPositions = new ArrayList<>();
         for (int index = 0; index < initialFirefighterCount; index++)
diff --git a/src/main/java/newmodel/FireManager.java b/src/main/java/newmodel/FireManager.java
deleted file mode 100644
index 096730c..0000000
--- a/src/main/java/newmodel/FireManager.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package newmodel;
-
-import util.Position;
-
-import java.util.List;
-import java.util.Set;
-
-public abstract class FireManager implements item{
-    public abstract List<Position> update();
-    public abstract void extinguish(Position position);
-    public abstract Set<Position> getFirepositions();
-    public abstract boolean containsFire(Position position);
-    public abstract void setState();
-    public abstract String getState();
-}
diff --git a/src/main/java/newmodel/MotoFireFighter.java b/src/main/java/newmodel/MotoFireFighter.java
index bc4e60f..099e1ee 100644
--- a/src/main/java/newmodel/MotoFireFighter.java
+++ b/src/main/java/newmodel/MotoFireFighter.java
@@ -1,5 +1,6 @@
 package newmodel;
 
+import model.ModelElement;
 import util.Position;
 
 import java.util.List;
@@ -21,10 +22,15 @@ public class MotoFireFighter extends Extinguisher {
     }
 
     @Override
-    public String getState() {
+    public ModelElement getState() {
         return null;
     }
 
+    @Override
+    public int getID() {
+        return 0;
+    }
+
     @Override
     public void initialize() {
 
diff --git a/src/main/java/newmodel/Nuages.java b/src/main/java/newmodel/Nuages.java
index fa2182e..d3e3c6a 100644
--- a/src/main/java/newmodel/Nuages.java
+++ b/src/main/java/newmodel/Nuages.java
@@ -1,5 +1,6 @@
 package newmodel;
 
+import model.ModelElement;
 import util.Position;
 
 import java.util.ArrayList;
@@ -7,7 +8,7 @@ import java.util.List;
 import java.util.Random;
 
 public class Nuages extends Extinguisher{
-    private String state;
+    private ModelElement state;
     private final Fboard board;
     private List<Position> nuagesPositions;
     private final Random randomGenerator = new Random();
@@ -42,14 +43,19 @@ public class Nuages extends Extinguisher{
 
 
     public void setState() {
-     state="Nuage";
+     state=ModelElement.FIREFIGHTER;
     }
 
 
-    public String getState() {
+    public ModelElement getState() {
         return state;
     }
 
+    @Override
+    public int getID() {
+        return 0;
+    }
+
 
     public void initialize() {
         nuagesPositions = new ArrayList<>();
diff --git a/src/main/java/newmodel/Pompiers.java b/src/main/java/newmodel/Pompiers.java
index 2cb99ea..3664e48 100644
--- a/src/main/java/newmodel/Pompiers.java
+++ b/src/main/java/newmodel/Pompiers.java
@@ -1,5 +1,6 @@
 package newmodel;
 
+import model.ModelElement;
 import util.Position;
 
 import java.util.List;
@@ -7,7 +8,7 @@ import java.util.Random;
 
 
 public class Pompiers extends Extinguisher{
-    private String state;
+    private ModelElement state;
     private final Fboard board;
     private List<Position> Pompiers;
     private final Random randomGenerator = new Random();
@@ -26,20 +27,30 @@ public class Pompiers extends Extinguisher{
     }
 
 
+    @Override
+    public List<Position> update() {
+        return null;
+    }
+
     public void extinguish(Position position) {
 
     }
 
 
     public void setState() {
-        this.state="Pompiers";
+        this.state=ModelElement.FIREFIGHTER;
     }
 
 
-    public String getState() {
+    public ModelElement getState() {
         return state;
     }
 
+    @Override
+    public int getID() {
+        return 0;
+    }
+
 
     public void initialize() {
 
diff --git a/src/main/java/newmodel/item.java b/src/main/java/newmodel/item.java
index 8fd8c68..d4d53c7 100644
--- a/src/main/java/newmodel/item.java
+++ b/src/main/java/newmodel/item.java
@@ -1,5 +1,6 @@
 package newmodel;
 
+import model.ModelElement;
 import util.Position;
 
 import java.util.List;
@@ -7,5 +8,9 @@ import java.util.List;
 public interface item {
     public List<Position> update();
     void setState();
-    String getState();
+    public ModelElement getState();
+
+    public int getID();
+    public void initialize();
+    public List<Position> getPositions();
 }
-- 
GitLab