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

FFBoard.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.
    FFBoard.java 2.54 KiB
    package model;
    
    import util.Position;
    import util.TargetStrategy;
    
    import java.lang.reflect.InvocationTargetException;
    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();
        for (int index = 0; index < initialFireCount; index++)
          boardData.addElement(new StandardFire(randomPosition()));
         for (int index = 0; index < initialFirefighterCount; index++)
           boardData.addElement(new StandardFireFighter(randomPosition()));
        for (int index = 0; index < 2; index++)
          boardData.addElement(new MotorizedFireFighter(randomPosition()));
        for (int index = 0; index < 10; index++)
          boardData.addElement(new Cloud(randomPosition()));
        for (int index = 0; index < 50; index++)
          boardData.addElement(new Road(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 (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));
        }
      }
    }