Skip to content
Snippets Groups Projects
FFBoard.java 2.54 KiB
Newer Older
  • Learn to ignore specific revisions
  • LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
    package model;
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
    import util.Position;
    
    import java.lang.reflect.InvocationTargetException;
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
    import java.util.*;
    
    
    
    public class FFBoard implements Board<List<ModelElement>> {
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
      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) {
    
    BACHTARZI Imed eddine's avatar
    BACHTARZI Imed eddine committed
        boardData=new FFBoardData(columnCount,rowCount);
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
        this.columnCount = columnCount;
        this.rowCount = rowCount;
        this.initialFireCount = initialFireCount;
        this.initialFirefighterCount = initialFirefighterCount;
        initializeElements();
      }
    
      public void initializeElements() {
    
    BACHTARZI Imed eddine's avatar
    BACHTARZI Imed eddine committed
        FFUpdater= new FFUpdater();
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
        for (int index = 0; index < initialFireCount; index++)
    
          boardData.addElement(new StandardFire(randomPosition()));
    
    BACHTARZI Imed eddine's avatar
    BACHTARZI Imed eddine committed
         for (int index = 0; index < initialFirefighterCount; index++)
    
           boardData.addElement(new StandardFireFighter(randomPosition()));
    
        for (int index = 0; index < 2; index++)
          boardData.addElement(new MotorizedFireFighter(randomPosition()));
    
    BACHTARZI Imed eddine's avatar
    BACHTARZI Imed eddine committed
        for (int index = 0; index < 10; index++)
    
          boardData.addElement(new Cloud(randomPosition()));
    
    BACHTARZI Imed eddine's avatar
    BACHTARZI Imed eddine committed
        for (int index = 0; index < 50; index++)
    
          boardData.addElement(new Road(randomPosition()));
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
      }
    
      private Position randomPosition() {
    
        return new Position(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(columnCount));
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
      }
    
      @Override
      public List<ModelElement> getState(Position position) {
    
        List<ModelElement> result=new ArrayList<>();
        for (Element e:boardData.getCell(position).Content) {
          result.add(e.getType());
    
    BACHTARZI Imed eddine's avatar
    BACHTARZI Imed eddine committed
        }
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
        return result;
      }
    
      @Override
      public int rowCount() {
        return rowCount;
      }
    
      @Override
      public int columnCount() {
        return columnCount;
      }
    
      public List<Position> updateToNextGeneration() {
    
    BACHTARZI Imed eddine's avatar
    BACHTARZI Imed eddine committed
    
    
        List<Position> modifiedPositions = FFUpdater.updateAll(boardData);
        boardData.setStep(boardData.getStep()+1);
    
        return modifiedPositions;
    
      @Override
      public int stepNumber() {
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
      @Override
      public void reset() {
        initializeElements();
      }
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
      @Override
      public void setState(List<ModelElement> state, Position position) {
    
        for (ModelElement modelElement: state) {
            boardData.addElement(modelElement.instanciate(position));
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
        }
      }