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

FirefighterGrid.class.uniqueId15

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.
    FFBoardData.java 2.71 KiB
    package model;
    
    import util.Position;
    
    import java.util.*;
    
    public class FFBoardData implements BoardData{
    
        private List<List<Element>> elementList;
        private Map<Position, List<Position>> neighbors = new HashMap<Position, List<Position>>();
        private int step;
        private int columnCount,rowCount;
        private List<List<Cell<Element>>> cells;
        public FFBoardData(int columnCount, int rowCount) {
            this.columnCount=columnCount;
            this.rowCount=rowCount;
            initialize();
        }
        public void initialize(){
            step=0;
            neighbors = new HashMap<Position, List<Position>>();
            Position[][] ps = new Position[rowCount][columnCount];
            cells=new ArrayList<>();
            for (int column = 0; column < columnCount; column++){
                cells.add(new ArrayList<>());
                for (int row = 0; row < rowCount; row++){
                    ps[row][column] = new Position(row, column);
                    cells.get(column).add(new Cell<>(ps[row][column]));
                }
            }
            for (int column = 0; column < columnCount; column++)
                for (int row = 0; row < rowCount; row++) {
                    List<Position> list = new ArrayList<>();
                    if (row > 0) list.add(ps[row - 1][column]);
                    if (column > 0) list.add(ps[row][column - 1]);
                    if (row < rowCount - 1) list.add(ps[row + 1][column]);
                    if (column < columnCount - 1) list.add(ps[row][column + 1]);
                    getNeighbors().put(ps[row][column], list);
                }
            elementList = new ArrayList<>();
            for (int i = 0; i < ModelElement.values().length; i++) {
                elementList.add(new ArrayList<>());
            }
        }
    
    
        @Override
        public List<List<Element>> getElements() {
            return elementList;
        }
    
        public Map<Position, List<Position>> getNeighbors() {
            return neighbors;
        }
        public List<Position> getNeighbor(Position position) {
            return neighbors.get(position);
        }
        public void addElement(Element element){
            elementList.get(element.getType().ordinal()).add(element);
            getCell(element.getPosition()).Content.add(element);
            FFUpdater.modifiedPositions.add(element.getPosition());
        }
        public void removeElement(Element element){
            FFUpdater.modifiedPositions.add(element.getPosition());
            elementList.get(element.getType().ordinal()).remove(element);
            getCell(element.getPosition()).Content.remove(element);
        }
        public Cell<Element> getCell(Position position){
            return cells.get(position.column()).get(position.row());
        }
        @Override
        public int getStep() {
            return step;
        }
    
        @Override
        public void setStep(int step) {
            this.step=step;
        }
    }