Skip to content
Snippets Groups Projects
Commit 2da50ff2 authored by MEHDI's avatar MEHDI
Browse files

mehdi and mohamed : adding Obstacle abstract class and modifiying FirefighterBoard implementation

parent 08532ee2
Branches
No related tags found
No related merge requests found
package model;
import util.Neighbour;
import util.Position;
import java.util.List;
......@@ -35,6 +36,7 @@ public interface Board<S> {
Map<Position, Extinguisher> getExtinguishers();
Map<Position, Fire> getFires();
Neighbour getNeighbor();
/**
......
......@@ -13,17 +13,17 @@ public class Cloud extends Extinguisher {
element = ModelElement.CLOUD;
}
public List<Position>update(FirefighterBoard firefighterBoard){
public List<Position>update(Board<List<ModelElement>> firefighterBoard){
List<Position> modifiedPositions = new ArrayList<>();
Position currentPosition = this.getPosition();
Position newPosition = firefighterBoard.randomNeighbor(currentPosition);
Position newPosition = firefighterBoard.getNeighbor().randomNeighbor(currentPosition);
this.setPosition(newPosition);
modifiedPositions.add(currentPosition);
modifiedPositions.add(newPosition);
firefighterBoard.extinguish(newPosition);
extinguish(firefighterBoard,newPosition);
return modifiedPositions;
}
......
......@@ -12,6 +12,6 @@ public interface Element {
ModelElement getElement();
List<Position> update(FirefighterBoard firefighterBoard);
List<Position> update(Board<List<ModelElement>> firefighterBoard);
}
......@@ -37,6 +37,6 @@ public abstract class Extinguisher implements Element{
}
public abstract List<Position> update(FirefighterBoard firefighterBoard);
public abstract List<Position> update(Board<List<ModelElement>> firefighterBoard);
}
......@@ -33,15 +33,15 @@ public class Fire implements Element {
}
public List<Position> update(FirefighterBoard firefighterBoard) {
public List<Position> update(Board<List<ModelElement>> firefighterBoard) {
List<Position> modifiedPositions = new ArrayList<>();
if (firefighterBoard.stepNumber() % 2 == 0) {
Set<Position> newFirePositions = new HashSet<>();
for (Position fire : new HashSet<>(firefighterBoard.getFires().keySet())) {
List<Position> neighboursAvaiable = firefighterBoard.getNeighbors().get(fire);
List<Position> neighboursAvaiable = firefighterBoard.getNeighbor().getNeighbors().get(fire);
neighboursAvaiable.removeAll(firefighterBoard.getObstacles().keySet());
newFirePositions.addAll(firefighterBoard.getNeighbors().get(fire));
newFirePositions.addAll(firefighterBoard.getNeighbor().getNeighbors().get(fire));
}
......
......@@ -21,20 +21,20 @@ public class FireFighter extends Extinguisher {
}
public List<Position> update(FirefighterBoard firefighterBoard){
public List<Position> update(Board<List<ModelElement>> firefighterBoard){
List<Position> modifiedPositions = new ArrayList<>();
Position currentPosition = this.getPosition();
Position newPosition = targetStrategy.neighborClosestToFire(currentPosition, firefighterBoard.getFires().keySet(), firefighterBoard.getNeighbors());
Position newPosition = targetStrategy.neighborClosestToFire(currentPosition, firefighterBoard.getFires().keySet(), firefighterBoard.getNeighbor().getNeighbors());
this.setPosition(newPosition);
modifiedPositions.add(currentPosition);
modifiedPositions.add(newPosition);
firefighterBoard.extinguish(newPosition);
extinguish(firefighterBoard,newPosition);
for (Position neighbor : firefighterBoard.getNeighbors().get(newPosition)) {
firefighterBoard.extinguish(neighbor);
for (Position neighbor : firefighterBoard.getNeighbor().getNeighbors().get(newPosition)) {
extinguish(firefighterBoard,neighbor);
modifiedPositions.add(neighbor);
}
......
package model;
import util.Neighbour;
import util.Position;
import util.TargetStrategy;
......@@ -18,8 +19,8 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
private Map<Position, Fire> fires = new HashMap<>();
private Map<Position, Extinguisher> extinguishers = new HashMap<>();
private Map<Position, Obstacle> obstacles = new HashMap<>();
private final Neighbour neighbour;
private final Map<Position, List<Position>> neighbors = new HashMap<>();
private final Position[][] positions;
private int step = 0;
private final Random randomGenerator = new Random();
......@@ -28,8 +29,8 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
this.columnCount = columnCount;
this.rowCount = rowCount;
this.positions = new Position[rowCount][columnCount];
initializePositionsAndNeighbors();
this.neighbour = new Neighbour(this);
initializePositions();
this.initialFireCount = initialFireCount;
this.initialFirefighterCount = initialFirefighterCount;
......@@ -38,61 +39,37 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
initializeElements();
}
private void initializePositionsAndNeighbors() {
private void initializePositions() {
for (int column = 0; column < columnCount; column++) {
for (int row = 0; row < rowCount; row++) {
positions[row][column] = new Position(row, column);
}
}
for (int column = 0; column < columnCount; column++) {
for (int row = 0; row < rowCount; row++) {
neighbors.put(positions[row][column], calculateNeighbors(row, column));
}
}
}
private List<Position> calculateNeighbors(int row, int column) {
List<Position> list = new ArrayList<>();
if (row > 0) list.add(positions[row - 1][column]);
if (column > 0) list.add(positions[row][column - 1]);
if (row < rowCount - 1) list.add(positions[row + 1][column]);
if (column < columnCount - 1) list.add(positions[row][column + 1]);
return list;
}
public void initializeElements() {
fires.clear();
extinguishers.clear();
obstacles.clear();
for (int index = 0; index < initialFireCount; index++) {
Position position = randomPosition();
fires.put(position,new Fire(position));
}
for (int index = 0; index < initialFirefighterCount; index++) {
Position position = randomPosition();
extinguishers.put(position,new FireFighter(position));
}
for (int index = 0; index < initialCloudCount; index++) {
Position position = randomPosition();
extinguishers.put(position,new Cloud(position));
}
for (int index = 0; index < initialRoadCount; index++) {
Position position = randomPosition();
obstacles.put(position,new Road(position));
}
}
......@@ -115,17 +92,9 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
if (obstacle.getPosition().equals(position)) result.add(obstacle.getElement());
}
return result;
}
Position randomNeighbor(Position position) {
List<Position> neighborPositions = neighbors.get(position);
return neighborPositions.get(randomGenerator.nextInt(neighborPositions.size()));
}
@Override
public int rowCount() {
return rowCount;
......@@ -136,6 +105,8 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
return columnCount;
}
public List<Position> updateToNextGeneration() {
Fire fire = new Fire(randomPosition());
......@@ -144,18 +115,15 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
for(Extinguisher element : extinguishers.values()){
modifiedPositions.addAll(element.update(this));
}
modifiedPositions.addAll(fire.update(this));
step++;
return modifiedPositions;
}
public Map<Position, List<Position>> getNeighbors() {
return neighbors;
public Neighbour getNeighbor() {
return neighbour;
}
@Override
......@@ -167,9 +135,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
public Map<Position,Fire>getFires(){
return this.fires;
}
@Override
......@@ -181,25 +147,22 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
return obstacles;
}
@Override
public void reset() {
step = 0;
initializeElements();
}
public void extinguish(Position position) {
if (this.fires.containsKey(position)) {
this.fires.remove(position);
}
}
@Override
public void setState(List<ModelElement> state, Position position) {
extinguish(position);
if(extinguishers.containsKey(position)){
extinguishers.remove(position);
extinguishers.get(position).extinguish(this,position);
}
......
package model;
public enum ModelElement {
FIREFIGHTER,
FIRE,
CLOUD,
ROAD;
FIREFIGHTER(10),
FIRE(10),
CLOUD(10),
ROAD(5);
ModelElement(int initialNumber) {
}
}
......@@ -25,10 +25,9 @@ public abstract class Obstacle implements Element{
return this.element;
}
@Override
public List<Position> update(FirefighterBoard firefighterBoard) {
List<Position>positionList = new ArrayList<>();
return positionList;
public List<Position> update(Board<List<ModelElement>> firefighterBoard) {
return null;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment