diff --git a/src/main/java/model/FireManager.java b/src/main/java/model/FireManager.java index 213e11c1ef32677c065ff13891b2ddb8b18dcd83..93b0299eb840fa28a3fa4d9e7c6b777917f93b33 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 4867898ce03a7fac80ce34585308af0f6d76b2ac..ed16ed1465ca78a590cd05a9e438baaf950101ba 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;