diff --git a/src/main/java/model/Fire.java b/src/main/java/model/Fire.java index 1f093b8de20671832653822cfb788f12046a3b3c..34adf3169dfb57b371aa6db5a32c0d04d3336d5a 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 16f0d7d4bf2be7529069ef15acce971ac62689c1..83dc27c0434222d93dccbbdfd49defc848857778 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; }