From 61b24491b18b889abcc238f860d9fa222676be8a Mon Sep 17 00:00:00 2001 From: a23022716 <celia.arezki.1@etu.univ-amu.fr> Date: Fri, 22 Nov 2024 08:56:51 +0100 Subject: [PATCH] modification of spreadfire methode to add a state for "rocky areas" (rocailles) and a counter for each cell --- src/main/java/model/FireManager.java | 34 ++++++++++++++++++++++++++-- src/main/java/view/ViewElement.java | 2 +- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/main/java/model/FireManager.java b/src/main/java/model/FireManager.java index 213e11c..93b0299 100644 --- a/src/main/java/model/FireManager.java +++ b/src/main/java/model/FireManager.java @@ -42,15 +42,30 @@ public class FireManager implements FireBehavior, FireProperties{ int rows = grid.length; int columns = grid[0].length; + // Créez un tableau pour suivre les tours avant que le feu se propage sur les rocailles + int[][] fireCooldown = new int[rows][columns]; + + // Initialisation du tableau de cooldown des rocailles à 0 + for (int i = 0; i < rows; i++) { + for (int j = 0; j < columns; j++) { + if (grid[i][j] == ViewElement.ROCKY) { + fireCooldown[i][j] = 4; // Le feu prend 4 tours pour se propager sur les rocailles + } else { + fireCooldown[i][j] = 0; // Aucune attente pour les autres cases + } + } + } + ViewElement[][] newGrid = new ViewElement[rows][columns]; for (int i = 0; i < rows; i++) { System.arraycopy(grid[i], 0, newGrid[i], 0, columns); } + // Propagation du feu 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 + // Propager le feu sur les voisins si possible for (Position neighbor : getNeighbors(i, j, rows, columns)) { if (grid[neighbor.row()][neighbor.column()] == ViewElement.EMPTY) { newGrid[neighbor.row()][neighbor.column()] = ViewElement.FIRE; @@ -59,16 +74,31 @@ public class FireManager implements FireBehavior, FireProperties{ if (grid[neighbor.row()][neighbor.column()] == ViewElement.MOUNTAIN) { newGrid[neighbor.row()][neighbor.column()] = ViewElement.MOUNTAIN; } + // Propagation du feu sur les rocailles après 4 tours + if (grid[neighbor.row()][neighbor.column()] == ViewElement.ROCKY && fireCooldown[neighbor.row()][neighbor.column()] == 0) { + newGrid[neighbor.row()][neighbor.column()] = ViewElement.FIRE; + } } } } } - // Mise à jour de la grille + + // Mise à jour de la grille après propagation for (int i = 0; i < rows; i++) { System.arraycopy(newGrid[i], 0, grid[i], 0, columns); } + + // Décrémenter le cooldown des rocailles chaque tour + for (int i = 0; i < rows; i++) { + for (int j = 0; j < columns; j++) { + if (fireCooldown[i][j] > 0) { + fireCooldown[i][j]--; // Décrémenter le compteur de cooldown + } + } + } } + 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)); diff --git a/src/main/java/view/ViewElement.java b/src/main/java/view/ViewElement.java index 4867898..ed16ed1 100644 --- a/src/main/java/view/ViewElement.java +++ b/src/main/java/view/ViewElement.java @@ -3,7 +3,7 @@ package view; import javafx.scene.paint.Color; public enum ViewElement { - FIREFIGHTER(Color.BLUE), FIRE(Color.RED), EMPTY(Color.WHITE) , CLOUD(Color.GRAY), MOUNTAIN(Color.GRAY); + FIREFIGHTER(Color.BLUE), FIRE(Color.RED), EMPTY(Color.WHITE) , CLOUD(Color.GRAY), MOUNTAIN(Color.GRAY), ROCKY(Color.GRAY); final Color color; ViewElement(Color color) { this.color = color; -- GitLab