From 26c3bac09f5866e64ce7f5498a5f047420cd731f Mon Sep 17 00:00:00 2001 From: Sarah CHERCHEM <ls_cherchem@esi.dz> Date: Thu, 28 Nov 2024 20:59:49 +0100 Subject: [PATCH] BoardFireFighterBehavior : modify the methodeUpdate --- src/main/java/app/SimulatorApplication.java | 3 +- src/main/java/controller/Controller.java | 4 +-- .../java/model/BoardFireFighterBehavior.java | 33 ++++++++++++++++++- src/main/java/model/FirefighterBoard.java | 4 +-- src/main/java/model/MotorizedFireFighter.java | 30 ++++++++++------- 5 files changed, 57 insertions(+), 17 deletions(-) diff --git a/src/main/java/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java index fdd1f57..b902612 100644 --- a/src/main/java/app/SimulatorApplication.java +++ b/src/main/java/app/SimulatorApplication.java @@ -20,6 +20,7 @@ public class SimulatorApplication extends javafx.application.Application { public static final int INITIAL_FIRE_COUNT = 3; public static final int INITIAL_FIREFIGHTER_COUNT = 0; public static final int INITIAL_CLOUD_COUNT = 3; + public static final int INITIAL_MOTORIZED_COUNT = 3; private Stage primaryStage; private Parent view; @@ -45,7 +46,7 @@ public class SimulatorApplication extends javafx.application.Application { view = loader.load(); Controller controller = loader.getController(); controller.initialize(BOX_WIDTH, BOX_HEIGHT, COLUMN_COUNT, ROW_COUNT, - INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT,INITIAL_CLOUD_COUNT); + INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT,INITIAL_CLOUD_COUNT,INITIAL_MOTORIZED_COUNT); } private void showScene() { diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java index 3d202dd..aa67273 100644 --- a/src/main/java/controller/Controller.java +++ b/src/main/java/controller/Controller.java @@ -128,9 +128,9 @@ public class Controller { } public void initialize(int squareWidth, int squareHeight, int columnCount, - int rowCount, int initialFireCount, int initialFirefighterCount,int initialCloud) { + int rowCount, int initialFireCount, int initialFirefighterCount,int initialCloud,int initialMotorized) { grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight); - this.setModel(new FirefighterBoard(columnCount, rowCount, initialFireCount, initialFirefighterCount,initialCloud)); + this.setModel(new FirefighterBoard(columnCount, rowCount, initialFireCount, initialFirefighterCount,initialCloud,initialMotorized)); repaintGrid(); } diff --git a/src/main/java/model/BoardFireFighterBehavior.java b/src/main/java/model/BoardFireFighterBehavior.java index 7e120d0..60d8384 100644 --- a/src/main/java/model/BoardFireFighterBehavior.java +++ b/src/main/java/model/BoardFireFighterBehavior.java @@ -9,19 +9,23 @@ public class BoardFireFighterBehavior implements BoardBehavior{ private final TargetStrategy targetStrategy = new TargetStrategy(); private final Map<Position, List<Position>> neighbors; private List<Position> firefighterPositions; + private List<Position> motorizedFighters; private Set<Position> firePositions; private final ElementFactory<FireFighter> firefighterFactory; private final ElementFactory<Fire> fireFactory; private final ElementFactory<Cloud> cloudFactory; + private final ElementFactory<MotorizedFireFighter> motorizedFactory; private List<Position> cloudPositions; private int step; - public BoardFireFighterBehavior(Map<Position, List<Position>> neighbors, ElementFactory<Fire> fireFactory ,ElementFactory<FireFighter> firefighterFactory,ElementFactory<Cloud> cloudFactory) { + public BoardFireFighterBehavior(Map<Position, List<Position>> neighbors, ElementFactory<Fire> fireFactory ,ElementFactory<FireFighter> firefighterFactory, + ElementFactory<Cloud> cloudFactory,ElementFactory<MotorizedFireFighter> motorizedFactory) { this.step=0; this.neighbors = neighbors; this.firefighterFactory = firefighterFactory; this.fireFactory = fireFactory; this.cloudFactory=cloudFactory; + this.motorizedFactory=motorizedFactory; } public void initializeElements(int rowCount, int columnCount) { @@ -81,6 +85,33 @@ public class BoardFireFighterBehavior implements BoardBehavior{ firefighterPositions = newFirefighterPositions; return modifiedPositions; } + public List<Position> updateMotorized() { + List<Position> modifiedPositions = new ArrayList<>(); + List<Position> newMotorizedPositions = new ArrayList<>(); + + // Déplace chaque pompier motorisé et éteint les feux à proximité + for (Position motorizedPosition : motorizedFighters) { + // Crée une instance temporaire de MotorizedFireFighter + MotorizedFireFighter motorizedFirefighter = new MotorizedFireFighter(motorizedPosition); + + // Déplace le pompier + Position newPosition = motorizedFirefighter.move(firePositions, neighbors); + + // Éteindre les feux à la nouvelle position + extinguishFire(firePositions, newPosition, modifiedPositions); + + // Mettre à jour les positions + newMotorizedPositions.add(newPosition); + modifiedPositions.add(motorizedPosition); // Ancienne position + modifiedPositions.add(newPosition); // Nouvelle position + } + + // Met à jour la liste des positions des pompiers motorisés + motorizedFighters = newMotorizedPositions; + + return modifiedPositions; + } + private void extinguish(Position position) { firePositions.remove(position); diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java index f015bf3..46c1e83 100644 --- a/src/main/java/model/FirefighterBoard.java +++ b/src/main/java/model/FirefighterBoard.java @@ -11,12 +11,12 @@ public class FirefighterBoard implements Board<List<ModelElement>> { private final Random randomGenerator = new Random(); - public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount,int initialCloud) { + public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount,int initialCloud,int initialMotorized) { Map<Position, List<Position>> neighbors = initializeNeighbors(rowCount, columnCount); this.properties = new BoardFirefighterProperties(rowCount, columnCount); this.behavior = new BoardFireFighterBehavior(neighbors,new FireFactory(randomGenerator,initialFireCount),new FirefighterFactory(randomGenerator,initialFirefighterCount), - new CloudFactory(randomGenerator,initialCloud)); + new CloudFactory(randomGenerator,initialCloud),new MotorizedFactory(randomGenerator,initialMotorized)); behavior.initializeElements( properties.rowCount(), properties.columnCount()); } diff --git a/src/main/java/model/MotorizedFireFighter.java b/src/main/java/model/MotorizedFireFighter.java index 88df128..7fe7155 100644 --- a/src/main/java/model/MotorizedFireFighter.java +++ b/src/main/java/model/MotorizedFireFighter.java @@ -13,18 +13,26 @@ public class MotorizedFireFighter extends FireFighter{ - public Position move(List<Position> positions,Map<Position, List<Position>> neighbors, Set<Position> firePositions) { - List<Position> modifiedPositions = new ArrayList<>(); - List<Position> newPositions = new ArrayList<>(); - Position finalPosition=null; - for (Position firefighterPosition : positions) { - // Déplacement motorisé (deux cases maximum) - Position firstStep = targetStrategy.neighborClosestToTarget(firefighterPosition, firePositions, neighbors); - Position secondStep = targetStrategy.neighborClosestToTarget(firstStep, firePositions, neighbors); - finalPosition = secondStep != null ? secondStep : firstStep; - + /** + * Déplace le pompier motorisé en deux étapes maximum vers un feu. + * + * @param firePositions Les positions des feux. + * @param neighbors Les positions voisines accessibles. + * @return La nouvelle position du pompier. + */ + public Position move(Set<Position> firePositions, Map<Position, List<Position>> neighbors) { + // Première étape + Position firstStep = targetStrategy.neighborClosestToTarget(getPosition(), firePositions, neighbors); + if (firstStep == null) { + return getPosition(); // Pas de mouvement possible } - return finalPosition; + // Deuxième étape + Position secondStep = targetStrategy.neighborClosestToTarget(firstStep, firePositions, neighbors); + Position newPosition = secondStep != null ? secondStep : firstStep; + + // Mise à jour de la position + setPosition(newPosition); + return newPosition; } } -- GitLab