Skip to content
Snippets Groups Projects
Select Git revision
  • 303a652516a70b66d13b551155bca1df09acd997
  • main default protected
  • melissa
  • yanis
  • variant
5 results

SimulatorApplication.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.
    BoardFireFighterBehavior.java 3.90 KiB
    package model;
    
    import util.Position;
    import util.TargetStrategy;
    
    import java.util.*;
    
    public class BoardFireFighterBehavior implements BoardBehavior{
        private final TargetStrategy targetStrategy = new TargetStrategy();
        private final Map<Position, List<Position>> neighbors;
        private List<Position> firefighterPositions;
        private Set<Position> firePositions;
        private final ElementFactory<FireFighter> firefighterFactory;
        private final ElementFactory<Fire> fireFactory;
        private int step;
    
        public BoardFireFighterBehavior(Map<Position, List<Position>> neighbors, ElementFactory<Fire> fireFactory ,ElementFactory<FireFighter> firefighterFactory) {
            this.step=0;
            this.neighbors = neighbors;
            this.firefighterFactory = firefighterFactory;
            this.fireFactory = fireFactory;
        }
    
        public void initializeElements(int rowCount, int columnCount) {
            // Utilisation de la factory pour créer les feux
            firePositions = new HashSet<>();
            List<Fire> fires = fireFactory.createElements(rowCount, columnCount);
            for (Fire fire : fires) {
                firePositions.add(fire.getPosition());
            }
    
            // Utilisation de la factory pour créer les pompiers
            firefighterPositions = new ArrayList<>();
            List<FireFighter> firefighters = firefighterFactory.createElements(rowCount, columnCount);
            for (FireFighter firefighter : firefighters) {
                firefighterPositions.add(firefighter.getPosition());
            }
        }
    
        private Position randomPosition(int rowCount, int columnCount, Random randomGenerator) {
            return new Position(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(columnCount));
        }
    
        public List<Position> updateFires() {
            List<Position> modifiedPositions = new ArrayList<>();
            if (step % 2 == 0) {
                List<Position> newFirePositions = new ArrayList<>();
                for (Position fire : firePositions) {
                    newFirePositions.addAll(neighbors.get(fire));
                }
                firePositions.addAll(newFirePositions);
                modifiedPositions.addAll(newFirePositions);
            }
            return modifiedPositions;
        }
    
        public List<Position> updateFirefighters() {
            List<Position> modifiedPositions = new ArrayList<>();
            List<Position> newFirefighterPositions = new ArrayList<>();
            for (Position firefighterPosition : firefighterPositions) {
                Position newFirefighterPosition = targetStrategy.neighborClosestToTarget(firefighterPosition, firePositions, neighbors);
                newFirefighterPositions.add(newFirefighterPosition);
                extinguish(newFirefighterPosition);
                modifiedPositions.add(firefighterPosition);
                modifiedPositions.add(newFirefighterPosition);
    
                List<Position> neighborFirePositions = neighbors.get(newFirefighterPosition).stream()
                        .filter(firePositions::contains).toList();
                for (Position firePosition : neighborFirePositions) {
                    extinguish(firePosition);