diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java deleted file mode 100644 index 3ed1ec4f1f8a7a47bcecb56de9e86e8c5d43d1ba..0000000000000000000000000000000000000000 --- a/src/main/java/model/FirefighterBoard.java +++ /dev/null @@ -1,162 +0,0 @@ -package model; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.Set; - -import util.Position; -import util.TargetStrategy; - - -public class FirefighterBoard implements Board<List<ModelElement>> { - private final int columnCount; - private final int rowCount; - private final int initialFireCount; - private final int initialFirefighterCount; - private final TargetStrategy targetStrategy = new TargetStrategy(); - private List<Position> firefighterPositions; - private Set<Position> firePositions; - private Map<Position, List<Position>> neighbors = new HashMap<Position, List<Position>>(); - private final Position[][] positions; - private int step = 0; - private final Random randomGenerator = new Random(); - - public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount) { - this.columnCount = columnCount; - this.rowCount = rowCount; - this.positions = new Position[rowCount][columnCount]; - 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++) { - 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]); - neighbors.put(positions[row][column], list); - } - this.initialFireCount = initialFireCount; - this.initialFirefighterCount = initialFirefighterCount; - initializeElements(); - } - - public void initializeElements() { - firefighterPositions = new ArrayList<>(); - firePositions = new HashSet<>(); - for (int index = 0; index < initialFireCount; index++) - firePositions.add(randomPosition()); - for (int index = 0; index < initialFirefighterCount; index++) - firefighterPositions.add(randomPosition()); - } - - private Position randomPosition() { - return new Position(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(columnCount)); - } - - @Override - public List<ModelElement> getState(Position position) { - List<ModelElement> result = new ArrayList<>(); - for (Position firefighterPosition : firefighterPositions) - if (firefighterPosition.equals(position)) - result.add(ModelElement.FIREFIGHTER); - if (firePositions.contains(position)) - result.add(ModelElement.FIRE); - return result; - } - - @Override - public int rowCount() { - return rowCount; - } - - @Override - public int columnCount() { - return columnCount; - } - - public List<Position> updateToNextGeneration() { - List<Position> modifiedPositions = updateFirefighters(); - modifiedPositions.addAll(updateFires()); - step++; - return modifiedPositions; - } - - private List<Position> updateFires() { - List<Position> modifiedPositions = new ArrayList<>(); - if (step % 2 == 0) { - List<Position> newFirePositions = new ArrayList<>(); - for (Position fire : firePositions) { - newFirePositions.addAll(neighbors.get(fire)); - } - firePositions.addAll(newFirePositions); - modifiedPositions.addAll(newFirePositions); - } - return modifiedPositions; - - } - - @Override - public int stepNumber() { - return step; - } - - private List<Position> updateFirefighters() { - List<Position> modifiedPosition = new ArrayList<>(); - List<Position> firefighterNewPositions = new ArrayList<>(); - for (Position firefighterPosition : firefighterPositions) { - Position newFirefighterPosition = - targetStrategy.neighborClosestToFire(firefighterPosition, - firePositions, neighbors); - firefighterNewPositions.add(newFirefighterPosition); - extinguish(newFirefighterPosition); - modifiedPosition.add(firefighterPosition); - modifiedPosition.add(newFirefighterPosition); - List<Position> neighborFirePositions = neighbors.get(newFirefighterPosition).stream() - .filter(firePositions::contains).toList(); - for (Position firePosition : neighborFirePositions){ - - modifiedPosition.addAll(neighborFirePositions); - extinguish(firePosition); - } - } - firefighterPositions = firefighterNewPositions; - return modifiedPosition; - } - - @Override - public void reset() { - step = 0; - initializeElements(); - } - - private void extinguish(Position position) { - firePositions.remove(position); - } - - - @Override - public void setState(List<ModelElement> state, Position position) { - firePositions.remove(position); - for (; ; ) { - if (!firefighterPositions.remove(position)) break; - } - for (ModelElement element : state) { - switch (element) { - case FIRE -> firePositions.add(position); - case FIREFIGHTER -> firefighterPositions.add(position); - } - } - } - - @Override - public void setState(Entity state, Position position, boolean replaceStates) { - throw new UnsupportedOperationException("Unimplemented method 'setState'"); - } - -} \ No newline at end of file diff --git a/src/main/java/model/ModelElement.java b/src/main/java/model/ModelElement.java deleted file mode 100644 index 759eee5e54c3a39472d8f7defbbbe6a2b67b8f00..0000000000000000000000000000000000000000 --- a/src/main/java/model/ModelElement.java +++ /dev/null @@ -1,5 +0,0 @@ -package model; - -public enum ModelElement { - FIREFIGHTER, FIRE -} diff --git a/src/test/java/model/FirefighterBoardTest.java b/src/test/java/model/FirefighterBoardTest.java deleted file mode 100644 index 25cc8dbca8acea698879df68a5006a179f281ecc..0000000000000000000000000000000000000000 --- a/src/test/java/model/FirefighterBoardTest.java +++ /dev/null @@ -1,39 +0,0 @@ -package model; - -import org.junit.jupiter.api.Test; -import util.Position; - -import java.util.List; - -import static org.assertj.core.api.Assertions.*; - -public class FirefighterBoardTest { - @Test - void testColumnCount(){ - Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3); - assertThat(board.columnCount()).isEqualTo(20); - } - @Test - void testRowCount(){ - Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3); - assertThat(board.rowCount()).isEqualTo(10); - } - @Test - void testStepNumber(){ - Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3); - for(int index = 0; index < 10; index++){ - assertThat(board.stepNumber()).isEqualTo(index); - board.updateToNextGeneration(); - } - assertThat(board.stepNumber()).isEqualTo(10); - } - @Test - void testGetState_afterSet(){ - Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 0, 0); - Position position = new Position(1,2); - assertThat(board.getState(position)).isEmpty(); - board.setState(List.of(ModelElement.FIRE), position); - assertThat(board.getState(position)).containsExactly(ModelElement.FIRE); - } - -}