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

FFBoard.java

Blame
  • Forked from COUETOUX Basile / FirefighterStarter
    20 commits ahead of the upstream repository.
    user avatar
    BACHTARZI Imed eddine authored
    0b6499fe
    History
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    FFBoard.java 2.27 KiB
    package model.firefighter;
    
    import model.Board;
    import model.BoardData;
    import model.Element;
    import util.Position;
    
    import java.util.*;
    
    
    public class FFBoard implements Board<List<ModelElement>> {
      private final int columnCount;
      private final int rowCount;
      private final int initialFireCount;
      private final int initialFirefighterCount;
      private BoardData boardData;
      private FFUpdater FFUpdater ;
      private final Random randomGenerator = new Random();
    
      public FFBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount) {
        boardData=new FFBoardData(columnCount,rowCount);
        FFUpdater=new FFUpdater();
        this.columnCount = columnCount;
        this.rowCount = rowCount;
        this.initialFireCount = initialFireCount;
        this.initialFirefighterCount = initialFirefighterCount;
        initializeElements();
      }
    
      public void initializeElements() {
        boardData.initialize();
        FFUpdater= new FFUpdater();
        FFboardFiller filler=new FFboardFiller();
        filler.fillBoard(boardData,new int[]{
                1,//roads
                20,//forests
                10,//rocks
                30,//mountains
                5,//firefighter
                2,//motorized firefighter
                2,//clouds
                10,//fires
    
        });
      }
    
      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 (Element e:boardData.getCell(position).Content) {
          result.add(e.getType());
        }
        return result;
      }
    
      @Override
      public int rowCount() {
        return rowCount;
      }
    
      @Override
      public int columnCount() {
        return columnCount;
      }
    
      public List<Position> updateToNextGeneration() {
        List<Position> modifiedPositions = FFUpdater.updateAll(boardData);
        boardData.setStep(boardData.getStep()+1);
        return modifiedPositions;
      }
      @Override
      public int stepNumber() {
        return boardData.getStep();
      }
      @Override
      public void reset() {
        initializeElements();
      }
      @Override
      public void setState(List<ModelElement> state, Position position) {
        for (ModelElement modelElement: state) {
            boardData.addElement(modelElement.instanciate(position));
        }
      }
    }