From 2e6fc89a2f6f44d6a6db081633de5a67088430d3 Mon Sep 17 00:00:00 2001
From: a23022716 <celia.arezki.1@etu.univ-amu.fr>
Date: Fri, 22 Nov 2024 08:51:00 +0100
Subject: [PATCH] Add a spreadFire method to prevent fire from spreading across
 mountains.

---
 src/main/java/app/SimulatorMain.java |  1 +
 src/main/java/model/FireManager.java | 41 ++++++++++++++++++++++++++++
 2 files changed, 42 insertions(+)

diff --git a/src/main/java/app/SimulatorMain.java b/src/main/java/app/SimulatorMain.java
index f2e49f2..1520ca6 100644
--- a/src/main/java/app/SimulatorMain.java
+++ b/src/main/java/app/SimulatorMain.java
@@ -4,4 +4,5 @@ public class SimulatorMain {
   public static void main(String[] args){
     SimulatorApplication.main(args);
   }
+
 }
diff --git a/src/main/java/model/FireManager.java b/src/main/java/model/FireManager.java
index 17de582..213e11c 100644
--- a/src/main/java/model/FireManager.java
+++ b/src/main/java/model/FireManager.java
@@ -1,6 +1,7 @@
 package model;
 
 import util.Position;
+import view.ViewElement;
 
 import java.util.*;
 
@@ -37,6 +38,46 @@ public class FireManager implements FireBehavior, FireProperties{
         }
         return newFirePositions;
     }
+    public void spreadFire(ViewElement[][] grid) {
+        int rows = grid.length;
+        int columns = grid[0].length;
+
+        ViewElement[][] newGrid = new ViewElement[rows][columns];
+        for (int i = 0; i < rows; i++) {
+            System.arraycopy(grid[i], 0, newGrid[i], 0, columns);
+        }
+
+        for (int i = 0; i < rows; i++) {
+            for (int j = 0; j < columns; j++) {
+                if (grid[i][j] == ViewElement.FIRE) {
+                    // Tenter de propager le feu sur les voisins
+                    for (Position neighbor : getNeighbors(i, j, rows, columns)) {
+                        if (grid[neighbor.row()][neighbor.column()] == ViewElement.EMPTY) {
+                            newGrid[neighbor.row()][neighbor.column()] = ViewElement.FIRE;
+                        }
+                        // EmpĂȘcher la propagation sur les montagnes
+                        if (grid[neighbor.row()][neighbor.column()] == ViewElement.MOUNTAIN) {
+                            newGrid[neighbor.row()][neighbor.column()] = ViewElement.MOUNTAIN;
+                        }
+                    }
+                }
+            }
+        }
+        // Mise Ă  jour de la grille
+        for (int i = 0; i < rows; i++) {
+            System.arraycopy(newGrid[i], 0, grid[i], 0, columns);
+        }
+    }
+
+    private List<Position> getNeighbors(int row, int column, int rows, int columns) {
+        List<Position> neighbors = new ArrayList<>();
+        if (row > 0) neighbors.add(new Position(row - 1, column));
+        if (row < rows - 1) neighbors.add(new Position(row + 1, column));
+        if (column > 0) neighbors.add(new Position(row, column - 1));
+        if (column < columns - 1) neighbors.add(new Position(row, column + 1));
+        return neighbors;
+    }
+
 
 
     // Extinguish a fire at a specific position
-- 
GitLab