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

FireManager.java

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.
    FireMovements.java 1.91 KiB
    package model;
    
    import util.Position;
    
    import java.util.*;
    
    import static model.BoardFireFighterBehavior.*;
    
    public class FireMovements implements Movements{
        private final ElementFactory<Fire> fireFactory;
        private Set<Position> firePositions;
    
    
        public FireMovements(ElementFactory<Fire> fireFactory) {
            this.fireFactory = fireFactory;
            this.firePositions = new HashSet<>();
        }
    
    
    
        @Override
        public void initializeElement(int rowCount, int columnCount) {
            // Feux
    
                List<Fire> fires = fireFactory.createElements(rowCount, columnCount);
                for (Fire fire : fires) {
                   firePositions.add(fire.getPosition());
                }
    
    
    
        }
    
        @Override
        public Collection<Position> getPositions() {
            return firePositions;
        }
    
        @Override
        public List<Position> updateElements() {
            List<Position> modifiedPositions = new ArrayList<>();
            if (getStep() % 2 == 0) {
                List<Position> newFirePositions = new ArrayList<>();
    
                // Pour chaque feu existant, vérifier ses voisins
                for (Position fire : firePositions) {
                    // Si la position voisine est libre (non occupée par un feu ou un pompier), le feu peut se propager
                    for (Position neighbor : getNeighbors().get(fire)) {
                        // Vérifier si le feu peut se propager à cette position (pas de feu déjà là et pas un terrain bloqué)
                        if (canMoveTo(neighbor, firePositions, (List<Position>)getFirefighterPositions()) && !firePositions.contains(neighbor)) {
                            newFirePositions.add(neighbor);
                        }
                    }
                }
    
                // Ajouter les nouvelles positions de feu à la liste des feux existants
                firePositions.addAll(newFirePositions);
                modifiedPositions.addAll(newFirePositions);
            }
            return modifiedPositions;
        }
    
    
    }