Skip to content
Snippets Groups Projects
Select Git revision
  • d097fe1567a548e9e05234612888495493680d93
  • main default protected
  • variant
3 results

FirefighterBoard.class

Blame
  • Forked from COUETOUX Basile / FirefighterStarter
    Source project has a limited visibility.
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    FireFighterMovements.java 3.38 KiB
    package model.ExtinguishFire;
    
    import model.ElementFactory;
    import model.Movements;
    import util.Position;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.List;
    import java.util.Set;
    
    import static model.Board.BoardFireFighterBehavior.*;
    
    public class FireFighterMovements implements Movements {
        private final ElementFactory<FireFighter> firefighterFactory;
        private  List<Position> firefighterPositions;
        public FireFighterMovements(ElementFactory<FireFighter> firefighterFactory) {
            this.firefighterFactory = firefighterFactory;
            this.firefighterPositions = new ArrayList<>();
        }
    
    
    
        @Override
        public List<Position> updateElements() {
            List<Position> modifiedPositions = new ArrayList<>();
            List<Position> newFirefighterPositions = new ArrayList<>();
    
            for (Position firefighterPosition : firefighterPositions) {
                // Calcul de la position vers laquelle le pompier devrait se déplacer
                Position newFirefighterPosition =getTargetStrategy().neighborClosestToTarget(firefighterPosition, getFireMovements().getPositions(), getNeighbors());
    
                // Vérification si la position cible est valide pour le mouvement
                if (canMoveTo(newFirefighterPosition, (Set<Position>) getFireMovements().getPositions(), firefighterPositions)) {
                    // Si le déplacement est valide, on met à jour la position du pompier
                    newFirefighterPositions.add(newFirefighterPosition);
    
                    // Éteindre le feu à la nouvelle position
                    extinguish(newFirefighterPosition);
                    modifiedPositions.add(firefighterPosition);
                    modifiedPositions.add(newFirefighterPosition);
    
                    // Vérification des voisins et extinction des feux voisins
                    List<Position> neighborFirePositions = getNeighbors().get(newFirefighterPosition).stream()
                            .filter(getFireMovements().getPositions()::contains).toList();
    
                    // Log pour débogage
                    System.out.println("Pompiers se déplacent de " + firefighterPosition + " vers " + newFirefighterPosition);
    
                    // Éteindre les feux voisins
                    for (Position firePosition : neighborFirePositions) {
                        extinguish(firePosition);
                        modifiedPositions.add(firePosition);  // Ajout des feux éteints dans la liste des positions modifiées
                    }
                } else {
                    // Si la position n'est pas valide, le pompier reste sur place
                    newFirefighterPositions.add(firefighterPosition);
                    System.out.println("Pompier ne peut pas se déplacer à " + newFirefighterPosition + ", il reste à " + firefighterPosition);
                }
            }
    
            // Mettre à jour la liste des positions des pompiers
            firefighterPositions = newFirefighterPositions;
            return modifiedPositions;
        }
    
        @Override
        public void initializeElement(int rowCount, int columnCount) {
            // Pompiers
            firefighterPositions = new ArrayList<>();