diff --git a/.gradle/8.4/checksums/checksums.lock b/.gradle/8.4/checksums/checksums.lock index fd7ac3b6a738f01bf77b5ff78013c34a51e23dc9..687f4f2689f36141e55132a03a06f37ea20d28c3 100644 Binary files a/.gradle/8.4/checksums/checksums.lock and b/.gradle/8.4/checksums/checksums.lock differ diff --git a/.gradle/8.4/checksums/md5-checksums.bin b/.gradle/8.4/checksums/md5-checksums.bin index 20ecb22ad4851fd079addcb6c12124b0f5737318..8c03806985ac6e3e9759c9dafd4f5fbe741086e0 100644 Binary files a/.gradle/8.4/checksums/md5-checksums.bin and b/.gradle/8.4/checksums/md5-checksums.bin differ diff --git a/.gradle/8.4/checksums/sha1-checksums.bin b/.gradle/8.4/checksums/sha1-checksums.bin index abb1d0193715746820008a24f65141ca7e19ad62..cb6d5a21a59a742866df2474925984a3d6e5f40d 100644 Binary files a/.gradle/8.4/checksums/sha1-checksums.bin and b/.gradle/8.4/checksums/sha1-checksums.bin differ diff --git a/.gradle/8.4/dependencies-accessors/dependencies-accessors.lock b/.gradle/8.4/dependencies-accessors/dependencies-accessors.lock index 5ef2939589a88791a8553f37175c2cedbad524df..c150f374e8350fdc4d0b480b32e0bc156ecdb4f0 100644 Binary files a/.gradle/8.4/dependencies-accessors/dependencies-accessors.lock and b/.gradle/8.4/dependencies-accessors/dependencies-accessors.lock differ diff --git a/.gradle/8.4/executionHistory/executionHistory.bin b/.gradle/8.4/executionHistory/executionHistory.bin index 0d4a8ebf59ea742fee1e92e4b9d30ed8d7c71793..14de053e2be6fbb2ca7891822fcb1d5eb3ead8d2 100644 Binary files a/.gradle/8.4/executionHistory/executionHistory.bin and b/.gradle/8.4/executionHistory/executionHistory.bin differ diff --git a/.gradle/8.4/executionHistory/executionHistory.lock b/.gradle/8.4/executionHistory/executionHistory.lock index cb6fba4af0b9e6e4d7e385c629de6caea9941218..c87fcc9349a2ef81dfe68895e7011b540ebe0730 100644 Binary files a/.gradle/8.4/executionHistory/executionHistory.lock and b/.gradle/8.4/executionHistory/executionHistory.lock differ diff --git a/.gradle/8.4/fileHashes/fileHashes.bin b/.gradle/8.4/fileHashes/fileHashes.bin index 40582fde45f8a5bf38d11963cb946a56796f4e80..ee1911fe5301189769c38cd829c3ffe30c08f0a9 100644 Binary files a/.gradle/8.4/fileHashes/fileHashes.bin and b/.gradle/8.4/fileHashes/fileHashes.bin differ diff --git a/.gradle/8.4/fileHashes/fileHashes.lock b/.gradle/8.4/fileHashes/fileHashes.lock index af3a067a1f25d796969477742a0edeab7d7a1fc5..a6b915a90cb046cfc12791a367d93eeb30bd8cf0 100644 Binary files a/.gradle/8.4/fileHashes/fileHashes.lock and b/.gradle/8.4/fileHashes/fileHashes.lock differ diff --git a/.gradle/8.4/fileHashes/resourceHashesCache.bin b/.gradle/8.4/fileHashes/resourceHashesCache.bin index 8f977fbd3de0680e252dceb47eef58553089896d..6cd79388e76bb5f34544f1b41604251d8437dcb1 100644 Binary files a/.gradle/8.4/fileHashes/resourceHashesCache.bin and b/.gradle/8.4/fileHashes/resourceHashesCache.bin differ diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 1064ef65391d6dc53282a8ba25be825d7b72ed47..7903126a0dcdbfde39041e8a6de5812e36679bf7 100644 Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties index a5079eb7d8dbdb6c5d4311eb4b547d167fd748f7..90154715c19ffcb4cfd832c6c62fcfe3c445afac 100644 --- a/.gradle/buildOutputCleanup/cache.properties +++ b/.gradle/buildOutputCleanup/cache.properties @@ -1,2 +1,2 @@ -#Thu Nov 09 10:27:52 CET 2023 +#Mon Nov 13 20:29:54 CET 2023 gradle.version=8.4 diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin index b52382e1ea9a4b561468112b8df7504d0a8cab34..9950dc5e73e58206fe7f141e701e984fedcc0ab0 100644 Binary files a/.gradle/buildOutputCleanup/outputFiles.bin and b/.gradle/buildOutputCleanup/outputFiles.bin differ diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe new file mode 100644 index 0000000000000000000000000000000000000000..e2a27b4fa137df29ad7ad2b30eb568a77facaacd Binary files /dev/null and b/.gradle/file-system.probe differ diff --git a/build/classes/java/main/app/SimulatorApplication.class b/build/classes/java/main/app/SimulatorApplication.class index b20b834ef489ed0cfcf6f12e7993b40632a049e9..2792d63b92517bb76234c95f54d1ac8669770999 100644 Binary files a/build/classes/java/main/app/SimulatorApplication.class and b/build/classes/java/main/app/SimulatorApplication.class differ diff --git a/build/classes/java/main/controller/Controller.class b/build/classes/java/main/controller/Controller.class index 408d092cf56a29ba8a5a3b62eaff45c69e64478e..74013efab5e05f9243deca053906751ea238f241 100644 Binary files a/build/classes/java/main/controller/Controller.class and b/build/classes/java/main/controller/Controller.class differ diff --git a/build/classes/java/main/model/Board.class b/build/classes/java/main/model/Board.class index 964278193ef90b7d61ea16d7819580a1bc368733..a78d2b182c87683650b0972590097ab4611719be 100644 Binary files a/build/classes/java/main/model/Board.class and b/build/classes/java/main/model/Board.class differ diff --git a/build/classes/java/main/model/BoardElement.class b/build/classes/java/main/model/BoardElement.class index e6407e3436efd6f66cef461a3057ddad781ec1ef..b7da37d481527392ebf91688895cc27b0ede2413 100644 Binary files a/build/classes/java/main/model/BoardElement.class and b/build/classes/java/main/model/BoardElement.class differ diff --git a/build/classes/java/main/model/Builder/ConcreteGameBuilder.class b/build/classes/java/main/model/Builder/ConcreteGameBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..66850dd8e50d617a3da2c6c02c18f71cdc9daec6 Binary files /dev/null and b/build/classes/java/main/model/Builder/ConcreteGameBuilder.class differ diff --git a/build/classes/java/main/model/Builder/GameBuilder.class b/build/classes/java/main/model/Builder/GameBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..6b7721744a4ab2dbde7979ff7263e54e46fac025 Binary files /dev/null and b/build/classes/java/main/model/Builder/GameBuilder.class differ diff --git a/build/classes/java/main/model/Builder/GameManage.class b/build/classes/java/main/model/Builder/GameManage.class new file mode 100644 index 0000000000000000000000000000000000000000..af3536b151a408b96923e5356e098c9e646509d4 Binary files /dev/null and b/build/classes/java/main/model/Builder/GameManage.class differ diff --git a/build/classes/java/main/model/EmptyElement.class b/build/classes/java/main/model/EmptyElement.class index 1b4302dfb07e50dd922bb3bfc0397dd9181191c2..5069ea14ef0a85701717a0b7537a043f6dcdd4af 100644 Binary files a/build/classes/java/main/model/EmptyElement.class and b/build/classes/java/main/model/EmptyElement.class differ diff --git a/build/classes/java/main/model/ExtinguishFire/Cloud.class b/build/classes/java/main/model/ExtinguishFire/Cloud.class index 9de56c2328937cd36048ec37406dc9240e0c39b7..dd940b0174a4a149abcf9599d409366672fda4e4 100644 Binary files a/build/classes/java/main/model/ExtinguishFire/Cloud.class and b/build/classes/java/main/model/ExtinguishFire/Cloud.class differ diff --git a/build/classes/java/main/model/ExtinguishFire/ExtinguishFire.class b/build/classes/java/main/model/ExtinguishFire/ExtinguishFire.class index 08283af2f289a834db27ad5290c80428d2d17016..a4d622e74ad0dac8a1e1ee24f055fadd19df68df 100644 Binary files a/build/classes/java/main/model/ExtinguishFire/ExtinguishFire.class and b/build/classes/java/main/model/ExtinguishFire/ExtinguishFire.class differ diff --git a/build/classes/java/main/model/ExtinguishFire/FireFighter.class b/build/classes/java/main/model/ExtinguishFire/FireFighter.class index ef5f30ff2197eb4fae3cd0571d46d41d2ace1ba5..02776eb6f209146e6f2de1891a6ecafbc4aa688a 100644 Binary files a/build/classes/java/main/model/ExtinguishFire/FireFighter.class and b/build/classes/java/main/model/ExtinguishFire/FireFighter.class differ diff --git a/build/classes/java/main/model/Flammable/Fire.class b/build/classes/java/main/model/Flammable/Fire.class index 54c22d9aa466d3b1562090fce45b0f280f3518b3..c26b25067e3470b44d70d004d5f4c57388352c7a 100644 Binary files a/build/classes/java/main/model/Flammable/Fire.class and b/build/classes/java/main/model/Flammable/Fire.class differ diff --git a/build/classes/java/main/model/Flammable/Flammable.class b/build/classes/java/main/model/Flammable/Flammable.class index fe96542831296a4c3aaf59973ade237c17d4a0a6..bf120cd5de3e083cfef4bb7079bfbbbd2f05fb97 100644 Binary files a/build/classes/java/main/model/Flammable/Flammable.class and b/build/classes/java/main/model/Flammable/Flammable.class differ diff --git a/build/classes/java/main/model/GameBoard.class b/build/classes/java/main/model/GameBoard.class index dc92f4792309c5d900468d456582f61f1497b80e..9a2ab100b7a3ff1b6282d6ac48938001da2a7bdb 100644 Binary files a/build/classes/java/main/model/GameBoard.class and b/build/classes/java/main/model/GameBoard.class differ diff --git a/build/classes/java/main/model/Visitor/CrossMountain.class b/build/classes/java/main/model/Visitor/CrossMountain.class index ddbfddb8f7cee6c257ddbd45252852a741b3db40..69f63f7cd3d38ef2cee410a9416eee60dd7cfd4f 100644 Binary files a/build/classes/java/main/model/Visitor/CrossMountain.class and b/build/classes/java/main/model/Visitor/CrossMountain.class differ diff --git a/build/classes/java/main/model/Visitor/CrossRoad.class b/build/classes/java/main/model/Visitor/CrossRoad.class index ee0df02352663a36d691bb3081a31d94c5028c0d..6846553e8ac3d3e4fee6d99e85266f45c4b7a798 100644 Binary files a/build/classes/java/main/model/Visitor/CrossRoad.class and b/build/classes/java/main/model/Visitor/CrossRoad.class differ diff --git a/build/classes/java/main/model/Visitor/FireFinder.class b/build/classes/java/main/model/Visitor/FireFinder.class index 05ddcb141f461b8f1e4f42cb7b2c32083b234b7f..3eee0b6a9e0b6ef841b3a41e019f5871a34211a8 100644 Binary files a/build/classes/java/main/model/Visitor/FireFinder.class and b/build/classes/java/main/model/Visitor/FireFinder.class differ diff --git a/build/classes/java/main/model/Visitor/Visitor.class b/build/classes/java/main/model/Visitor/Visitor.class index d9ae8e3a8a6375c074840b3b24e35ce02a6d6b1e..6bda2c96ed0d078985d77b993144828ec7de1b9c 100644 Binary files a/build/classes/java/main/model/Visitor/Visitor.class and b/build/classes/java/main/model/Visitor/Visitor.class differ diff --git a/build/classes/java/main/module-info.class b/build/classes/java/main/module-info.class index 7a769b70875d147512dd0dc3f725d1c113981548..228b8be064ecf35c69bb788937ce7ff8ab50174e 100644 Binary files a/build/classes/java/main/module-info.class and b/build/classes/java/main/module-info.class differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/BoardElement.class.uniqueId13 b/build/tmp/compileJava/compileTransaction/stash-dir/BoardElement.class.uniqueId13 new file mode 100644 index 0000000000000000000000000000000000000000..b7da37d481527392ebf91688895cc27b0ede2413 Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/BoardElement.class.uniqueId13 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Controller.class.uniqueId6 b/build/tmp/compileJava/compileTransaction/stash-dir/Controller.class.uniqueId6 new file mode 100644 index 0000000000000000000000000000000000000000..74013efab5e05f9243deca053906751ea238f241 Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/Controller.class.uniqueId6 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/CrossMountain.class.uniqueId9 b/build/tmp/compileJava/compileTransaction/stash-dir/CrossMountain.class.uniqueId9 new file mode 100644 index 0000000000000000000000000000000000000000..69f63f7cd3d38ef2cee410a9416eee60dd7cfd4f Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/CrossMountain.class.uniqueId9 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/CrossRoad.class.uniqueId2 b/build/tmp/compileJava/compileTransaction/stash-dir/CrossRoad.class.uniqueId2 new file mode 100644 index 0000000000000000000000000000000000000000..6846553e8ac3d3e4fee6d99e85266f45c4b7a798 Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/CrossRoad.class.uniqueId2 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/EmptyElement.class.uniqueId8 b/build/tmp/compileJava/compileTransaction/stash-dir/EmptyElement.class.uniqueId8 new file mode 100644 index 0000000000000000000000000000000000000000..5069ea14ef0a85701717a0b7537a043f6dcdd4af Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/EmptyElement.class.uniqueId8 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ExtinguishFire.class.uniqueId0 b/build/tmp/compileJava/compileTransaction/stash-dir/ExtinguishFire.class.uniqueId0 index 08283af2f289a834db27ad5290c80428d2d17016..a4d622e74ad0dac8a1e1ee24f055fadd19df68df 100644 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/ExtinguishFire.class.uniqueId0 and b/build/tmp/compileJava/compileTransaction/stash-dir/ExtinguishFire.class.uniqueId0 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Fire.class.uniqueId7 b/build/tmp/compileJava/compileTransaction/stash-dir/Fire.class.uniqueId7 new file mode 100644 index 0000000000000000000000000000000000000000..c26b25067e3470b44d70d004d5f4c57388352c7a Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/Fire.class.uniqueId7 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/FireFighter.class.uniqueId12 b/build/tmp/compileJava/compileTransaction/stash-dir/FireFighter.class.uniqueId12 new file mode 100644 index 0000000000000000000000000000000000000000..02776eb6f209146e6f2de1891a6ecafbc4aa688a Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/FireFighter.class.uniqueId12 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/FireFinder.class.uniqueId10 b/build/tmp/compileJava/compileTransaction/stash-dir/FireFinder.class.uniqueId10 new file mode 100644 index 0000000000000000000000000000000000000000..3eee0b6a9e0b6ef841b3a41e019f5871a34211a8 Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/FireFinder.class.uniqueId10 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/FirefighterGrid.class.uniqueId3 b/build/tmp/compileJava/compileTransaction/stash-dir/FirefighterGrid.class.uniqueId3 new file mode 100644 index 0000000000000000000000000000000000000000..d2bbe7e11dd4d28c3fba73284af14ce15b59f73f Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/FirefighterGrid.class.uniqueId3 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Flammable.class.uniqueId1 b/build/tmp/compileJava/compileTransaction/stash-dir/Flammable.class.uniqueId1 new file mode 100644 index 0000000000000000000000000000000000000000..bf120cd5de3e083cfef4bb7079bfbbbd2f05fb97 Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/Flammable.class.uniqueId1 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/GameManage.class.uniqueId4 b/build/tmp/compileJava/compileTransaction/stash-dir/GameManage.class.uniqueId4 new file mode 100644 index 0000000000000000000000000000000000000000..af3536b151a408b96923e5356e098c9e646509d4 Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/GameManage.class.uniqueId4 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Grid.class.uniqueId5 b/build/tmp/compileJava/compileTransaction/stash-dir/Grid.class.uniqueId5 new file mode 100644 index 0000000000000000000000000000000000000000..cedfc6abc7646d2aeb91d7df5227cbdb1cae0317 Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/Grid.class.uniqueId5 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Visitor.class.uniqueId11 b/build/tmp/compileJava/compileTransaction/stash-dir/Visitor.class.uniqueId11 new file mode 100644 index 0000000000000000000000000000000000000000..6bda2c96ed0d078985d77b993144828ec7de1b9c Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/Visitor.class.uniqueId11 differ diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index fb3776eb8d47f0b29bebf5c61e2df8876bd80e17..4bd233e0eadb98e8fa5873e7b16630662e933ad2 100644 Binary files a/build/tmp/compileJava/previous-compilation-data.bin and b/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/src/main/java/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java index 2646eb7602accd2b174ae3a116377f828e0b1473..351abfe45780ac3aa3dab486bd37909748981d6f 100644 --- a/src/main/java/app/SimulatorApplication.java +++ b/src/main/java/app/SimulatorApplication.java @@ -17,9 +17,10 @@ public class SimulatorApplication extends javafx.application.Application { private static final int COLUMN_COUNT = 20; private static final int SQUARE_WIDTH = 30; private static final int SQUARE_HEIGHT = 30; - public static final int INITIAL_FIRE_COUNT = 3; - public static final int INITIAL_FIREFIGHTER_COUNT = 6; - + public static final int INITIAL_FIRE_COUNT = 5; + public static final int INITIAL_FIREFIGHTER_COUNT = 3; + public static final int INITIAL_CLOUD_COUNT = 2; + public static final int INITIAL_MOTORIZEDFIREFIGHTER_COUNT = 2; private Stage primaryStage; private Parent view; private void initializePrimaryStage(Stage primaryStage) { @@ -44,7 +45,7 @@ public class SimulatorApplication extends javafx.application.Application { view = loader.load(); Controller controller = loader.getController(); controller.initialize(SQUARE_WIDTH, SQUARE_HEIGHT, COLUMN_COUNT, ROW_COUNT, - INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT); + INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT, INITIAL_CLOUD_COUNT,INITIAL_MOTORIZEDFIREFIGHTER_COUNT); } private void showScene() { diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java index 95a6293fc078e81ce97e67436766f956d2de8ea9..8719a0a6feb61e6e9acae11ce37ac5310eddc159 100644 --- a/src/main/java/controller/Controller.java +++ b/src/main/java/controller/Controller.java @@ -10,14 +10,9 @@ import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.ToggleButton; import javafx.scene.control.ToggleGroup; -import javafx.scene.paint.Color; import javafx.util.Duration; import javafx.util.Pair; import model.*; -import model.ExtinguishFire.FireFighter; -import model.Flammable.Fire; -import model.Visitor.FireFighterFinder; -import model.Visitor.FireFinder; import util.Position; import view.Grid; @@ -56,20 +51,13 @@ public class Controller { pauseToggleButton.setSelected(true); } - private void setModel(GameBoard gameBoard) { + /* private void setModel(GameBoard gameBoard) { this.board = requireNonNull(gameBoard, "GameBoard.model is null"); - } + }*/ private void updateBoard(){ - List<Position> updatedPositions = board.updateToNextGeneration(); - List<Pair<Position, BoardElement>> updatedSquares = new ArrayList<>(); - for(Position updatedPosition : updatedPositions){ - List<BoardElement> squareState = board.getState(updatedPosition); - BoardElement boardElement = getViewElement(squareState); - updatedSquares.add(new Pair<>(updatedPosition,boardElement)); - } - grid.repaint(updatedSquares); - updateGenerationLabel(board.stepNumber()); + board.updateToNextGeneration(); + repaintGrid(); } private void repaintGrid(){ @@ -78,7 +66,7 @@ public class Controller { model.BoardElement[][] boardElements = new model.BoardElement[rowCount][columnCount]; for(int column = 0; column < columnCount; column++) for(int row = 0; row < rowCount; row++){ - if(board.getElementPosition().containsKey(new Position(row,column))){ + if(board.getElementPosition().containsKey(new Position(row,column)) && board.getElementPosition().get(new Position(row,column)).size()!=0){ boardElements[row][column] = board.getElementPosition().get(new Position(row,column)).get(0); }else{ boardElements[row][column]=new EmptyElement(); @@ -88,19 +76,6 @@ public class Controller { updateGenerationLabel(board.stepNumber()); } - private BoardElement getViewElement(List<BoardElement> squareState) { - for (BoardElement boardElement : squareState) { - if (boardElement.accept(new FireFinder())) { - return new Fire(Color.RED); - } else if (boardElement.accept(new FireFighterFinder())) { - return new FireFighter(Color.BLUE); - } - } - return new EmptyElement(); - - } - - private void initializeTimeline() { Duration duration = new Duration(Controller.PERIOD_IN_MILLISECONDS); EventHandler<ActionEvent> eventHandler = @@ -134,9 +109,10 @@ public class Controller { } public void initialize(int squareWidth, int squareHeight, int columnCount, - int rowCount, int initialFireCount, int initialFirefighterCount) { + int rowCount, int initialFireCount, int initialFirefighterCount,int initialCloudCount,int initialMotorizedFireFighterCount) { grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight); - this.setModel(new GameBoard(columnCount, rowCount, initialFireCount, initialFirefighterCount)); + board = new GameBoard(rowCount,columnCount,initialFireCount,initialFirefighterCount,initialCloudCount,initialMotorizedFireFighterCount); + board.initializeElements(); repaintGrid(); } diff --git a/src/main/java/model/Board.java b/src/main/java/model/Board.java index bb089a41406d57b0b2fe3d43b3c040cbd640b6b9..469590ddfbca6597b878794b33c75ebfbae8b5c8 100644 --- a/src/main/java/model/Board.java +++ b/src/main/java/model/Board.java @@ -48,7 +48,7 @@ public interface Board<S> { * * @return A list of positions that have changed during the update. */ - List<Position> updateToNextGeneration(); + void updateToNextGeneration(); /** * Reset the board to its initial state. diff --git a/src/main/java/model/BoardElement.java b/src/main/java/model/BoardElement.java index d81bfbd960bea825dada024453bb4f9e81f8a433..4100f828a2f9ee1ee61bcfa5ac84e75df95168a9 100644 --- a/src/main/java/model/BoardElement.java +++ b/src/main/java/model/BoardElement.java @@ -13,5 +13,5 @@ public interface BoardElement { Color getColor(); Boolean accept(Visitor visitor); - void initialize(int initialElementCount, HashMap<Position, ArrayList<BoardElement>> elementPosition); + void initialize(); } diff --git a/src/main/java/model/Builder/ConcreteGameBuilder.java b/src/main/java/model/Builder/ConcreteGameBuilder.java new file mode 100644 index 0000000000000000000000000000000000000000..0c367e38c7129e93b09c75108aa6571cc8c95a2b --- /dev/null +++ b/src/main/java/model/Builder/ConcreteGameBuilder.java @@ -0,0 +1,44 @@ +package model.Builder; + +public class ConcreteGameBuilder implements GameBuilder{ + int firefighter=0; + int fire=0; + int clouds=0; + int motorizedFireFighters=0; + int roads=0; + int mountains=0; + @Override + public GameBuilder setFire(int fires) { + this.fire=fires; + return this; + } + + @Override + public GameBuilder setFireFighter(int fireFighters) { + this.firefighter=fireFighters; + return this; + } + + @Override + public GameBuilder setCloud(int clouds) { + this.clouds=clouds; + return this; + } + + @Override + public GameBuilder setMotorizedFireFighter(int motorizedFireFighters) { + this.motorizedFireFighters=motorizedFireFighters; + return this; + } + + @Override + public GameBuilder setMountain(int mountains) { + this.mountains=mountains; + return this; + } + + @Override + public GameManage build() { + return new GameManage(fire,firefighter,clouds,motorizedFireFighters,roads,mountains); + } +} \ No newline at end of file diff --git a/src/main/java/model/Builder/FireFirefightersBuilder.java b/src/main/java/model/Builder/FireFirefightersBuilder.java new file mode 100644 index 0000000000000000000000000000000000000000..81761717ce8a6893a77b43fe360a863d6aa6b095 --- /dev/null +++ b/src/main/java/model/Builder/FireFirefightersBuilder.java @@ -0,0 +1,13 @@ +package model.Builder; + +public class FireFirefightersBuilder { + public void Build(int fires, int firefighters , int clouds , int motorizedFireFighter) { + ConcreteGameBuilder concreteGameBuilder; + concreteGameBuilder =new ConcreteGameBuilder(); + concreteGameBuilder.setFire(fires) + .setFireFighter(firefighters) + .setCloud(clouds) + .setMotorizedFireFighter(motorizedFireFighter) + .build(); + } +} diff --git a/src/main/java/model/Builder/GameBuilder.java b/src/main/java/model/Builder/GameBuilder.java new file mode 100644 index 0000000000000000000000000000000000000000..603ed19ba8f6b57d6b97439f6f5fef42e56c9488 --- /dev/null +++ b/src/main/java/model/Builder/GameBuilder.java @@ -0,0 +1,14 @@ +package model.Builder; + +public interface GameBuilder { + + model.Builder.GameBuilder setFire(int fire); + model.Builder.GameBuilder setFireFighter(int fireFighter); + model.Builder.GameBuilder setCloud(int cloud); + model.Builder.GameBuilder setMotorizedFireFighter(int motorizedFireFighter); + model.Builder.GameBuilder setMountain(int mountain); + + // TODO: 15/11/2023 la suite + GameManage build(); + +} diff --git a/src/main/java/model/Builder/GameManage.java b/src/main/java/model/Builder/GameManage.java new file mode 100644 index 0000000000000000000000000000000000000000..151135d213a60453e8c15cf0bbe1503da179fe65 --- /dev/null +++ b/src/main/java/model/Builder/GameManage.java @@ -0,0 +1,46 @@ +package model.Builder; + +import javafx.scene.paint.Color; +import model.ExtinguishFire.Cloud; +import model.ExtinguishFire.FireFighter; +import model.ExtinguishFire.MotorizedFireFighter; +import model.Flammable.Fire; + +public class GameManage { + private final int fires; + private final int firefighters; + private final int clouds; + private final int motorizedFireFighters; + private final int roads; + private final int mountains; + + + + public GameManage(int fires, int firefighters, int clouds, int motorizedFireFighters, int roads, int mountains) { + this.fires = fires; + this.firefighters = firefighters; + this.clouds = clouds; + this.motorizedFireFighters = motorizedFireFighters; + this.roads = roads; + this.mountains = mountains; + Initialize(); + } + + public void Initialize(){ + for(int i=0;i<fires;i++) { + new Fire(Color.RED); + } + for(int i=0;i<firefighters;i++) { + new FireFighter(Color.BLUE); + } + for(int i=0;i<clouds;i++) { + new Cloud(Color.DARKBLUE); + } + for(int i=0;i<motorizedFireFighters;i++) { + new MotorizedFireFighter(Color.ORANGE); + } + // TODO: 15/11/2023 la suite .... aussi l'initialisation va changer dans fire et firefighter + } + +} + diff --git a/src/main/java/model/EmptyElement.java b/src/main/java/model/EmptyElement.java index 80cae5ec9935be3f9b2e39f11f9e21a03b38314a..0834ed20164d8952c31219db4eef249683d40d72 100644 --- a/src/main/java/model/EmptyElement.java +++ b/src/main/java/model/EmptyElement.java @@ -19,7 +19,7 @@ public class EmptyElement implements BoardElement{ } @Override - public void initialize(int initialElementCount, HashMap<Position, ArrayList<BoardElement>> elementPosition) { + public void initialize() { } } diff --git a/src/main/java/model/ExtinguishFire/Cloud.java b/src/main/java/model/ExtinguishFire/Cloud.java index 5fa1c31b671d246b8662185ede204bd7504d7407..f4db6c7e384e6567f90372334b415a010b09988e 100644 --- a/src/main/java/model/ExtinguishFire/Cloud.java +++ b/src/main/java/model/ExtinguishFire/Cloud.java @@ -1,4 +1,74 @@ package model.ExtinguishFire; -public class Cloud { +import javafx.scene.paint.Color; +import model.BoardElement; +import model.GameBoard; +import model.Visitor.FireFinder; +import model.Visitor.Visitor; +import util.Position; + +import java.util.*; + +import static model.GameBoard.elementPosition; +import static model.GameBoard.randomPosition; + +public class Cloud implements ExtinguishFire{ + + Color color; + + public Cloud(Color color){ + this.color=color; + initialize(); + } + @Override + public Color getColor() { + return color; + } + + @Override + public Boolean accept(Visitor visitor) { + return visitor.visit(this); + } + + @Override + public void initialize() { + Position position = GameBoard.randomPosition(); + if (elementPosition.containsKey(position)) + elementPosition.get(position).add(this); + else { + ArrayList<BoardElement> boardElements = new ArrayList<>(); + boardElements.add(this); + elementPosition.put(position, boardElements); + } + } + + @Override + public void update(GameBoard gameBoard, Position position, HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition) { + List<Position> firePositions = new ArrayList<>(); + for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPosition.entrySet()) { + for (BoardElement element : entry.getValue()) { + if (element.accept(new FireFinder())) { + firePositions.add(entry.getKey()); + } + } + } + List<Position> neighbors = gameBoard.neighbors(position); + Random random = new Random(); + int randomIndex = random.nextInt(neighbors.size()); + Position newCloudPosition = neighbors.get(randomIndex); + if(newElementPosition.containsKey(newCloudPosition)){ + newElementPosition.get(newCloudPosition).add(this); + } + else{ + ArrayList<BoardElement> boardElements = new ArrayList<>(); + boardElements.add(this); + newElementPosition.put(newCloudPosition,boardElements); + } + extinguishPosition.add(newCloudPosition); + /*List<Position> neighborFirePositions = gameBoard.neighbors(newFirefighterPosition).stream() + .filter(firePositions::contains).toList(); + for(Position firePosition : neighborFirePositions) { + extinguishPosition.add(firePosition); + }*/ + } } diff --git a/src/main/java/model/ExtinguishFire/ExtinguishFire.java b/src/main/java/model/ExtinguishFire/ExtinguishFire.java index 491c3b88a886ada6400484863be6549b06f7f3e2..006a184b8dafa69d1dd97417c753609aa993d12c 100644 --- a/src/main/java/model/ExtinguishFire/ExtinguishFire.java +++ b/src/main/java/model/ExtinguishFire/ExtinguishFire.java @@ -6,12 +6,9 @@ import util.Position; import java.util.ArrayList; import java.util.HashMap; -import java.util.List; public interface ExtinguishFire extends BoardElement { - void initialize(int initialFireFighterCount, HashMap<Position, ArrayList<BoardElement>> elementPosition); - - List<Position> updateFirefighters(GameBoard gameBoard); + void update(GameBoard gameBoard , Position position, HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition); } diff --git a/src/main/java/model/ExtinguishFire/FireFighter.java b/src/main/java/model/ExtinguishFire/FireFighter.java index 155184ba7bdc86161c1c56c68b492ad767421621..73e882fcd02475c97582e1ae6cffa1d7e8098679 100644 --- a/src/main/java/model/ExtinguishFire/FireFighter.java +++ b/src/main/java/model/ExtinguishFire/FireFighter.java @@ -2,9 +2,8 @@ package model.ExtinguishFire; import javafx.scene.paint.Color; import model.BoardElement; -import model.Flammable.Fire; import model.GameBoard; -import model.Visitor.FireFighterFinder; +import model.Visitor.CrossMountain; import model.Visitor.FireFinder; import model.Visitor.Visitor; import util.Position; @@ -14,10 +13,13 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -public class FireFighter implements ExtinguishFire{ +import static model.GameBoard.elementPosition; + +public class FireFighter implements ExtinguishFire { Color color; public FireFighter(Color color){ this.color=color; + initialize(); } @Override public Color getColor() { @@ -30,70 +32,67 @@ public class FireFighter implements ExtinguishFire{ } @Override - public void initialize(int initialFireFighterCount, HashMap<Position, ArrayList<BoardElement>> elementPosition) { - FireFinder fireFinder=new FireFinder(); + public void initialize( ) { + CrossMountain crossMountain=new CrossMountain(); boolean canInitialise; - for (int index = 0; index < initialFireFighterCount; index++) { - Position position = GameBoard.randomPosition(); - if(elementPosition.containsKey(position)) { - for (;;) { - canInitialise = true; - for (BoardElement element : elementPosition.get(position)) { - if (element.accept(fireFinder)) { - canInitialise=false; - break; - } - } - if(canInitialise){ + Position position = GameBoard.randomPosition(); + if(elementPosition.containsKey(position)) { + for (;;) { + canInitialise = true; + for (BoardElement element : elementPosition.get(position)) { + if (element.accept(crossMountain)) { + canInitialise = false; break; } - position = GameBoard.randomPosition(); - if(!elementPosition.containsKey(position))break; } - if(elementPosition.containsKey(position)) - elementPosition.get(position).add(new FireFighter(Color.BLUE)); - else{ - ArrayList<BoardElement> boardElements = new ArrayList<>(); - boardElements.add(new FireFighter(Color.BLUE)); - elementPosition.put(position,boardElements); + if (canInitialise) { + break; } - continue; + position = GameBoard.randomPosition(); + if (!elementPosition.containsKey(position)) break; } - ArrayList<BoardElement> boardElements = new ArrayList<>(); - boardElements.add(new FireFighter(Color.BLUE)); - elementPosition.put(position,boardElements); + if (elementPosition.containsKey(position)) + elementPosition.get(position).add(this); + else { + ArrayList<BoardElement> boardElements = new ArrayList<>(); + boardElements.add(this); + elementPosition.put(position, boardElements); + } + } + ArrayList<BoardElement> boardElements = new ArrayList<>(); + boardElements.add(this); + elementPosition.put(position,boardElements); } @Override - public List<Position> updateFirefighters(GameBoard gameBoard) { - List<Position> result = new ArrayList<>(); - List<Position> firefighterPositions = new ArrayList<>(); - List<Position> firePositions = new ArrayList<>(); - for (Map.Entry<Position, ArrayList<BoardElement>> entry : gameBoard.getElementPosition().entrySet()) { - for (BoardElement element : entry.getValue()) { - if (element.accept(new FireFighterFinder())) { - firefighterPositions.add(entry.getKey()); - } - if (element.accept(new FireFinder())) { - firePositions.add(entry.getKey()); + public void update(GameBoard gameBoard, Position position, HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition) { + + List<Position> firePositions = new ArrayList<>(); + for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPosition.entrySet()) { + for (BoardElement element : entry.getValue()) { + if (element.accept(new FireFinder())) { + firePositions.add(entry.getKey()); + } } } - } - for (Position firefighterPosition : firefighterPositions) { - Position newFirefighterPosition = gameBoard.neighborClosestToFire(firefighterPosition); - gameBoard.getElementPosition().get(newFirefighterPosition).add(new FireFighter(Color.BLUE)); - gameBoard.extinguish(newFirefighterPosition); - result.add(firefighterPosition); - result.add(newFirefighterPosition); + Position newFirefighterPosition = gameBoard.neighborClosestToFire(position); + if(newElementPosition.containsKey(newFirefighterPosition)){ + newElementPosition.get(newFirefighterPosition).add(this); + } + else{ + ArrayList<BoardElement> boardElements = new ArrayList<>(); + boardElements.add(this); + newElementPosition.put(newFirefighterPosition,boardElements); + } + extinguishPosition.add(newFirefighterPosition); List<Position> neighborFirePositions = gameBoard.neighbors(newFirefighterPosition).stream() .filter(firePositions::contains).toList(); - for(Position firePosition : neighborFirePositions) - gameBoard.extinguish(firePosition); - result.addAll(neighborFirePositions); + for(Position firePosition : neighborFirePositions) { + extinguishPosition.add(firePosition); + } + } - return result; - } } diff --git a/src/main/java/model/ExtinguishFire/MotorizedFireFighter.java b/src/main/java/model/ExtinguishFire/MotorizedFireFighter.java index ef4d68ee00907de06dd030dc354df6e6f4e154cc..5d04606784c5f64e617b39e350fe85e3019c47ee 100644 --- a/src/main/java/model/ExtinguishFire/MotorizedFireFighter.java +++ b/src/main/java/model/ExtinguishFire/MotorizedFireFighter.java @@ -1,4 +1,107 @@ package model.ExtinguishFire; -public class MotorizedFireFighter { +import javafx.scene.paint.Color; +import model.BoardElement; +import model.GameBoard; +import model.Visitor.CrossMountain; +import model.Visitor.FireFinder; +import model.Visitor.Visitor; +import util.Position; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static model.GameBoard.elementPosition; + +public class MotorizedFireFighter implements ExtinguishFire { + + Color color; + + public MotorizedFireFighter(Color color){ + this.color=color; + initialize(); + } + @Override + public Color getColor() { + return color; + } + + @Override + public Boolean accept(Visitor visitor) { + return visitor.visit(this); + } + + @Override + public void initialize() { + CrossMountain crossMountain=new CrossMountain(); + boolean canInitialise; + Position position = GameBoard.randomPosition(); + if(elementPosition.containsKey(position)) { + for (;;) { + canInitialise = true; + for (BoardElement element : elementPosition.get(position)) { + if (element.accept(crossMountain)) { + canInitialise = false; + break; + } + } + if (canInitialise) { + break; + } + position = GameBoard.randomPosition(); + if (!elementPosition.containsKey(position)) break; + } + if (elementPosition.containsKey(position)) + elementPosition.get(position).add(this); + else { + ArrayList<BoardElement> boardElements = new ArrayList<>(); + boardElements.add(this); + elementPosition.put(position, boardElements); + } + + } + ArrayList<BoardElement> boardElements = new ArrayList<>(); + boardElements.add(this); + elementPosition.put(position,boardElements); + } + + @Override + public void update(GameBoard gameBoard, Position position, HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition) { + + List<Position> firePositions = new ArrayList<>(); + for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPosition.entrySet()) { + for (BoardElement element : entry.getValue()) { + if (element.accept(new FireFinder())) { + firePositions.add(entry.getKey()); + } + } + } + ArrayList<Position> newMotorizedFireFighterPositions = new ArrayList<>(); + Position newMotorizedFireFighterPosition1 = gameBoard.neighborClosestToFire(position); + newMotorizedFireFighterPositions.add(newMotorizedFireFighterPosition1); + Position newMotorizedFireFighterPosition2 = gameBoard.neighborClosestToFire(newMotorizedFireFighterPosition1); + newMotorizedFireFighterPositions.add(newMotorizedFireFighterPosition2); + + if(newElementPosition.containsKey(newMotorizedFireFighterPosition2)){ + newElementPosition.get(newMotorizedFireFighterPosition2).add(this); + } + else{ + ArrayList<BoardElement> boardElements = new ArrayList<>(); + boardElements.add(this); + newElementPosition.put(newMotorizedFireFighterPosition2,boardElements); + } + for(Position newPosition : newMotorizedFireFighterPositions) { + extinguishPosition.add(newPosition); + } + List<Position> neighborFirePositions = new ArrayList<>(); + neighborFirePositions.addAll(gameBoard.neighbors(newMotorizedFireFighterPosition1).stream() + .filter(firePositions::contains).toList()); + neighborFirePositions.addAll(gameBoard.neighbors(newMotorizedFireFighterPosition2).stream() + .filter(firePositions::contains).toList()); + for(Position firePosition : neighborFirePositions) { + extinguishPosition.add(firePosition); + } + } } diff --git a/src/main/java/model/Flammable/Fire.java b/src/main/java/model/Flammable/Fire.java index 37f5ad36aebf67eecd2e7b918d8845e89822b894..1d156d3ea1f521735df67fdaa6e27dd653205060 100644 --- a/src/main/java/model/Flammable/Fire.java +++ b/src/main/java/model/Flammable/Fire.java @@ -3,6 +3,8 @@ package model.Flammable; import javafx.scene.paint.Color; import model.BoardElement; import model.GameBoard; +import model.Visitor.CrossMountain; +import model.Visitor.CrossRoad; import model.Visitor.FireFinder; import model.Visitor.Visitor; import util.Position; @@ -15,6 +17,7 @@ public class Fire implements Flammable{ public Fire(Color color){ this.color = color; + initialize(); } @Override @@ -28,61 +31,86 @@ public class Fire implements Flammable{ } @Override - public void initialize(int initialFireCount, HashMap<Position, ArrayList<BoardElement>> elementPosition) { + public void initialize() { FireFinder fireFinder=new FireFinder(); Position position = GameBoard.randomPosition(); boolean canInitialise; - for (int index = 0; index < initialFireCount; index++) { - if(elementPosition.containsKey(position)) { - for (;;) { - canInitialise=true; - for (BoardElement element : elementPosition.get(position)) { - if (element.accept(fireFinder)) { - canInitialise=false; - break; - } - } - if(canInitialise){ + if(GameBoard.elementPosition.containsKey(position)) { + for (;;) { + canInitialise=true; + for (BoardElement element : GameBoard.elementPosition.get(position)) { + if (element.accept(fireFinder)) { + canInitialise=false; break; } - position = GameBoard.randomPosition(); - if(!elementPosition.containsKey(position))break; - } - if(elementPosition.containsKey(position)) - elementPosition.get(position).add(new Fire(Color.RED)); - else{ - ArrayList<BoardElement> boardElements = new ArrayList<>(); - boardElements.add(new Fire(Color.RED)); - elementPosition.put(position,boardElements); - } - continue; + } + if(canInitialise){ + break; + } + position = GameBoard.randomPosition(); + if(!GameBoard.elementPosition.containsKey(position))break; } - ArrayList<BoardElement> boardElements = new ArrayList<>(); - boardElements.add(new Fire(Color.RED)); - elementPosition.put(position,boardElements); + if(GameBoard.elementPosition.containsKey(position)) + GameBoard.elementPosition.get(position).add(this); + else{ + ArrayList<BoardElement> boardElements = new ArrayList<>(); + boardElements.add(this); + GameBoard.elementPosition.put(position,boardElements); } + } + ArrayList<BoardElement> boardElements = new ArrayList<>(); + boardElements.add(this); + GameBoard.elementPosition.put(position,boardElements); } - @Override - public List<Position> updateFlammable(GameBoard gameBoard) { - FireFinder fireFinder=new FireFinder(); - List<Position> result = new ArrayList<>(); - if (gameBoard.stepNumber() % 2 == 0) { - List<Position> newFirePositions = new ArrayList<>(); - for (Map.Entry<Position, ArrayList<BoardElement>> entry : gameBoard.getElementPosition().entrySet()){ - for(BoardElement element : entry.getValue()){ - if (element.accept(fireFinder)){ - newFirePositions.addAll(gameBoard.neighbors(entry.getKey())); + @Override // TODO: 15/11/2023 + public void update(GameBoard gameBoard , Position position,HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition) { + if(extinguishPosition.contains(position)){ + return ; + } + if (gameBoard.stepNumber() % 2 == 0) { + List<Position> newPositions = new ArrayList<>(); + newPositions.addAll(gameBoard.neighbors(position)); + if(newElementPosition.containsKey(position)) + newElementPosition.get(position).add(this); + else { + newElementPosition.put(position,(new ArrayList<>())); + newElementPosition.get(position).add(this); + } + for(Position newPosition : newPositions){ + if(extinguishPosition.contains(newPosition)) + continue; + if(GameBoard.elementPosition.containsKey(newPosition)) { + for(BoardElement boardElement : GameBoard.elementPosition.get(newPosition)){ + if(boardElement.accept(new FireFinder()) && boardElement.accept(new CrossRoad()) && boardElement.accept(new CrossMountain())){ + break; + } + else if(!boardElement.accept( new FireFinder())&& !boardElement.accept(new CrossRoad()) && !boardElement.accept(new CrossMountain())){ + newElementPosition.get(newPosition).add(this); } } + } - for(Position position : newFirePositions){ - gameBoard.getElementPosition().get(position).add(new Fire(Color.RED)); + else{ + ArrayList<BoardElement> boardElements = new ArrayList<>(); + boardElements.add(this); + newElementPosition.put(newPosition,boardElements); + //System.out.println(GameBoard.elementPosition.get(position).get(0).getColor()); } - result.addAll(newFirePositions); + } - return result; } + else{ + if(newElementPosition.containsKey(position)) + newElementPosition.get(position).add(this); + else { + newElementPosition.put(position,(new ArrayList<>())); + newElementPosition.get(position).add(this); + } + } + } +} + diff --git a/src/main/java/model/Flammable/Flammable.java b/src/main/java/model/Flammable/Flammable.java index 89887060fafc0c1685ddc93d7aa76c65e7d718bd..325c6d3012ce69d730224122c935bfd377258c7a 100644 --- a/src/main/java/model/Flammable/Flammable.java +++ b/src/main/java/model/Flammable/Flammable.java @@ -10,7 +10,5 @@ import java.util.List; public interface Flammable extends BoardElement{ - void initialize(int initialFireCount, HashMap<Position, ArrayList<BoardElement>> elementPosition); - - List<Position> updateFlammable(GameBoard gameBoard); + void update(GameBoard gameBoard, Position position,HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition); } diff --git a/src/main/java/model/GameBoard.java b/src/main/java/model/GameBoard.java index 153a342a461f6a136e7370e504026c9efdd7e265..1cb840f0c4a2bb1e938be7fda3b87821d4d1b5b6 100644 --- a/src/main/java/model/GameBoard.java +++ b/src/main/java/model/GameBoard.java @@ -1,65 +1,92 @@ package model; -import javafx.scene.paint.Color; -import model.ExtinguishFire.FireFighter; -import model.Flammable.Fire; +import model.Builder.FireFirefightersBuilder; +import model.Builder.GameManage; +import model.ExtinguishFire.ExtinguishFire; +import model.Flammable.Flammable; import model.Visitor.FireFinder; import util.Position; import java.util.*; -public class GameBoard implements Board<List<BoardElement>>{ +public class GameBoard implements Board{ static int columnCount; static int rowCount; - private final int initialFireCount; - private final int initialFirefighterCount; - + private int initialFireCount; + private int initialFirefighterCount; + private int initialCloudCount; + private int initialMotorizedFireFighterCount; private int step = 0; static Random randomGenerator = new Random(); - private HashMap<Position, ArrayList<BoardElement>> elementPosition; public HashMap<Position, ArrayList<BoardElement>> getElementPosition() { return elementPosition; } - public GameBoard(int columnCount,int rowCount,int initialFireCount, int initialFirefighterCount) { + public static HashMap<Position, ArrayList<BoardElement>> elementPosition=new HashMap<>(); + + public GameBoard(int columnCount,int rowCount,int initialFireCount, int initialFirefighterCount,int initialCloudCount,int initialMotorizedFireFighterCount) { this.columnCount = columnCount; this.rowCount = rowCount; this.initialFireCount = initialFireCount; this.initialFirefighterCount = initialFirefighterCount; - initializeElements(); + this.initialCloudCount = initialCloudCount; + this.initialMotorizedFireFighterCount=initialMotorizedFireFighterCount; } - public void initializeElements() { - elementPosition=new HashMap<>(); - Fire fire=new Fire(Color.RED); - FireFighter fireFighter=new FireFighter(Color.BLUE); - fire.initialize(initialFireCount,elementPosition); - fireFighter.initialize(initialFirefighterCount,elementPosition); + + public void initializeElements(){ + FireFirefightersBuilder fireFirefighterBuilder=new FireFirefightersBuilder(); + fireFirefighterBuilder.Build(this.initialFireCount,this.initialFirefighterCount,this.initialCloudCount,this.initialMotorizedFireFighterCount); } public static Position randomPosition() { return new Position(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(columnCount)); } @Override - public List<Position> updateToNextGeneration() { - List<Position> result = new FireFighter(Color.BLUE).updateFirefighters(this); - result.addAll(new Fire(Color.RED).updateFlammable(this)); + public void updateToNextGeneration() { + HashMap<Position, ArrayList<BoardElement>> newElementPosition = new HashMap<>(); + ArrayList<Position> extinguishPosition = new ArrayList<>(); + for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPosition.entrySet()){ + for(BoardElement element : entry.getValue()){ + + if (!element.accept(new FireFinder())){ + ExtinguishFire element1 = (ExtinguishFire) element; + element1.update(this,entry.getKey(),newElementPosition,extinguishPosition); + } + } + } + for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPosition.entrySet()){ + for(BoardElement element : entry.getValue()){ + if (element.accept(new FireFinder())){ + Flammable element1 = (Flammable) element; + element1.update(this,entry.getKey(),newElementPosition,extinguishPosition); + } + } + } + elementPosition.clear(); + extinguishPosition.clear(); + for (Map.Entry<Position, ArrayList<BoardElement>> entry : newElementPosition.entrySet()){ + + if(elementPosition.containsKey(entry.getKey())){ + elementPosition.get(entry.getKey()).addAll(entry.getValue()); + }else{ + elementPosition.put(entry.getKey(),entry.getValue()); + } + } step++; - return result; + + } @Override - public List<BoardElement> getState(Position position) { - return elementPosition.get(position); + public Object getState(Position position) { + return null; } @Override - public void setState(List<BoardElement> state, Position position) { - for(int index = 0 ; index<elementPosition.get(position).size() ; index++){ - elementPosition.get(position).remove(index); + public void setState(Object state, Position position) { - } } @Override @@ -76,6 +103,7 @@ public class GameBoard implements Board<List<BoardElement>>{ @Override public void reset() { step = 0; + elementPosition.clear(); initializeElements(); } @@ -94,6 +122,7 @@ public class GameBoard implements Board<List<BoardElement>>{ } public Position neighborClosestToFire(Position position) { + FireFinder fireFinder = new FireFinder(); Set<Position> firePositions = new HashSet<>(); Set<Position> seen = new HashSet<>(); @@ -122,15 +151,22 @@ public class GameBoard implements Board<List<BoardElement>>{ return position; } - public void extinguish(Position position) { + /*public void extinguish(Position position) { FireFinder fireFinder = new FireFinder(); - for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPosition.entrySet()){ - for(BoardElement element : entry.getValue()){ - if (element.accept(fireFinder)){ - entry.getValue().remove(element); + HashMap<Position, ArrayList<BoardElement>> elementPositionCopie = new HashMap<>(); + for (Map.Entry<Position, ArrayList<BoardElement>> entry : this.elementPosition.entrySet()){ + elementPositionCopie.put(entry.getKey(),entry.getValue()); + } + for (BoardElement boardElement : elementPositionCopie.get(position)){ + if (boardElement.accept(fireFinder) && elementPosition.get(position).size()!=0){ + this.elementPosition.get(position).remove(boardElement); + break; + } + if (boardElement.accept(fireFinder) && elementPosition.get(position).size()==0){ + this.elementPosition.get(position).remove(boardElement); + this.elementPosition.remove(position); } } - } + }*/ } -} diff --git a/src/main/java/model/Visitor/CrossMountain.java b/src/main/java/model/Visitor/CrossMountain.java index bc8097d1d97cc51209fee1c1b7ed6ddf8c707e48..79fdb61439896429e9c2a6a3f2046074ba76cbfa 100644 --- a/src/main/java/model/Visitor/CrossMountain.java +++ b/src/main/java/model/Visitor/CrossMountain.java @@ -1,5 +1,6 @@ package model.Visitor; +import model.ExtinguishFire.Cloud; import model.ExtinguishFire.FireFighter; import model.ExtinguishFire.MotorizedFireFighter; import model.Flammable.Fire; @@ -16,7 +17,8 @@ public class CrossMountain implements Visitor { public boolean visit(FireFighter fireFighter) { return false; } - + @Override + public boolean visit(Cloud cloud) {return true;} @Override public boolean visit(MotorizedFireFighter motorizedFireFighter) { return false; diff --git a/src/main/java/model/Visitor/CrossRoad.java b/src/main/java/model/Visitor/CrossRoad.java index 4a0f710dbaee13ab9a6da545501df32b23e895c1..b886335897981e4e319ac3e012eb470aff106da0 100644 --- a/src/main/java/model/Visitor/CrossRoad.java +++ b/src/main/java/model/Visitor/CrossRoad.java @@ -1,5 +1,6 @@ package model.Visitor; +import model.ExtinguishFire.Cloud; import model.ExtinguishFire.FireFighter; import model.ExtinguishFire.MotorizedFireFighter; import model.Flammable.Fire; @@ -17,11 +18,16 @@ public class CrossRoad implements Visitor { return true; } + @Override + public boolean visit(Cloud cloud) {return true;} + @Override public boolean visit(MotorizedFireFighter motorizedFireFighter) { return true; } + + @Override public boolean visit(Mountain mountain) { return false; @@ -29,6 +35,6 @@ public class CrossRoad implements Visitor { @Override public boolean visit(Road road) { - return false; + return true; } } diff --git a/src/main/java/model/Visitor/FireFighterFinder.java b/src/main/java/model/Visitor/FireFighterFinder.java deleted file mode 100644 index ebef4b2b5ff00091c1ad5d615cf9adad36308131..0000000000000000000000000000000000000000 --- a/src/main/java/model/Visitor/FireFighterFinder.java +++ /dev/null @@ -1,34 +0,0 @@ -package model.Visitor; - -import model.ExtinguishFire.FireFighter; -import model.ExtinguishFire.MotorizedFireFighter; -import model.Flammable.Fire; -import model.Obstacle.Mountain; -import model.Obstacle.Road; - -public class FireFighterFinder implements Visitor{ - - public boolean visit(Fire fire) { - return false; - } - - @Override - public boolean visit(FireFighter fireFighter) { - return true; - } - - @Override - public boolean visit(MotorizedFireFighter motorizedFireFighter) { - return false; - } - - @Override - public boolean visit(Mountain mountain) { - return false; - } - - @Override - public boolean visit(Road road) { - return false; - } -} diff --git a/src/main/java/model/Visitor/FireFinder.java b/src/main/java/model/Visitor/FireFinder.java index 3718c615c60117d69188f90e6ebd628db2faefd8..dd8ed25a546046ad15ad60ad0000acd9c2ae4095 100644 --- a/src/main/java/model/Visitor/FireFinder.java +++ b/src/main/java/model/Visitor/FireFinder.java @@ -1,5 +1,6 @@ package model.Visitor; +import model.ExtinguishFire.Cloud; import model.ExtinguishFire.FireFighter; import model.ExtinguishFire.MotorizedFireFighter; import model.Flammable.Fire; @@ -17,6 +18,9 @@ public class FireFinder implements Visitor { return false; } + @Override + public boolean visit(Cloud cloud) {return false;} + @Override public boolean visit(MotorizedFireFighter motorizedFireFighter) { return false; diff --git a/src/main/java/model/Visitor/Visitor.java b/src/main/java/model/Visitor/Visitor.java index 5a324d1942b57410f4d084e7d995efac6a300c95..53cb66b6497e59ad15c9413fd55534bb849e5a3c 100644 --- a/src/main/java/model/Visitor/Visitor.java +++ b/src/main/java/model/Visitor/Visitor.java @@ -1,5 +1,6 @@ package model.Visitor; +import model.ExtinguishFire.Cloud; import model.ExtinguishFire.FireFighter; import model.ExtinguishFire.MotorizedFireFighter; import model.Flammable.Fire; @@ -10,6 +11,7 @@ public interface Visitor { boolean visit(Fire fire); boolean visit(FireFighter fireFighter); + boolean visit(Cloud cloud); boolean visit(MotorizedFireFighter motorizedFireFighter); boolean visit(Mountain mountain); boolean visit(Road road); diff --git a/src/main/java/view/FirefighterGrid.java b/src/main/java/view/FirefighterGrid.java index e81ddfd50defe3083d66f20b14bbc4de5a700caf..042dc7b54ac7b2d11202a6d3b53727bf1c450baf 100644 --- a/src/main/java/view/FirefighterGrid.java +++ b/src/main/java/view/FirefighterGrid.java @@ -20,8 +20,8 @@ public class FirefighterGrid extends Canvas implements Grid<model.BoardElement>{ @Override public void repaint(List<Pair<Position, model.BoardElement>> positionedElements) { - //clear(positionedElements); - //paint(positionedElements); + clear(positionedElements); + paint(positionedElements); paintLines(); } @@ -34,7 +34,7 @@ public class FirefighterGrid extends Canvas implements Grid<model.BoardElement>{ private void paint(List<Pair<Position, BoardElement>> positionedElements) { for(Pair<Position, BoardElement> pair : positionedElements){ - //paintElementAtPosition(pair.getValue(), pair.getKey()); + paintElementAtPosition(pair.getValue(), pair.getKey()); } } diff --git a/src/test/java/model/FirefighterBoardTest.java b/src/test/java/model/FirefighterBoardTest.java index 24c7e5d160a01c26a30497768764aba0c494c4d7..049ad8d42f03ffe5d376c26e64c0a4dc655e572f 100644 --- a/src/test/java/model/FirefighterBoardTest.java +++ b/src/test/java/model/FirefighterBoardTest.java @@ -7,33 +7,33 @@ import java.util.List; import static org.assertj.core.api.Assertions.*; -/*public class FirefighterBoardTest { +public class FirefighterBoardTest {/* @Test void testColumnCount(){ - Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3); + Board board = new GameBoard(20, 10, 1, 3); assertThat(board.columnCount()).isEqualTo(20); } @Test void testRowCount(){ - Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3); + Board<List board = new GameBoard(20, 10, 1, 3); assertThat(board.rowCount()).isEqualTo(10); } @Test void testStepNumber(){ - Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3); + Board board = new GameBoard(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); + /*@Test + void testGetState_afterSet(){ + Board<List<BoardElement>> board = new GameBoard(20, 10, 0, 0); Position position = new Position(1,2); assertThat(board.getState(position)).isEmpty(); - board.setState(List.of(ModelElement.FIRE), position); + board.setState(List.of(BoardElement.FIRE), position); assertThat(board.getState(position)).containsExactly(ModelElement.FIRE); - } + }*/ -}*/ +}