From 9283d2e7c5dcc26091270d9811119fe294ca81b7 Mon Sep 17 00:00:00 2001 From: Yanis O <oualanyanis01@gmail.com> Date: Thu, 14 Nov 2024 22:49:19 +0100 Subject: [PATCH] [Fix] Les pompiers ne peuvent supprimer que les feux --- src/main/java/model/Fire.java | 4 ++-- src/main/java/model/FireFighter.java | 19 +++++++++++-------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/main/java/model/Fire.java b/src/main/java/model/Fire.java index 1f093b8..34adf31 100644 --- a/src/main/java/model/Fire.java +++ b/src/main/java/model/Fire.java @@ -25,10 +25,10 @@ public class Fire implements Entity{ @Override public List<Position> nextTurn(Board<Square> board) { if(board.getStepNumber() % 2 == 0)return new ArrayList<Position>(); - List<Position> positions = PositionUtil.generateAdjacentPositions(position, board); + List<Position> positions = PositionUtil.generateAdjacentPositions(position, board); for(Position p : positions){ if(b.getStates(p).isEmpty()){ - if(b.getStates(p).getMaxAge() < b.getStepNumber()){ + if(b.getStates(p).getMaxAge() < b.getStepNumber() && PositionUtil.getManhattanDistance(position, p) == 1){ board.addEntityAtSquare(new Fire(p, board), p); } diff --git a/src/main/java/model/FireFighter.java b/src/main/java/model/FireFighter.java index 16f0d7d..83dc27c 100644 --- a/src/main/java/model/FireFighter.java +++ b/src/main/java/model/FireFighter.java @@ -26,22 +26,21 @@ public class FireFighter implements Entity{ // Générer les positions adjacentes List<Position> adjacentPositions = PositionUtil.generateAdjacentPositions(position, b); - + // Vérifier s'il y a du feu dans une des positions adjacentes boolean hasFire = adjacentPositions.stream() .anyMatch(p -> b.doesSquareContainEntity(p, Fire.class)); - + if (hasFire) { // Si du feu est trouvé, on éteint les feux adjacents positions.addAll(extinguish(adjacentPositions, b)); } else { // Chercher la position du feu le plus proche Position nearestFirePos = b.getNearestEntity(position, Fire.class); - + if (nearestFirePos != null && !nearestFirePos.equals(position)) { // Trouver la meilleure position pour se rapprocher du feu Position nextPos = getNextPositionTowards(position, nearestFirePos, b); - if (nextPos != null) { // Mettre à jour la position du pompier b.clearCase(position); // Vider l'ancienne case @@ -62,11 +61,15 @@ public class FireFighter implements Entity{ private List<Position> extinguish(List<Position> adjacentPositions, Board<Square> b) { List<Position> extinguishedPositions = new ArrayList<>(); for (Position p : adjacentPositions) { - Square s = (Square)b.getStates(p); - if (s.getEntities().stream().anyMatch(e -> e instanceof Fire)) { - b.clearCase(p); - extinguishedPositions.add(p); // Ajouter la position où le feu a été éteint + b.getStates(p).getEntities().removeIf(element -> element instanceof Fire); + List<Entity> entities = b.getStates(p).getEntities(); + for(Entity e : entities){ + if(e instanceof EmptyEntity){ + e.setAge(age+1); + } } + extinguishedPositions.add(p); // Ajouter la position où le feu a été éteint + } return extinguishedPositions; } -- GitLab