diff --git a/src/main/java/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java index d20a636d44bff5a0dde7772cfcc0f10d27a264fc..879c96b160f38bae4cd47433c8dfbc4e6ae1bdf4 100644 --- a/src/main/java/app/SimulatorApplication.java +++ b/src/main/java/app/SimulatorApplication.java @@ -57,4 +57,5 @@ public class SimulatorApplication extends javafx.application.Application { public static void main(String[] args) { launch(args); } + } diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java index 3291416ce093e7e302361b4aa2d7ae26d064851e..3482ecee980103fe888f90a7a2d4aef5b1d51124 100644 --- a/src/main/java/controller/Controller.java +++ b/src/main/java/controller/Controller.java @@ -130,7 +130,7 @@ public class Controller { } public void initialize(int squareWidth, int squareHeight, int columnCount, - int rowCount, int initialFireCount, int initialFirefighterCount) { + int rowCount, int initialFireCount, int initialFirefighterCount) { grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight); this.setModel(new FirefighterBoard(columnCount, rowCount, initialFireCount, initialFirefighterCount)); repaintGrid(); @@ -144,4 +144,4 @@ public class Controller { private void updateGenerationLabel(int value){ generationNumberLabel.setText(Integer.toString(value)); } -} \ No newline at end of file +} diff --git a/src/main/java/model/Element/FireFigther.java b/src/main/java/model/Element/FireFigther.java new file mode 100644 index 0000000000000000000000000000000000000000..2408cd60d55a9a0c64a8fbbb846d0e11afd520be --- /dev/null +++ b/src/main/java/model/Element/FireFigther.java @@ -0,0 +1,41 @@ +package model.Element; + +import util.Position; +import view.ViewElement; + +import java.util.List; +import java.util.Map; + +import static util.Tools.*; + +public class FireFigther implements ModelElement{ + @Override + public void update(Position position, Map<Position, List<ModelElement>> board, int step, int columnCount, int rowCount) { + for (Position position1 : neighbors(position, rowCount, columnCount)) { + if (board.containsKey(position1)) { + if (board.get(position1).contains(new Fire())) { + extinguish(position,board); + return; + } + + } + + } + Position newPositionStep = neighborClosestToFire(position,board,rowCount,columnCount); + extinguish(newPositionStep,board); + addElement(newPositionStep,board,new MotorisedFirefigther()); + removeElement(position,board,new MotorisedFirefigther()); + + + } + + @Override + public ViewElement getViewElement() { + return ViewElement.FIREFIGHTER; + } + + @Override + public boolean equals(Object obj) { + return obj instanceof FireFigther; + } +} diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java index e7e11915a87dab3b363164164454a1577d19b150..c520278216887e6f8dca58ce583867af44018a09 100644 --- a/src/main/java/model/FirefighterBoard.java +++ b/src/main/java/model/FirefighterBoard.java @@ -13,23 +13,30 @@ import static util.Tools.addElement; public class FirefighterBoard implements Board<List<ModelElement>> { private final int columnCount; private final int rowCount; - + private int initialFireCount ; + private int initialFirefighterCount; private Map<Position,List<ModelElement>>board; - private Map<ModelElement,Integer>intialboard; + private int step = 0; private final Random randomGenerator = new Random(); - public FirefighterBoard(int columnCount, int rowCount, Map<ModelElement,Integer>intialboard) { + public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount) { this.columnCount = columnCount; this.rowCount = rowCount; + this.initialFirefighterCount=initialFirefighterCount; + this.initialFireCount=initialFireCount; board=new HashMap<>(); - initializeElements(new Fire); + initializeElements(); } - public void initializeElements(ModelElement modelElement) { - for (int index = 0; index < intialboard.get(modelElement); index++) - addElement(randomPosition(),board,modelElement); + public void initializeElements() { + for (int index = 0; index < initialFireCount; index++) { + addElement(randomPosition(),board,new Fire()); + } + for (int index = 0; index < initialFirefighterCount; index++) { + addElement(randomPosition(),board,new FireFigther()); + } } private Position randomPosition() { @@ -60,9 +67,9 @@ public class FirefighterBoard implements Board<List<ModelElement>> { for (Position position:copieBord.keySet() - ) { + ) { for (ModelElement element:copieBord.get(position) - ) { + ) { element.update(position,board,step,columnCount,rowCount); } @@ -79,7 +86,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> { public int stepNumber() { return step; } - + @Override public void reset() { step = 0; @@ -96,4 +103,4 @@ public class FirefighterBoard implements Board<List<ModelElement>> { } -} \ No newline at end of file +} diff --git a/src/main/java/util/Tools.java b/src/main/java/util/Tools.java index 1abf0f3705b78288c57e838188eaa50752380ad4..84098d694fe88cc0c3cfe57e7cfe6e764be555ec 100644 --- a/src/main/java/util/Tools.java +++ b/src/main/java/util/Tools.java @@ -7,6 +7,8 @@ import model.Element.Mountain; import java.util.*; + + public class Tools { public static List<Position> neighbors(Position position , int rowCount , int columnCount) { List<Position> list = new ArrayList<>(); @@ -36,7 +38,6 @@ public class Tools { } toVisit.add(adjacent); seen.add(adjacent); - HashMap<Position, Position> firstMove = new HashMap firstMove.put(adjacent, firstMove.get(current)); } @@ -67,4 +68,5 @@ public class Tools { } + } diff --git a/src/test/java/model/FirefighterBoardTest.java b/src/test/java/model/FirefighterBoardTest.java index 4feb1d1d4dc8fead78109ae758d521aa91797c25..532a38b409c2209d14d637d393a9b5d0b6fd11ad 100644 --- a/src/test/java/model/FirefighterBoardTest.java +++ b/src/test/java/model/FirefighterBoardTest.java @@ -1,5 +1,6 @@ package model; +import model.Element.Fire; import model.Element.ModelElement; import org.junit.jupiter.api.Test; import util.Position; @@ -33,8 +34,8 @@ public class FirefighterBoardTest { 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); + board.setState(List.of(new Fire()), position); + assertThat(board.getState(position)).containsExactly(new Fire()); } }