Select Git revision
FFBoardData.java
Forked from
COUETOUX Basile / FirefighterStarter
Source project has a limited visibility.
-
BACHTARZI Imed eddine authoredBACHTARZI Imed eddine authored
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());
}