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

TD1.md

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    FirefighterBoard.java 4.84 KiB
    package firefighter.model;
    
    import firefighter.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 List<Position> firefighterPositions;
      private Set<Position> firePositions;
      private int step = 0;
      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;
        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(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(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<>();