diff --git a/src/main/java/model/ClassicFireFighter.java b/src/main/java/model/ClassicFireFighter.java deleted file mode 100644 index 13fefbecb116637cb28375a542138efd742ebf6f..0000000000000000000000000000000000000000 --- a/src/main/java/model/ClassicFireFighter.java +++ /dev/null @@ -1,29 +0,0 @@ -package model; - -import util.Position; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -public class ClassicFireFighter extends FirefighterManager{ - public ClassicFireFighter(List<Position> firefighterPositions) { - super(firefighterPositions); - } - @Override - public List<Position> updateFirefighters(int step, Map<Position, List<Position>> neighbors) { - List<Position> modifiedPositions = new ArrayList<>(); - for (Position firefighterPosition : firefighterPositions) { - Position newFirefighterPosition = moveToTarget(firefighterPosition, fireManager.getFirePosition(), neighbors); - setFirefighterPosition(firefighterPosition, newFirefighterPosition); - - if (fireManager.isOnFire(newFirefighterPosition)) { - extinguishFire(newFirefighterPosition); - } - - modifiedPositions.add(firefighterPosition); - modifiedPositions.add(newFirefighterPosition); - } - return modifiedPositions; - } -} diff --git a/src/main/java/model/FireBehavior.java b/src/main/java/model/FireBehavior.java deleted file mode 100644 index bfa1aca7a681982c92fc20b9106ce0b83ffd7f9b..0000000000000000000000000000000000000000 --- a/src/main/java/model/FireBehavior.java +++ /dev/null @@ -1,11 +0,0 @@ -package model; - -import util.Position; - -import java.util.List; -import java.util.Map; - -public interface FireBehavior { - public List<Position> updateFires(int step, Map<Position, List<Position>> neighbors); - void extinguishFire(Position position); -} diff --git a/src/main/java/model/FireManager.java b/src/main/java/model/FireManager.java deleted file mode 100644 index 93b0299eb840fa28a3fa4d9e7c6b777917f93b33..0000000000000000000000000000000000000000 --- a/src/main/java/model/FireManager.java +++ /dev/null @@ -1,127 +0,0 @@ -package model; - -import util.Position; -import view.ViewElement; - -import java.util.*; - -public class FireManager implements FireBehavior, FireProperties{ - private Set<Position> firePositions; - private FirefighterManager firefighterManager; - - public FireManager(Set<Position> firePositions,FirefighterManager firefighterManager) { - this.firePositions = firePositions; - this.firefighterManager=firefighterManager; - - } - - // Initialize fire positions randomly - public void initializeFires(int fireCount, int rowCount, int columnCount, Random random) { - firePositions.clear(); - for (int i = 0; i < fireCount; i++) { - firePositions.add(new Position(random.nextInt(rowCount), random.nextInt(columnCount))); - } - } - @Override - public List<Position> updateFires(int step, Map<Position, List<Position>> neighbors) { - List<Position> newFirePositions = new ArrayList<>(); - if (step % 2 == 0) { // Le feu se propage tous les deux pas - for (Position fire : firePositions) { - for (Position neighbor : neighbors.get(fire)) { - // Vérifier si le voisin est déjà en feu ou s'il y a un pompier - if (!firePositions.contains(neighbor) && !firefighterManager.getFirefighterPositions().contains(neighbor)) { - newFirePositions.add(neighbor); - } - } - } - firePositions.addAll(newFirePositions); - } - return newFirePositions; - } - public void spreadFire(ViewElement[][] grid) { - 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) { - // 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; - } - // Empêcher la propagation sur les montagnes - 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 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)); - 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 - @Override - public void extinguishFire(Position position) { - firePositions.remove(position); - } - // Query if a position is on fire - @Override - public boolean isOnFire(Position position) { - return firePositions.contains(position); - } - @Override - public Set<Position> getFirePosition() - { return new HashSet<>(firePositions);} - -} diff --git a/src/main/java/model/FireProperties.java b/src/main/java/model/FireProperties.java deleted file mode 100644 index 906756108d3c70143a50f6bc9aba89d37e8c658b..0000000000000000000000000000000000000000 --- a/src/main/java/model/FireProperties.java +++ /dev/null @@ -1,10 +0,0 @@ -package model; - -import util.Position; - -import java.util.Set; - -public interface FireProperties { - public boolean isOnFire(Position position); - Set<Position> getFirePosition(); -} diff --git a/src/main/java/model/FirefighterBehavior.java b/src/main/java/model/FirefighterBehavior.java deleted file mode 100644 index 89773dcfad96ff72878698e316b9b92c4b3fa22b..0000000000000000000000000000000000000000 --- a/src/main/java/model/FirefighterBehavior.java +++ /dev/null @@ -1,14 +0,0 @@ -package model; - -import util.Position; - -import java.util.Collection; -import java.util.List; -import java.util.Map; - -public interface FirefighterBehavior { - Position moveToTarget(Position currentPosition, Collection<Position> firePositions, - Map<Position, List<Position>> neighbors); // Déplacer un pompier vers une cible. - void extinguishFire(Position firePosition); // Éteindre un feu à une position donnée. - // public List<Position> updateFirefighters(int step, Map<Position, List<Position>> neighbors); -} diff --git a/src/main/java/model/FirefighterManager.java b/src/main/java/model/FirefighterManager.java deleted file mode 100644 index ed4fd9bbf2e6cfbeef39252f553e1ddb30810712..0000000000000000000000000000000000000000 --- a/src/main/java/model/FirefighterManager.java +++ /dev/null @@ -1,47 +0,0 @@ -package model; - -import util.Position; -import util.TargetStrategy; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; - -public abstract class FirefighterManager implements FirefighterBehavior, FirefighterProperties { - protected List<Position> firefighterPositions; - FireManager fireManager; - - public void setFireManager(FireManager fireManager) { - this.fireManager = fireManager; - } - - public FirefighterManager(List<Position> firefighterPositions) { - this.firefighterPositions = firefighterPositions; - } - - @Override - public Position moveToTarget(Position currentPosition, Collection<Position> firePositions, Map<Position, List<Position>> neighbors) { - TargetStrategy targetStrategy = new TargetStrategy(); - return targetStrategy.neighborClosestToTarget(currentPosition, firePositions, neighbors); - } - - @Override - public void extinguishFire(Position firePosition) { - fireManager.extinguishFire(firePosition); - } - - @Override - public List<Position> getFirefighterPositions() { - return firefighterPositions; - } - - @Override - public void setFirefighterPosition(Position oldPosition, Position newPosition) { - firefighterPositions.remove(oldPosition); - firefighterPositions.add(newPosition); - } - - public abstract List<Position> updateFirefighters(int step, Map<Position, List<Position>> neighbors) ; - -} diff --git a/src/main/java/model/FirefighterProperties.java b/src/main/java/model/FirefighterProperties.java deleted file mode 100644 index b8cac29a8cb31901654f45af4f911b94d4c7d8cb..0000000000000000000000000000000000000000 --- a/src/main/java/model/FirefighterProperties.java +++ /dev/null @@ -1,10 +0,0 @@ -package model; - -import util.Position; - -import java.util.List; - -public interface FirefighterProperties { - List<Position> getFirefighterPositions(); - void setFirefighterPosition(Position oldPosition, Position newPosition); -} diff --git a/src/main/java/model/MotorizedFirefighter.java b/src/main/java/model/MotorizedFirefighter.java deleted file mode 100644 index 71edb72c600981ef91a2b1d524f7e2f87dadbe1f..0000000000000000000000000000000000000000 --- a/src/main/java/model/MotorizedFirefighter.java +++ /dev/null @@ -1,49 +0,0 @@ -package model; - -import util.Position; - -import java.util.*; - -public class MotorizedFirefighter extends FirefighterManager { - private Random random =new Random(); - public MotorizedFirefighter(List<Position> firefighterPositions) { - super(firefighterPositions); - } - - @Override - public List<Position> updateFirefighters(int step, Map<Position, List<Position>> neighbors) { - List<Position> modifiedPositions = new ArrayList<>(); - for (Position firefighterPosition : firefighterPositions) { - // Déplacement motorisé, on se déplace de deux cases - Position newFirefighterPosition = moveToTarget(firefighterPosition, fireManager.getFirePosition(), neighbors); - setFirefighterPosition(firefighterPosition, newFirefighterPosition); - - // Vérifier si un feu est à la nouvelle position et l'éteindre - if (fireManager.isOnFire(newFirefighterPosition)) { - extinguishFire(newFirefighterPosition); - } - - modifiedPositions.add(firefighterPosition); - modifiedPositions.add(newFirefighterPosition); - } - return modifiedPositions; - } - @Override - public Position moveToTarget(Position currentPosition, Collection<Position> firePositions, Map<Position, List<Position>> neighbors) { - // Logique spécifique pour le déplacement motorisé (deux cases) - List<Position> possibleMoves = new ArrayList<>(); - for (Position neighbor : neighbors.get(currentPosition)) { - for (Position secondNeighbor : neighbors.get(neighbor)) { - if (!secondNeighbor.equals(currentPosition)) { - possibleMoves.add(secondNeighbor); - } - } - } - - if (!possibleMoves.isEmpty()) { - return possibleMoves.get(random.nextInt(possibleMoves.size())); - } else { - return currentPosition; - } - } -} diff --git a/src/main/java/util/MotorizedStrategy.java b/src/main/java/util/MotorizedStrategy.java deleted file mode 100644 index 6f5b092c3764a2b2070a1ee8ab2c3c9b26d3eb10..0000000000000000000000000000000000000000 --- a/src/main/java/util/MotorizedStrategy.java +++ /dev/null @@ -1,22 +0,0 @@ -package util; - -import java.util.Collection; -import java.util.List; -import java.util.Map; - -public class MotorizedStrategy implements Strategy{ - @Override - public Position neighborClosestToTarget(Position position, Collection<Position> targets, Map<Position, List<Position>> neighbors) { - TargetStrategy normalStrategy = new TargetStrategy(); - Position firstMove = normalStrategy.neighborClosestToTarget(position, targets, neighbors); - - // Si un premier mouvement est trouvé, on simule un second déplacement - if (firstMove != null && neighbors.containsKey(firstMove)) { - return normalStrategy.neighborClosestToTarget(firstMove, targets, neighbors); - } - - return position; - } - - -}