diff --git a/.gradle/8.10.2/executionHistory/executionHistory.bin b/.gradle/8.10.2/executionHistory/executionHistory.bin index 4b2b232d6014176a132436daa367c116d399b3e6..e93c865cf1b72472cfa682758e98c3bb522c8cad 100644 Binary files a/.gradle/8.10.2/executionHistory/executionHistory.bin and b/.gradle/8.10.2/executionHistory/executionHistory.bin differ diff --git a/.gradle/8.10.2/executionHistory/executionHistory.lock b/.gradle/8.10.2/executionHistory/executionHistory.lock index 6908cfd0b5aae04c4a2a1e855483ed99945119f4..31a3a0a39e4212e4bc2c34425978194b02bdcfe2 100644 Binary files a/.gradle/8.10.2/executionHistory/executionHistory.lock and b/.gradle/8.10.2/executionHistory/executionHistory.lock differ diff --git a/.gradle/8.10.2/fileHashes/fileHashes.bin b/.gradle/8.10.2/fileHashes/fileHashes.bin index d495e7a842fe87fb2c87a0d2c6c8658c0087c62d..f45170b79721d972e35a42e3798d8da1c3dfb235 100644 Binary files a/.gradle/8.10.2/fileHashes/fileHashes.bin and b/.gradle/8.10.2/fileHashes/fileHashes.bin differ diff --git a/.gradle/8.10.2/fileHashes/fileHashes.lock b/.gradle/8.10.2/fileHashes/fileHashes.lock index 5704671eade6aaaf9fd222d4053099773d436456..d5807fc55d5cdf8cc4db7c81c513ad88e7990446 100644 Binary files a/.gradle/8.10.2/fileHashes/fileHashes.lock and b/.gradle/8.10.2/fileHashes/fileHashes.lock differ diff --git a/.gradle/8.10.2/fileHashes/resourceHashesCache.bin b/.gradle/8.10.2/fileHashes/resourceHashesCache.bin index 24099587cd19bf4d3f11064e66ce3b445421e1b1..361ed8b74ba2225b1a38375ee4383f86dda21659 100644 Binary files a/.gradle/8.10.2/fileHashes/resourceHashesCache.bin and b/.gradle/8.10.2/fileHashes/resourceHashesCache.bin differ diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index ddd37d4352461add0ef41adf87dac87d5223acd6..1fa5114eb746698d290ca8906720c193c02e035f 100644 Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/build/classes/java/main/model/BoardFireFighterBehavior.class b/build/classes/java/main/model/BoardFireFighterBehavior.class index b6f310615dab7bc112f147807fe635c2d2d217ce..1c537c58c8f903db8eeb2551e27ea4e4cbe95cad 100644 Binary files a/build/classes/java/main/model/BoardFireFighterBehavior.class and b/build/classes/java/main/model/BoardFireFighterBehavior.class differ diff --git a/build/classes/java/main/model/FirefighterBoard.class b/build/classes/java/main/model/FirefighterBoard.class index ad5e48bc72e192051c4d9245a26063ab1c8c5aa9..4464d98f7f268fd5b894fa609ae2ce2ed9c8b61e 100644 Binary files a/build/classes/java/main/model/FirefighterBoard.class and b/build/classes/java/main/model/FirefighterBoard.class differ diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index 2eccc34b5dc9a494b36065cd0145c547e956965b..68d5fbf7aa7887e8aba2f4d66d95ef312b18474f 100644 Binary files a/build/tmp/compileJava/previous-compilation-data.bin and b/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/src/main/java/model/BoardFireFighterBehavior.java b/src/main/java/model/BoardFireFighterBehavior.java index 9c5c2cef955dc99130b9b74183c85f4994f213ea..d5195ecbba9119f20075394a02a0a5b90a74abca 100644 --- a/src/main/java/model/BoardFireFighterBehavior.java +++ b/src/main/java/model/BoardFireFighterBehavior.java @@ -94,53 +94,71 @@ public class BoardFireFighterBehavior implements BoardBehavior{ } public List<Position> updateMotorized() { List<Position> modifiedPositions = new ArrayList<>(); - List<Position> newMotorizedPositions = new ArrayList<>(); + List<Position> newPositions = new ArrayList<>(); + + for (Position currentPosition : motorizedFighters) { + // Vérification de validité de la position actuelle + if (!neighbors.containsKey(currentPosition)) { + System.err.println("Position actuelle invalide : " + currentPosition); + newPositions.add(currentPosition); + continue; + } + + // Étape 1 : Calcul du premier déplacement + Position firstStep = targetStrategy.neighborClosestToTarget(currentPosition, firePositions, neighbors); + if (firstStep == null || !neighbors.containsKey(firstStep)) { + // Aucun déplacement possible, rester sur place + System.out.println("Pas de première étape possible pour : " + currentPosition); + newPositions.add(currentPosition); + continue; + } - // 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); + // Étape 2 : Calcul du deuxième déplacement + Position secondStep = targetStrategy.neighborClosestToTarget(firstStep, firePositions, neighbors); + Position finalPosition = (secondStep != null && neighbors.containsKey(secondStep)) ? secondStep : firstStep; - // Déplace le pompier - Position newPosition = motorizedFirefighter.move(firePositions, neighbors); + // Ajout de la position finale aux nouvelles positions + newPositions.add(finalPosition); - // Éteindre les feux à la nouvelle position - extinguishFire(firePositions, newPosition, modifiedPositions); + // Mise à jour des positions modifiées + modifiedPositions.add(currentPosition); // Ancienne position + modifiedPositions.add(finalPosition); // Nouvelle position - // Mettre à jour les positions - newMotorizedPositions.add(newPosition); - modifiedPositions.add(motorizedPosition); // Ancienne position - modifiedPositions.add(newPosition); // Nouvelle position + // Étape 3 : Éteindre les feux à la position finale + extinguish(finalPosition); + extinguishNearbyFires(finalPosition, modifiedPositions); } - // Met à jour la liste des positions des pompiers motorisés - motorizedFighters = newMotorizedPositions; - + // Mettre à jour les positions globales + motorizedFighters = newPositions; return modifiedPositions; } - - private void extinguish(Position position) { - firePositions.remove(position); - } /** - * Éteint les feux autour d'une position donnée. + * Éteint les feux à proximité d'une position donnée. * - * @param firePositions Les positions des feux actuels. * @param firefighterPosition La position actuelle du pompier. - * @param modifiedPositions Les positions modifiées pendant ce tour. + * @param modifiedPositions Les positions modifiées pendant ce tour. */ - protected void extinguishFire(Set<Position> firePositions, Position firefighterPosition, List<Position> modifiedPositions) { - List<Position> nearbyFires = neighbors.get(firefighterPosition).stream() + private void extinguishNearbyFires(Position firefighterPosition, List<Position> modifiedPositions) { + List<Position> nearbyFires = neighbors.getOrDefault(firefighterPosition, Collections.emptyList()) + .stream() .filter(firePositions::contains) .toList(); for (Position fire : nearbyFires) { firePositions.remove(fire); modifiedPositions.add(fire); + System.out.println("Feu éteint à : " + fire); } } + private void extinguish(Position position) { + firePositions.remove(position); + } + + + public Set<Position> getFirePositions() { return firePositions; } diff --git a/src/main/java/model/MotorizedFireFighter.java b/src/main/java/model/MotorizedFireFighter.java index 7fe715559835557fcc61db62ea62d2d9a3e5ca02..4a88631dea86584bd0caac93644c8649a77bb8f0 100644 --- a/src/main/java/model/MotorizedFireFighter.java +++ b/src/main/java/model/MotorizedFireFighter.java @@ -5,12 +5,21 @@ import util.TargetStrategy; import java.util.*; -public class MotorizedFireFighter extends FireFighter{ +public class MotorizedFireFighter extends BoardElement{ private final TargetStrategy targetStrategy = new TargetStrategy(); public MotorizedFireFighter(Position position) { super(position); } + @Override + public String getType() { + return "MotorizedFireFighter"; + } + + @Override + public String toString() { + return null; + } /** @@ -24,15 +33,17 @@ public class MotorizedFireFighter extends FireFighter{ // Première étape Position firstStep = targetStrategy.neighborClosestToTarget(getPosition(), firePositions, neighbors); if (firstStep == null) { - return getPosition(); // Pas de mouvement possible + return getPosition(); // Aucun déplacement possible } // Deuxième étape Position secondStep = targetStrategy.neighborClosestToTarget(firstStep, firePositions, neighbors); - Position newPosition = secondStep != null ? secondStep : firstStep; // Mise à jour de la position - setPosition(newPosition); + Position newPosition = (secondStep != null) ? secondStep : firstStep; + setPosition(newPosition); // Mettre à jour la position interne return newPosition; } + + }