diff --git a/src/main/java/model/Board.java b/src/main/java/model/Board.java index cf0d9686e7d14ad05a92f7e3203adb32eda4f9d8..f5686246697e6c6f4339e6b2be9bc4e99008b0e8 100644 --- a/src/main/java/model/Board.java +++ b/src/main/java/model/Board.java @@ -1,5 +1,6 @@ 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(); /** diff --git a/src/main/java/model/Cloud.java b/src/main/java/model/Cloud.java index bf1c2312da8d46722ce80edb5a2e6fbf8f604a5f..c11fd8bcfd1c9a3ca572aa70b0777ff95adcb81e 100644 --- a/src/main/java/model/Cloud.java +++ b/src/main/java/model/Cloud.java @@ -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; } diff --git a/src/main/java/model/Element.java b/src/main/java/model/Element.java index 8f6d84dfa00f113ef859682b5495612d11d01d9c..e4a3b0b8606ba3c7937cd877e8508c1071810ad2 100644 --- a/src/main/java/model/Element.java +++ b/src/main/java/model/Element.java @@ -12,6 +12,6 @@ public interface Element { ModelElement getElement(); - List<Position> update(FirefighterBoard firefighterBoard); + List<Position> update(Board<List<ModelElement>> firefighterBoard); } diff --git a/src/main/java/model/Extinguisher.java b/src/main/java/model/Extinguisher.java index c40981f3a8ac611dc397389073a0ed8b02249322..9c7904801936be7e3e13695d0054f30e45d81802 100644 --- a/src/main/java/model/Extinguisher.java +++ b/src/main/java/model/Extinguisher.java @@ -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); } diff --git a/src/main/java/model/Fire.java b/src/main/java/model/Fire.java index edc20746815c90857cf07a103c63147a65e38f79..157258a8a47c702ef48eb83cf336493d78e6225e 100644 --- a/src/main/java/model/Fire.java +++ b/src/main/java/model/Fire.java @@ -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)); } diff --git a/src/main/java/model/FireFighter.java b/src/main/java/model/FireFighter.java index 139a030f7a0f149840b749ce7a35e062ca262118..96fddbfc0ccaec446cfd264994326d249a7791fd 100644 --- a/src/main/java/model/FireFighter.java +++ b/src/main/java/model/FireFighter.java @@ -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); } diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java index 1aaa4f23fa21611a66e1ab44b58d1124bd6ed7e3..b58ba0bde7dc7b0d18d4a1ab85e779d46fa8d9bc 100644 --- a/src/main/java/model/FirefighterBoard.java +++ b/src/main/java/model/FirefighterBoard.java @@ -1,5 +1,6 @@ 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); } diff --git a/src/main/java/model/ModelElement.java b/src/main/java/model/ModelElement.java index b441468ecdb207a1e981278f4a2a7c19be8a46a1..b151e953b94e3d7e59d53e28dfbe60e866359ad9 100644 --- a/src/main/java/model/ModelElement.java +++ b/src/main/java/model/ModelElement.java @@ -1,9 +1,14 @@ package model; public enum ModelElement { - FIREFIGHTER, - FIRE, - CLOUD, - ROAD; + + FIREFIGHTER(10), + FIRE(10), + CLOUD(10), + ROAD(5); + + ModelElement(int initialNumber) { + + } } diff --git a/src/main/java/model/Obstacle.java b/src/main/java/model/Obstacle.java index b9347496ea1b97ab06493d0f376b0ff33fcfc6d2..f4e8cf358c491db9c46e73d69787ae9cac63b3f1 100644 --- a/src/main/java/model/Obstacle.java +++ b/src/main/java/model/Obstacle.java @@ -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; }