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