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

App.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 4.39 KiB
    package firefighter.model;
    
    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;
      List<Position> firefighterPositions;
      Set<Position> firePositions;
      List<Position> firefighterNewPositions;
      int step = 0;
    
      public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount) {
        this.columnCount = columnCount;
        this.rowCount = rowCount;
        this.initialFireCount = initialFireCount;
        this.initialFirefighterCount = initialFirefighterCount;
        initializeElements();
      }
    
      public void initializeElements() {
        firefighterPositions = new ArrayList<>();
        firePositions = new HashSet<>();
        for (int index = 0; index < initialFireCount; index++)
          firePositions.add(randomPosition());
        for (int index = 0; index < initialFirefighterCount; index++)
          firefighterPositions.add(randomPosition());
      }
    
      private Position randomPosition() {
        return new Position((int) (Math.random() * rowCount), (int) (Math.random() * columnCount));
      }
    
      @Override
      public List<ModelElement> getState(Position position) {
        List<ModelElement> result = new ArrayList<>();
        for(Position firefighterPosition : firefighterPositions)
          if (firefighterPosition.equals(position))
            result.add(ModelElement.FIREFIGHTER);
        if(firePositions.contains(position))
          result.add(ModelElement.FIRE);
        return result;
      }
    
      @Override
      public int rowCount() {
        return rowCount;
      }
    
      @Override
      public int columnCount() {
        return columnCount;
      }
    
      public List<Position> updateToNextGeneration() {
        List<Position> result = activateFirefighters();
        result.addAll(activateFires());
        step++;
        return result;
      }
    
      private List<Position> activateFires() {
        List<Position> result = new ArrayList<>();
        if (step % 2 == 0) {
          List<Position> newFirePositions = new ArrayList<>();
          for (Position fire : firePositions) {
            newFirePositions.addAll(neighbors(fire));