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

FirefighterBoard.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.
    FirefighterBoard.java 4.27 KiB
    package model;
    import util.Position;
    import util.TargetStrategy;
    
    import java.util.*;
    
    
    public class FirefighterBoard implements Board<List<ModelElement>> {
      private final int columnCount;
      private final int rowCount;
      private final int initialFireCount;
      private final int initialFirefighterCount;
    
      private final FireManager fireManager;
      private final FirefighterManager firefighterManager;
      private List<Position> firefighterPositions;
      private Set<Position> firePositions;
      private final Position[][] positions;
      private int step = 0;
      private final Map<Position, List<Position>> neighbors = new HashMap<>();
      private final Random randomGenerator = new Random();
    
      public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount) {
        this.columnCount = columnCount;
        this.rowCount = rowCount;
        this.initialFireCount = initialFireCount;
        this.initialFirefighterCount = initialFirefighterCount;
        this.positions = new Position[rowCount][columnCount];
        initializePositions();
        initializeNeighbors();
        // Initialize managers
        this.fireManager = new FireManager(new HashSet<>());
        this.firefighterManager = new FirefighterManager(new ArrayList<>(), fireManager);
    
        initializeElements();
      }
      private void initializeNeighbors() {
        for (int column = 0; column < columnCount; column++) {
          for (int row = 0; row < rowCount; row++) {
            List<Position> list = new ArrayList<>();
            if (row > 0) list.add(positions[row - 1][column]);        // Voisin du haut
            if (column > 0) list.add(positions[row][column - 1]);    // Voisin de gauche
            if (row < rowCount - 1) list.add(positions[row + 1][column]); // Voisin du bas
            if (column < columnCount - 1) list.add(positions[row][column + 1]); // Voisin de droite
            neighbors.put(positions[row][column], list);
          }
        }
      }
      private void initializePositions()
      {
        // Initialize positions
    
        for (int column = 0; column < columnCount; column++) {
          for (int row = 0; row < rowCount; row++) {
            positions[row][column] = new Position(row, column);
          }
        }
      }
    
    
      public void initializeElements() {
        // Initialize fires
        fireManager.initializeFires(initialFireCount, rowCount, columnCount, randomGenerator);
    
        // Initialize firefighters
        List<Position> firefighterPositions = new ArrayList<>();
        for (int index = 0; index < initialFirefighterCount; index++) {
          firefighterPositions.add(randomPosition());
        }
        firefighterManager.getFirefighterPositions().clear();