Skip to content
Snippets Groups Projects
Select Git revision
  • c195287b46a0d39ccbf5311657aa8ca11468eab7
  • master default protected
2 results

DrawerWithSave.java

Blame
  • Forked from COUETOUX Basile / graphic-2020
    Source project has a limited visibility.
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    FirefighterBoard.java 5.25 KiB
    package model;
    
    import util.Position;
    
    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 int initialCloudCount;
      private final model.TargetStrategy targetStrategy = new model.TargetStrategy();
      private List<Firefighter> firefighters;
      private Fire fire;
      private final Map<Position, List<Position>> neighbors = new HashMap<>();
      private List<Cloud> clouds;
      private final Position[][] positions;
      private int step = 0;
      private final Random randomGenerator = new Random();
    
      public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialCloudCount) {
        this.columnCount = columnCount;
        this.rowCount = rowCount;
        this.positions = new Position[rowCount][columnCount];
        for (int column = 0; column < columnCount; column++)
          for (int row = 0; row < rowCount; row++)
            positions[row][column] = new Position(row, column);
        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]);
            if (column > 0) list.add(positions[row][column - 1]);
            if (row < rowCount - 1) list.add(positions[row + 1][column]);
            if (column < columnCount - 1) list.add(positions[row][column + 1]);
            neighbors.put(positions[row][column], list);
          }
        this.initialFireCount = initialFireCount;
        this.initialFirefighterCount = initialFirefighterCount;
        this.initialCloudCount = initialCloudCount;
        initializeElements();
      }
    
      public void initializeElements() {
        firefighters = new ArrayList<>();
        clouds = new ArrayList<>();
        Set<Position> firePositions = new HashSet<>();
        for (int index = 0; index < initialCloudCount; index++) {
          clouds.add(new Cloud(randomPosition(), neighbors));
        }
        for (int index = 0; index < initialFireCount; index++)
          firePositions.add(randomPosition());
        fire = new Fire(firePositions, neighbors);
        for (int index = 0; index < initialFirefighterCount; index++)
          firefighters.add(new Firefighter(randomPosition()));
        for (int index = 0; index < initialCloudCount; index++) {
          clouds.add(new Cloud(randomPosition(), neighbors));
        }
      }
    
      private Position randomPosition() {
        return new Position(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(columnCount));
      }
    
      @Override
      public List<ModelElement> getState(Position position) {
        List<ModelElement> result = new ArrayList<>();
        for (Cloud cloud : clouds) {
          if (cloud.getPosition().equals(position)) {
            result.add(ModelElement.CLOUD);