Select Git revision
FirefighterGrid.class.uniqueId15
Forked from
COUETOUX Basile / FirefighterStarter
Source project has a limited visibility.
-
BACHTARZI Imed eddine authored
used the Factory Method through ElementFactory
BACHTARZI Imed eddine authoredused the Factory Method through ElementFactory
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;
}
}