diff --git a/.gradle/8.4/executionHistory/executionHistory.bin b/.gradle/8.4/executionHistory/executionHistory.bin index 8f1b2dd7e12c428126c841e15e393e8aa0750036..81b5312ec69c603ece8f764c927c12278b26d67d 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 2f5ab811be3d96d24e78d9dc4139628ed8bc8a71..fed675b3db9f36ef7395a0a5ffb336450d035f1c 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 f961414987ea05a2ba4cff7e6f0e15177557d141..3fa260536691562807ef07d92d2ccec3d636df02 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 753dbf9dbddde9e52f56efab94835c5ce535b059..a18dca04232dce609dccbc8459afd89d3026570e 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 838b0069cd156cd1359aad27da737a8fd0628a0a..3586e918043481013d80b92e993f2d4df464a23b 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 0bfc94ece4020f6aa0d98d4a9986882cfc8fda8b..19ae3ed2cd9f77999e0e183da6dfbecafe3f7794 100644 Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe index 26a07b303a3272556a607b454cab45b805954402..61fdfb6ad7742f6dad2de77278fbcb0877a3ea33 100644 Binary files a/.gradle/file-system.probe and b/.gradle/file-system.probe differ diff --git a/build/classes/java/main/controller/Controller.class b/build/classes/java/main/controller/Controller.class index a8d8a50db6b3654e296244fac71b6fb8b811475b..d9275d02435beb2bc5c3fbb3c292ba1880c7deec 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 274aa8a242bf589f0f4a711ca9a0ca7df89faab3..6d7228b77ba9e6e77f7c4f24468647d696ddadae 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/Builder/ConcreteGameBuilder.class b/build/classes/java/main/model/Builder/ConcreteGameBuilder.class deleted file mode 100644 index 66850dd8e50d617a3da2c6c02c18f71cdc9daec6..0000000000000000000000000000000000000000 Binary files a/build/classes/java/main/model/Builder/ConcreteGameBuilder.class and /dev/null differ diff --git a/build/classes/java/main/model/Builder/GameBuilder.class b/build/classes/java/main/model/Builder/GameBuilder.class index 6b7721744a4ab2dbde7979ff7263e54e46fac025..1a08e360345d3bbfdd8b1a2bc287f17d1c4713ed 100644 Binary files a/build/classes/java/main/model/Builder/GameBuilder.class 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 deleted file mode 100644 index a0261b9904b2581661e7948aadf106998b3671b1..0000000000000000000000000000000000000000 Binary files a/build/classes/java/main/model/Builder/GameManage.class and /dev/null differ diff --git a/build/classes/java/main/model/Builder/IGameBuilder.class b/build/classes/java/main/model/Builder/IGameBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..83dc84cd67e6d2ad79906c8526227a0e6dc10678 Binary files /dev/null and b/build/classes/java/main/model/Builder/IGameBuilder.class differ diff --git a/build/classes/java/main/model/ExtinguishFire/Cloud.class b/build/classes/java/main/model/ExtinguishFire/Cloud.class index 9a2ca81b62515b6aaff3d2f4ad91acf8b4fd3921..5e1d4f55b67a31289f5bc99f64b1dee2a6591790 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/FireFighter.class b/build/classes/java/main/model/ExtinguishFire/FireFighter.class index cec32da5f69030726d4773a781d4f3ce3c5d5131..07d369a4f57b4eda880b4f6f1e31137ffe0f6a51 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/ExtinguishFire/FireFighters.class b/build/classes/java/main/model/ExtinguishFire/FireFighters.class new file mode 100644 index 0000000000000000000000000000000000000000..ed4744deb6b398a029390be129e81fa1eaf5f4b3 Binary files /dev/null and b/build/classes/java/main/model/ExtinguishFire/FireFighters.class differ diff --git a/build/classes/java/main/model/ExtinguishFire/MotorizedFireFighter.class b/build/classes/java/main/model/ExtinguishFire/MotorizedFireFighter.class index 73dcd4f4c73d5965ca13a94c1c33641c645b64c9..e3a993901cb8aa5f750a56cce948787688ea3a97 100644 Binary files a/build/classes/java/main/model/ExtinguishFire/MotorizedFireFighter.class and b/build/classes/java/main/model/ExtinguishFire/MotorizedFireFighter.class differ diff --git a/build/classes/java/main/model/Flammable/Fire.class b/build/classes/java/main/model/Flammable/Fire.class index 920c2cf21bcd5dc894beef5a8c621fe2b112a4dc..73be5d07584eaf0ff723d882b793f59d01bd67d8 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/GameBoard.class b/build/classes/java/main/model/GameBoard.class index 162baba038c7ed764297e1e083126849fc0c94a4..61b17d77ed4e0ac5b07b669538bb7fffc413badb 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/Obstacle/Mountain.class b/build/classes/java/main/model/Obstacle/Mountain.class index 9d89533a3b088c27c70ebae6f63f2c2116accfe5..56c789bda54924d819ddd2b37cfb68833d8c906b 100644 Binary files a/build/classes/java/main/model/Obstacle/Mountain.class and b/build/classes/java/main/model/Obstacle/Mountain.class differ diff --git a/build/classes/java/main/model/Obstacle/Obstacles.class b/build/classes/java/main/model/Obstacle/Obstacles.class index fff48ef4e9967a51eeca54cadce22b98a897ae4c..5bfa9cca0b3c1c924455c18c2bd0c8a6e91e58dd 100644 Binary files a/build/classes/java/main/model/Obstacle/Obstacles.class and b/build/classes/java/main/model/Obstacle/Obstacles.class differ diff --git a/build/classes/java/main/model/Obstacle/Road.class b/build/classes/java/main/model/Obstacle/Road.class index 2bfbc469870e9b39d3520e2a95d1bb670839ada4..023bf7fdd61ce631dfb5681682090ef8f651f5f8 100644 Binary files a/build/classes/java/main/model/Obstacle/Road.class and b/build/classes/java/main/model/Obstacle/Road.class differ diff --git a/build/classes/java/main/model/Rockery.class b/build/classes/java/main/model/Rockery.class new file mode 100644 index 0000000000000000000000000000000000000000..1b8e6d4f410b9c144b5ea91b8c2b5f2ec3c4fdde Binary files /dev/null and b/build/classes/java/main/model/Rockery.class differ diff --git a/build/classes/java/main/model/Visitor/CrossMountain.class b/build/classes/java/main/model/Visitor/CrossMountain.class deleted file mode 100644 index 7b4862c1b9895e8a2c0cdf166c848cd182415ef9..0000000000000000000000000000000000000000 Binary files a/build/classes/java/main/model/Visitor/CrossMountain.class and /dev/null differ diff --git a/build/classes/java/main/model/Visitor/CrossRoad.class b/build/classes/java/main/model/Visitor/CrossRoad.class deleted file mode 100644 index 033a517b18b7e6f6b664e07fe3378f4c73fd0256..0000000000000000000000000000000000000000 Binary files a/build/classes/java/main/model/Visitor/CrossRoad.class and /dev/null differ diff --git a/build/classes/java/main/model/Visitor/CrossableByFire.class b/build/classes/java/main/model/Visitor/CrossableByFire.class new file mode 100644 index 0000000000000000000000000000000000000000..d585247000612891952094f4d0021748b654e35b Binary files /dev/null and b/build/classes/java/main/model/Visitor/CrossableByFire.class differ diff --git a/build/classes/java/main/model/Visitor/CrossableByFirefighter.class b/build/classes/java/main/model/Visitor/CrossableByFirefighter.class new file mode 100644 index 0000000000000000000000000000000000000000..cacfa08ef9c97566c3144361ab37d167076744c3 Binary files /dev/null and b/build/classes/java/main/model/Visitor/CrossableByFirefighter.class differ diff --git a/build/classes/java/main/model/Visitor/CrossableByMountain.class b/build/classes/java/main/model/Visitor/CrossableByMountain.class new file mode 100644 index 0000000000000000000000000000000000000000..cf0727082f10155332efdd152a73c6d93ddd6c5f Binary files /dev/null and b/build/classes/java/main/model/Visitor/CrossableByMountain.class differ diff --git a/build/classes/java/main/model/Visitor/CrossableByRoad.class b/build/classes/java/main/model/Visitor/CrossableByRoad.class new file mode 100644 index 0000000000000000000000000000000000000000..92118fb9ee476fe99008f9b9103ca9172762ee06 Binary files /dev/null and b/build/classes/java/main/model/Visitor/CrossableByRoad.class differ diff --git a/build/classes/java/main/model/Visitor/CrossableByRockery.class b/build/classes/java/main/model/Visitor/CrossableByRockery.class new file mode 100644 index 0000000000000000000000000000000000000000..51580bc47219198caa4742ea9d4fec76e08b00d2 Binary files /dev/null and b/build/classes/java/main/model/Visitor/CrossableByRockery.class differ diff --git a/build/classes/java/main/model/Visitor/RockeryFinder.class b/build/classes/java/main/model/Visitor/RockeryFinder.class new file mode 100644 index 0000000000000000000000000000000000000000..4a8091d921e39369ed2f732abeb6aae933f6b014 Binary files /dev/null and b/build/classes/java/main/model/Visitor/RockeryFinder.class differ diff --git a/build/classes/java/main/model/Visitor/Visitor.class b/build/classes/java/main/model/Visitor/Visitor.class index 6bda2c96ed0d078985d77b993144828ec7de1b9c..b50bc9479cd89099f56a825956b744f2f0ceb0dd 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/tmp/compileJava/compileTransaction/stash-dir/Board.class.uniqueId17 b/build/tmp/compileJava/compileTransaction/stash-dir/Board.class.uniqueId17 new file mode 100644 index 0000000000000000000000000000000000000000..6d7228b77ba9e6e77f7c4f24468647d696ddadae Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/Board.class.uniqueId17 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/BoardElement.class.uniqueId9 b/build/tmp/compileJava/compileTransaction/stash-dir/BoardElement.class.uniqueId9 new file mode 100644 index 0000000000000000000000000000000000000000..f3817965c6f2c20d18493e32d39eaa14f4eeb86e Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/BoardElement.class.uniqueId9 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Cloud.class.uniqueId20 b/build/tmp/compileJava/compileTransaction/stash-dir/Cloud.class.uniqueId20 new file mode 100644 index 0000000000000000000000000000000000000000..5e1d4f55b67a31289f5bc99f64b1dee2a6591790 Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/Cloud.class.uniqueId20 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Controller.class.uniqueId11 b/build/tmp/compileJava/compileTransaction/stash-dir/Controller.class.uniqueId11 new file mode 100644 index 0000000000000000000000000000000000000000..d9275d02435beb2bc5c3fbb3c292ba1880c7deec Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/Controller.class.uniqueId11 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/CrossableByFire.class.uniqueId2 b/build/tmp/compileJava/compileTransaction/stash-dir/CrossableByFire.class.uniqueId2 new file mode 100644 index 0000000000000000000000000000000000000000..d585247000612891952094f4d0021748b654e35b Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/CrossableByFire.class.uniqueId2 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/CrossableByFirefighter.class.uniqueId6 b/build/tmp/compileJava/compileTransaction/stash-dir/CrossableByFirefighter.class.uniqueId6 new file mode 100644 index 0000000000000000000000000000000000000000..cacfa08ef9c97566c3144361ab37d167076744c3 Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/CrossableByFirefighter.class.uniqueId6 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/CrossableByMountain.class.uniqueId19 b/build/tmp/compileJava/compileTransaction/stash-dir/CrossableByMountain.class.uniqueId19 new file mode 100644 index 0000000000000000000000000000000000000000..cf0727082f10155332efdd152a73c6d93ddd6c5f Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/CrossableByMountain.class.uniqueId19 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/CrossableByRoad.class.uniqueId27 b/build/tmp/compileJava/compileTransaction/stash-dir/CrossableByRoad.class.uniqueId27 new file mode 100644 index 0000000000000000000000000000000000000000..92118fb9ee476fe99008f9b9103ca9172762ee06 Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/CrossableByRoad.class.uniqueId27 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/CrossableByRockery.class.uniqueId5 b/build/tmp/compileJava/compileTransaction/stash-dir/CrossableByRockery.class.uniqueId5 new file mode 100644 index 0000000000000000000000000000000000000000..51580bc47219198caa4742ea9d4fec76e08b00d2 Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/CrossableByRockery.class.uniqueId5 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/EmptyElement.class.uniqueId12 b/build/tmp/compileJava/compileTransaction/stash-dir/EmptyElement.class.uniqueId12 new file mode 100644 index 0000000000000000000000000000000000000000..44f98af2e977e4cd4c5b4d4e026c4b3fcddd20e8 Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/EmptyElement.class.uniqueId12 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ExtinguishFire.class.uniqueId0 b/build/tmp/compileJava/compileTransaction/stash-dir/ExtinguishFire.class.uniqueId0 new file mode 100644 index 0000000000000000000000000000000000000000..567d4a02a156b9d882a255fecd3f2f6fec4a11ed Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/ExtinguishFire.class.uniqueId0 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Fire.class.uniqueId18 b/build/tmp/compileJava/compileTransaction/stash-dir/Fire.class.uniqueId18 new file mode 100644 index 0000000000000000000000000000000000000000..592ff7207dde613f15cbd4bcd3eb26f8fa74002f Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/Fire.class.uniqueId18 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/FireFighter.class.uniqueId3 b/build/tmp/compileJava/compileTransaction/stash-dir/FireFighter.class.uniqueId3 new file mode 100644 index 0000000000000000000000000000000000000000..07d369a4f57b4eda880b4f6f1e31137ffe0f6a51 Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/FireFighter.class.uniqueId3 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/FireFighters.class.uniqueId10 b/build/tmp/compileJava/compileTransaction/stash-dir/FireFighters.class.uniqueId10 new file mode 100644 index 0000000000000000000000000000000000000000..ed4744deb6b398a029390be129e81fa1eaf5f4b3 Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/FireFighters.class.uniqueId10 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/FireFinder.class.uniqueId15 b/build/tmp/compileJava/compileTransaction/stash-dir/FireFinder.class.uniqueId15 new file mode 100644 index 0000000000000000000000000000000000000000..1f45323b4f6e4dd56ab5d718c3c913512cab99d3 Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/FireFinder.class.uniqueId15 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/FirefighterGrid.class.uniqueId8 b/build/tmp/compileJava/compileTransaction/stash-dir/FirefighterGrid.class.uniqueId8 new file mode 100644 index 0000000000000000000000000000000000000000..22fe36e949c5405790d75ce97f546e9616678c9a Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/FirefighterGrid.class.uniqueId8 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Flammable.class.uniqueId13 b/build/tmp/compileJava/compileTransaction/stash-dir/Flammable.class.uniqueId13 new file mode 100644 index 0000000000000000000000000000000000000000..91181ac215dd52d55daf7d5430d885160fda1cd7 Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/Flammable.class.uniqueId13 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/GameBoard.class.uniqueId21 b/build/tmp/compileJava/compileTransaction/stash-dir/GameBoard.class.uniqueId21 new file mode 100644 index 0000000000000000000000000000000000000000..61b17d77ed4e0ac5b07b669538bb7fffc413badb Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/GameBoard.class.uniqueId21 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/GameBuilder.class.uniqueId22 b/build/tmp/compileJava/compileTransaction/stash-dir/GameBuilder.class.uniqueId22 new file mode 100644 index 0000000000000000000000000000000000000000..1a08e360345d3bbfdd8b1a2bc287f17d1c4713ed Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/GameBuilder.class.uniqueId22 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Grid.class.uniqueId24 b/build/tmp/compileJava/compileTransaction/stash-dir/Grid.class.uniqueId24 new file mode 100644 index 0000000000000000000000000000000000000000..5833cd8dcc1d6a5c1f61236997409c2751485e0d Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/Grid.class.uniqueId24 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/MotorizedFireFighter.class.uniqueId25 b/build/tmp/compileJava/compileTransaction/stash-dir/MotorizedFireFighter.class.uniqueId25 new file mode 100644 index 0000000000000000000000000000000000000000..e3a993901cb8aa5f750a56cce948787688ea3a97 Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/MotorizedFireFighter.class.uniqueId25 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Mountain.class.uniqueId26 b/build/tmp/compileJava/compileTransaction/stash-dir/Mountain.class.uniqueId26 new file mode 100644 index 0000000000000000000000000000000000000000..56c789bda54924d819ddd2b37cfb68833d8c906b Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/Mountain.class.uniqueId26 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Obstacles.class.uniqueId16 b/build/tmp/compileJava/compileTransaction/stash-dir/Obstacles.class.uniqueId16 new file mode 100644 index 0000000000000000000000000000000000000000..5bfa9cca0b3c1c924455c18c2bd0c8a6e91e58dd Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/Obstacles.class.uniqueId16 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Road.class.uniqueId7 b/build/tmp/compileJava/compileTransaction/stash-dir/Road.class.uniqueId7 new file mode 100644 index 0000000000000000000000000000000000000000..023bf7fdd61ce631dfb5681682090ef8f651f5f8 Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/Road.class.uniqueId7 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Rockery.class.uniqueId14 b/build/tmp/compileJava/compileTransaction/stash-dir/Rockery.class.uniqueId14 new file mode 100644 index 0000000000000000000000000000000000000000..1b8e6d4f410b9c144b5ea91b8c2b5f2ec3c4fdde Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/Rockery.class.uniqueId14 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/RockeryFinder.class.uniqueId1 b/build/tmp/compileJava/compileTransaction/stash-dir/RockeryFinder.class.uniqueId1 new file mode 100644 index 0000000000000000000000000000000000000000..4a8091d921e39369ed2f732abeb6aae933f6b014 Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/RockeryFinder.class.uniqueId1 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Visitor.class.uniqueId23 b/build/tmp/compileJava/compileTransaction/stash-dir/Visitor.class.uniqueId23 new file mode 100644 index 0000000000000000000000000000000000000000..b50bc9479cd89099f56a825956b744f2f0ceb0dd Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/Visitor.class.uniqueId23 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/module-info.class.uniqueId4 b/build/tmp/compileJava/compileTransaction/stash-dir/module-info.class.uniqueId4 new file mode 100644 index 0000000000000000000000000000000000000000..228b8be064ecf35c69bb788937ce7ff8ab50174e Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/module-info.class.uniqueId4 differ diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index c492006b2d0970468eb0f6acd127bd43204d83e7..c10c7ed60a775b507c4b81b1b81e11d626881ef2 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/controller/Controller.java b/src/main/java/controller/Controller.java index a5f13dee0791ec74705a2683e00fe5aac8573dad..84d8c5e8444272d4befdf4bc615ef1ba0019ca37 100644 --- a/src/main/java/controller/Controller.java +++ b/src/main/java/controller/Controller.java @@ -24,7 +24,7 @@ import static java.util.Objects.requireNonNull; public class Controller { - public static final int PERIOD_IN_MILLISECONDS = 300; + public static final int PERIOD_IN_MILLISECONDS = 100; @FXML public Button restartButton; @FXML @@ -52,9 +52,7 @@ public class Controller { pauseToggleButton.setSelected(true); } - /* private void setModel(GameBoard gameBoard) { - this.board = requireNonNull(gameBoard, "GameBoard.model is null"); - }*/ + private void updateBoard(){ board.updateToNextGeneration(); @@ -67,7 +65,7 @@ public class Controller { HashMap<Position, ArrayList<BoardElement>> elementPositionGrid = new HashMap<>(); for(int column = 0; column < columnCount; column++) for(int row = 0; row < rowCount; row++){ - if(board.getElementPosition().containsKey(new Position(row,column)) && board.getElementPosition().get(new Position(row,column)).size()!=0){ + if(board.getElementPosition().containsKey(new Position(row,column)) && !board.getElementPosition().get(new Position(row, column)).isEmpty()){ elementPositionGrid.put(new Position(row,column),board.getElementPosition().get(new Position(row,column))); }else{ ArrayList<BoardElement> x=new ArrayList<>(); diff --git a/src/main/java/model/Board.java b/src/main/java/model/Board.java index a2ebb06761f2d608face589bba084129915fdb1b..1daa968017dd16a6efa976bcb24e353650e520e0 100644 --- a/src/main/java/model/Board.java +++ b/src/main/java/model/Board.java @@ -6,29 +6,25 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; -/** - * This interface represents a generic board for modeling various state-based systems. - * - * @param <S> The type of state represented on the board. - */ -public interface Board<S> { +public interface Board { /** - * Get the state of the board at a specific position. - * - * @param position The position on the board for which to retrieve the state. - * @return The state at the specified position. + * Update the board to its next generation or state. This method may modify the + * internal state of the board */ - S getState(Position position); + void updateToNextGeneration(); /** - * Set the state of a specific position on the board to the specified state. - * - * @param state The state to set for the given position. - * @param position The position on the board for which to set the state. + * Reset the board to its initial state. */ - void setState(S state, Position position); + void reset(); + /** + * Get the current step number or generation of the board. + * + * @return The current step number or generation. + */ + int stepNumber(); /** * Get the number of rows in the board. * @@ -42,27 +38,12 @@ public interface Board<S> { * @return The number of columns in the board. */ int columnCount(); - - /** - * Update the board to its next generation or state. This method may modify the - * internal state of the board and return a list of positions that have changed - * during the update. - * - * @return A list of positions that have changed during the update. - */ - void updateToNextGeneration(); - - /** - * Reset the board to its initial state. - */ - void reset(); - /** - * Get the current step number or generation of the board. + * Get the current list of all elements of the board . * - * @return The current step number or generation. + * @return The current list of all elements. */ - int stepNumber(); HashMap<Position, ArrayList<BoardElement>> getElementPosition(); } + diff --git a/src/main/java/model/Builder/ConcreteGameBuilder.java b/src/main/java/model/Builder/ConcreteGameBuilder.java deleted file mode 100644 index 627f03ffffc8a716a93e6e89e3f15e13226b31ca..0000000000000000000000000000000000000000 --- a/src/main/java/model/Builder/ConcreteGameBuilder.java +++ /dev/null @@ -1,48 +0,0 @@ -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; - } - public GameBuilder setRoad(int roads) { - this.roads=roads; - return this; - } - - @Override - public GameManage build() { - return new GameManage(fire,firefighter,clouds,motorizedFireFighters,mountains,roads); - } -} \ No newline at end of file diff --git a/src/main/java/model/Builder/FireFirefightersBuilder.java b/src/main/java/model/Builder/FireFirefightersBuilder.java deleted file mode 100644 index 85b8f5e671de385a1bdcb7d3a8e1e7d8bc8c575a..0000000000000000000000000000000000000000 --- a/src/main/java/model/Builder/FireFirefightersBuilder.java +++ /dev/null @@ -1,15 +0,0 @@ -package model.Builder; - -public class FireFirefightersBuilder { - public void Build(int fires, int firefighters , int clouds , int motorizedFireFighters ,int mountains,int roads) { - ConcreteGameBuilder concreteGameBuilder; - concreteGameBuilder =new ConcreteGameBuilder(); - concreteGameBuilder.setFire(fires) - .setFireFighter(firefighters) - .setCloud(clouds) - .setMotorizedFireFighter(motorizedFireFighters) - .setMountain(mountains) - .setRoad(roads) - .build(); - } -} diff --git a/src/main/java/model/Builder/GameBuilder.java b/src/main/java/model/Builder/GameBuilder.java index 64cb6b6466a21f0d6642d69f81e3f2d226d669d0..840dc3e488f158412055c89ec6a36fb9d1a83f38 100644 --- a/src/main/java/model/Builder/GameBuilder.java +++ b/src/main/java/model/Builder/GameBuilder.java @@ -1,15 +1,97 @@ package model.Builder; -public interface GameBuilder { +import javafx.scene.paint.Color; +import model.ExtinguishFire.Cloud; +import model.ExtinguishFire.FireFighter; +import model.ExtinguishFire.MotorizedFireFighter; +import model.Flammable.Fire; +import model.GameBoard; +import model.Obstacle.Mountain; +import model.Obstacle.Road; +import model.Rockery; +import util.Position; - 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); - model.Builder.GameBuilder setRoad(int mountain); +import java.util.Random; - // TODO: 15/11/2023 la suite - GameManage build(); +public class GameBuilder implements IGameBuilder { + int firefighters=0; + int fires=0; + int clouds=0; + int motorizedFireFighters=0; + int roads=0; + int mountains=0; + int rockerys=0; -} + @Override + public IGameBuilder setFire(int fires) { + this.fires=fires; + return this; + } + + @Override + public IGameBuilder setFireFighter(int fireFighters) { + this.firefighters=fireFighters; + return this; + } + + @Override + public IGameBuilder setCloud(int clouds) { + this.clouds=clouds; + return this; + } + + @Override + public IGameBuilder setMotorizedFireFighter(int motorizedFireFighters) { + this.motorizedFireFighters=motorizedFireFighters; + return this; + } + + @Override + public IGameBuilder setMountain(int mountains) { + this.mountains=mountains; + return this; + } + public IGameBuilder setRoad(int roads) { + this.roads=roads; + return this; + } + public IGameBuilder setRockery(int rockerys){ + this.rockerys=rockerys; + return this; + } + + @Override + public void build() { + for(int i=0;i<clouds;i++) { + Cloud cloud=new Cloud(Color.DARKCYAN); + cloud.initialize(); + }/* + for(int i=0;i<mountains;i++) { ///la meme chose ici. + Mountain mountain=new Mountain(Color.BROWN); + mountain.initialize(); + } + + + for(int i=0;i<roads;i++) { + Road road=new Road(Color.GRAY); + road.initialize(); + }*/ + for(int i=0;i<15;i++) { + Rockery rockery=new Rockery( Color.rgb(85, 107, 47)); + rockery.initialize(); + } + for(int i=0;i<fires;i++) { + Fire fire=new Fire(Color.RED); + fire.initialize(); + } + for(int i=0;i<motorizedFireFighters;i++) { + MotorizedFireFighter motorizedFireFighter=new MotorizedFireFighter(Color.ORANGE); + motorizedFireFighter.initialize(); + } + for(int i=0;i<firefighters;i++) { + FireFighter fireFighter=new FireFighter(Color.BLUE); + fireFighter.initialize(); + } + } + +} \ No newline at end of file diff --git a/src/main/java/model/Builder/GameManage.java b/src/main/java/model/Builder/GameManage.java deleted file mode 100644 index 479b57403cb159964ebfde27f6f1396d0ea36add..0000000000000000000000000000000000000000 --- a/src/main/java/model/Builder/GameManage.java +++ /dev/null @@ -1,53 +0,0 @@ -package model.Builder; - -import javafx.scene.paint.Color; -import model.ExtinguishFire.Cloud; -import model.ExtinguishFire.FireFighter; -import model.ExtinguishFire.MotorizedFireFighter; -import model.Flammable.Fire; -import model.Obstacle.Mountain; -import model.Obstacle.Road; - -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<clouds;i++) { - new Cloud(Color.DARKCYAN); - } - for(int i=0;i<motorizedFireFighters;i++) { - new MotorizedFireFighter(Color.ORANGE); - } - for(int i=0;i<mountains;i++) { - new Mountain(Color.BROWN); - } - for(int i=0;i<firefighters;i++) { - new FireFighter(Color.BLUE); - } - for(int i=0;i<roads;i++) { - new Road(Color.GRAY); - } - } - -} - diff --git a/src/main/java/model/Builder/IGameBuilder.java b/src/main/java/model/Builder/IGameBuilder.java new file mode 100644 index 0000000000000000000000000000000000000000..3677b3383c22a45f608b042e6317dee2e49742e4 --- /dev/null +++ b/src/main/java/model/Builder/IGameBuilder.java @@ -0,0 +1,14 @@ +package model.Builder; + +public interface IGameBuilder { + + IGameBuilder setFire(int fire); + IGameBuilder setFireFighter(int fireFighter); + IGameBuilder setCloud(int cloud); + IGameBuilder setMotorizedFireFighter(int motorizedFireFighter); + IGameBuilder setMountain(int mountain); + IGameBuilder setRoad(int road); + IGameBuilder setRockery(int rockery); + void build(); + +} diff --git a/src/main/java/model/ExtinguishFire/Cloud.java b/src/main/java/model/ExtinguishFire/Cloud.java index e55461c74207c6ee2c66629a14a5467d8cc2178a..e3dd9f80c756d8882aac28b5b7ec14ea58ca9235 100644 --- a/src/main/java/model/ExtinguishFire/Cloud.java +++ b/src/main/java/model/ExtinguishFire/Cloud.java @@ -18,7 +18,6 @@ public class Cloud implements ExtinguishFire{ public Cloud(Color color){ this.color=color; - initialize(); } @Override public Color getColor() { @@ -44,14 +43,7 @@ public class Cloud implements ExtinguishFire{ @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()); @@ -66,4 +58,5 @@ public class Cloud implements ExtinguishFire{ } extinguishPosition.add(newCloudPosition); } + } diff --git a/src/main/java/model/ExtinguishFire/FireFighter.java b/src/main/java/model/ExtinguishFire/FireFighter.java index 5d0a8b594ce63f4fa09b8d1b1620587f8184f541..f244b60b1c23b4af1d1a8d268881daadaee47f8d 100644 --- a/src/main/java/model/ExtinguishFire/FireFighter.java +++ b/src/main/java/model/ExtinguishFire/FireFighter.java @@ -3,23 +3,17 @@ package model.ExtinguishFire; 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; import java.util.*; -import static model.GameBoard.elementPosition; - public class FireFighter extends FireFighters { private final Color color; public FireFighter(Color color) { this.color = color; - initialize(); // est une bonne idée ? } @Override public Color getColor() { @@ -57,7 +51,7 @@ public class FireFighter extends FireFighters { return; } } - // moveAndExtinguish(newElementPosition,position,extinguishPosition,firePositions,gameBoard); + //moveAndExtinguish(newElementPosition,position,extinguishPosition,firePositions,gameBoard); } } diff --git a/src/main/java/model/ExtinguishFire/FireFighters.java b/src/main/java/model/ExtinguishFire/FireFighters.java index 519a76c9284e542b945c3c12f2755c026d87af12..e38323e54011432f0ac2ac4d6ed0c3c487880ed8 100644 --- a/src/main/java/model/ExtinguishFire/FireFighters.java +++ b/src/main/java/model/ExtinguishFire/FireFighters.java @@ -3,7 +3,8 @@ package model.ExtinguishFire; import javafx.scene.paint.Color; import model.BoardElement; import model.GameBoard; -import model.Visitor.CrossMountain; +import model.Visitor.CrossableByFirefighter; +import model.Visitor.CrossableByMountain; import model.Visitor.FireFinder; import model.Visitor.Visitor; import util.Position; @@ -45,7 +46,7 @@ public abstract class FireFighters implements BoardElement { public boolean canInitialise(Position position) { if (elementPosition.containsKey(position)) { for (BoardElement element : GameBoard.elementPosition.get(position)) { - if (element.accept(new FireFinder()) || element.accept(new CrossMountain())) { + if (!element.accept(new CrossableByFirefighter())) { return false; } } @@ -56,7 +57,7 @@ public abstract class FireFighters implements BoardElement { public boolean canMove(Position newFirefighterPosition) { if (elementPosition.containsKey(newFirefighterPosition)) { for (BoardElement boardElement : elementPosition.get(newFirefighterPosition)) { - if (boardElement.accept(new CrossMountain())) { + if (!boardElement.accept(new CrossableByFirefighter())) { return false; } } diff --git a/src/main/java/model/ExtinguishFire/MotorizedFireFighter.java b/src/main/java/model/ExtinguishFire/MotorizedFireFighter.java index a371a8ef090798e0f728e2aaf98678da0c08574a..f51f45c5ab5630ad198bc0d9c5af94aa0e0fd23e 100644 --- a/src/main/java/model/ExtinguishFire/MotorizedFireFighter.java +++ b/src/main/java/model/ExtinguishFire/MotorizedFireFighter.java @@ -17,9 +17,7 @@ public class MotorizedFireFighter extends FireFighters { public MotorizedFireFighter(Color color) { this.color = color; - initialize(); } - @Override public Color getColor() { return color; @@ -31,24 +29,21 @@ public class MotorizedFireFighter extends FireFighters { } public void initialize() { - super.initialize(); + super.initialize(); // to delete } public void moveAndExtinguish(HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> newMotorizedFireFighterPositions, ArrayList<Position> extinguishPosition, List<Position> firePositions, GameBoard gameBoard) { addElementToElementPosition(newElementPosition, newMotorizedFireFighterPositions.get(1)); - for (Position newPosition : newMotorizedFireFighterPositions) { - extinguishPosition.add(newPosition); - } + extinguishPosition.addAll(newMotorizedFireFighterPositions); + List<Position> neighborFirePositions = new ArrayList<>(); neighborFirePositions.addAll(gameBoard.neighbors(newMotorizedFireFighterPositions.get(0)).stream() .filter(firePositions::contains).toList()); neighborFirePositions.addAll(gameBoard.neighbors(newMotorizedFireFighterPositions.get(1)).stream() .filter(firePositions::contains).toList()); - for (Position firePosition : neighborFirePositions) { - extinguishPosition.add(firePosition); - } + extinguishPosition.addAll(neighborFirePositions); } @Override @@ -59,14 +54,17 @@ public class MotorizedFireFighter extends FireFighters { Position newMotorizedFireFighterPosition1 = gameBoard.neighborClosestToFire(position); newMotorizedFireFighterPositions.add(newMotorizedFireFighterPosition1); Position newMotorizedFireFighterPosition2 = gameBoard.neighborClosestToFire(newMotorizedFireFighterPosition1); - newMotorizedFireFighterPositions.add(newMotorizedFireFighterPosition2); + if (canMove(newMotorizedFireFighterPosition2)) { + newMotorizedFireFighterPositions.add(newMotorizedFireFighterPosition2); moveAndExtinguish(newElementPosition, newMotorizedFireFighterPositions, extinguishPosition,firePositions, gameBoard); } else { List<Position> neighbors = gameBoard.neighbors(position); for (Position neighbourPosition : neighbors) { if (canMove(neighbourPosition)) { + newMotorizedFireFighterPositions.add(position); moveAndExtinguish(newElementPosition, newMotorizedFireFighterPositions, extinguishPosition, firePositions, gameBoard); + break; } } } diff --git a/src/main/java/model/Flammable/Fire.java b/src/main/java/model/Flammable/Fire.java index 6b3a2fdb461ddbe2a1b5d1e8f975e1a17a28b432..7b530cd60c30da4d0d6de80e715a9750fccf6766 100644 --- a/src/main/java/model/Flammable/Fire.java +++ b/src/main/java/model/Flammable/Fire.java @@ -3,10 +3,7 @@ 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 model.Visitor.*; import util.Position; import java.util.*; @@ -14,12 +11,11 @@ import java.util.*; import static model.GameBoard.elementPosition; public class Fire implements Flammable{ - + private int turns=0; private final Color color; public Fire(Color color){ this.color = color; - initialize(); } @Override public Color getColor() { @@ -38,12 +34,13 @@ public class Fire implements Flammable{ position = GameBoard.randomPosition(); } addElementToElementPosition(elementPosition,position); + turns++; } private boolean canInitialise(Position position) { if(elementPosition.containsKey(position)){ for (BoardElement element : GameBoard.elementPosition.get(position)) { - if (element.accept(new FireFinder()) || element.accept(new CrossMountain())|| element.accept(new CrossRoad())) { + if (!element.accept(new CrossableByFire())) { return false; } } @@ -53,12 +50,13 @@ public class Fire implements Flammable{ @Override public void update(GameBoard gameBoard , Position position,HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition) { + turns++; if(extinguishPosition.contains(position)) { return; } if(canMove(position,newElementPosition)) addElementToElementPosition(newElementPosition,position); - if (gameBoard.stepNumber() % 2 == 0 ) { + if ((gameBoard.stepNumber() % 2 == 0 && !inRockery(position))||(inRockery(position) && turns==4)) { List<Position> positionsNeighbours = new ArrayList<>(gameBoard.neighbors(position)); for(Position positionNeighbour : positionsNeighbours){ if(!extinguishPosition.contains(positionNeighbour)&& canMove(positionNeighbour,newElementPosition)){ @@ -67,10 +65,21 @@ public class Fire implements Flammable{ } } } + + private boolean inRockery(Position position) { + if(elementPosition.containsKey(position)){ + for (BoardElement element : GameBoard.elementPosition.get(position)) { + if (element.accept(new RockeryFinder())) { + return true; + } + } + } + return false; + } + private void addElementToElementPosition(HashMap<Position, ArrayList<BoardElement>> newElementPosition, Position newFirePosition) { if (newElementPosition.containsKey(newFirePosition) ) { - newElementPosition.get(newFirePosition).add(this); - + newElementPosition.get(newFirePosition).add(this); } else { ArrayList<BoardElement> boardElements = new ArrayList<>(); boardElements.add(this); @@ -78,16 +87,9 @@ public class Fire implements Flammable{ } } private boolean canMove(Position newFirePosition,HashMap<Position, ArrayList<BoardElement>> newElementPosition) { - if(elementPosition.containsKey(newFirePosition)){ - for (BoardElement boardElement : elementPosition.get(newFirePosition)) { - if (boardElement.accept(new CrossMountain())||boardElement.accept(new CrossRoad())) { - return false; - } - } - } if(newElementPosition.containsKey(newFirePosition)){ for (BoardElement boardElement : newElementPosition.get(newFirePosition)) { - if (boardElement.accept(new FireFinder())) { + if (!boardElement.accept(new CrossableByFire())) { return false; } } diff --git a/src/main/java/model/GameBoard.java b/src/main/java/model/GameBoard.java index 4cfd2b62e5d919e57d9f262d8b1897a5fa20a801..271faa66900f8073fa339122390a934e3782ca77 100644 --- a/src/main/java/model/GameBoard.java +++ b/src/main/java/model/GameBoard.java @@ -1,8 +1,7 @@ package model; -import model.Builder.FireFirefightersBuilder; -import model.Builder.GameManage; -import model.ExtinguishFire.ExtinguishFire; +import model.Builder.GameBuilder; + import model.Flammable.Flammable; import model.Visitor.FireFinder; import util.Position; @@ -12,12 +11,12 @@ import java.util.*; public class GameBoard implements Board{ static int columnCount; static int rowCount; - private int initialFireCount; - private int initialFirefighterCount; - private int initialCloudCount; - private int initialMotorizedFireFighterCount; - private int initialMountainCount; - private int initialRoadCount; + private final int initialFireCount; + private final int initialFirefighterCount; + private final int initialCloudCount; + private final int initialMotorizedFireFighterCount; + private final int initialMountainCount; + private final int initialRoadCount; private int step = 0; static Random randomGenerator = new Random(); @@ -30,8 +29,8 @@ public class GameBoard implements Board{ public GameBoard(int columnCount,int rowCount,int initialFireCount, int initialFirefighterCount,int initialCloudCount, int initialMotorizedFireFighterCount,int initialMountainCount,int initialRoadCount) { - this.columnCount = columnCount; - this.rowCount = rowCount; + GameBoard.columnCount = columnCount; + GameBoard.rowCount = rowCount; this.initialFireCount = initialFireCount; this.initialFirefighterCount = initialFirefighterCount; this.initialCloudCount = initialCloudCount; @@ -41,9 +40,14 @@ public class GameBoard implements Board{ } public void initializeElements(){ - FireFirefightersBuilder fireFirefighterBuilder=new FireFirefightersBuilder(); - fireFirefighterBuilder.Build(this.initialFireCount,this.initialFirefighterCount, - this.initialCloudCount,this.initialMotorizedFireFighterCount,this.initialMountainCount,this.initialRoadCount); + GameBuilder gameBuilder=new GameBuilder(); + gameBuilder.setFire(initialFireCount) + .setFireFighter(initialFirefighterCount) + .setRoad(initialRoadCount) + .setCloud(initialCloudCount) + .setMotorizedFireFighter(initialMotorizedFireFighterCount) + .setMountain(initialMountainCount) + .build(); } public static Position randomPosition() { @@ -85,38 +89,26 @@ public class GameBoard implements Board{ } - @Override - public Object getState(Position position) { - return null; + public void reset() { + step = 0; + elementPosition.clear(); + initializeElements(); } @Override - public void setState(Object state, Position position) { - + public int stepNumber() { + return step; } @Override public int rowCount() { - return rowCount; + return GameBoard.rowCount; } @Override public int columnCount() { - return columnCount; - } - - - @Override - public void reset() { - step = 0; - elementPosition.clear(); - initializeElements(); - } - - @Override - public int stepNumber() { - return step; + return GameBoard.columnCount; } public List<Position> neighbors(Position position) { @@ -127,6 +119,14 @@ public class GameBoard implements Board{ if (position.column() < columnCount - 1) list.add(new Position(position.row(), position.column() + 1)); return list; } + public static List<Position> neighborsObstacle(Position positionObstacle) { + List<Position> list = new ArrayList<>(); + if (positionObstacle.row() > 0) list.add(new Position(positionObstacle.row() - 1, positionObstacle.column())); + if (positionObstacle.column() > 0) list.add(new Position(positionObstacle.row(), positionObstacle.column() - 1)); + if (positionObstacle.row() < rowCount - 1) list.add(new Position(positionObstacle.row() + 1, positionObstacle.column())); + if (positionObstacle.column() < columnCount - 1) list.add(new Position(positionObstacle.row(), positionObstacle.column() + 1)); + return list; + } public Position neighborClosestToFire(Position position) { @@ -157,23 +157,5 @@ public class GameBoard implements Board{ } return position; } - - /*public void extinguish(Position position) { - FireFinder fireFinder = new FireFinder(); - 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/Obstacle/Mountain.java b/src/main/java/model/Obstacle/Mountain.java index 643242cc2833def55bdbfa85f6d3e4d6de5b29c6..4456ec1763f52c31596cbad1a2e159f750c4038a 100644 --- a/src/main/java/model/Obstacle/Mountain.java +++ b/src/main/java/model/Obstacle/Mountain.java @@ -10,14 +10,15 @@ import java.util.ArrayList; import java.util.HashMap; import static model.GameBoard.elementPosition; +import static model.GameBoard.randomPosition; public class Mountain extends Obstacles { + private final Color color; public Mountain(Color color){ this.color=color; - initialize(); } @Override public Color getColor() { @@ -30,8 +31,15 @@ public class Mountain extends Obstacles { } @Override - public void initialize() { - super.initialize(); + public void initialize(){ + Position position=randomPosition(); + if (elementPosition.containsKey(position)) + elementPosition.get(position).add(this); + else { + ArrayList<BoardElement> boardElements = new ArrayList<>(); + boardElements.add(this); + elementPosition.put(position, boardElements); + } } @Override diff --git a/src/main/java/model/Obstacle/Obstacles.java b/src/main/java/model/Obstacle/Obstacles.java index 52c830f525c622b9994781e998a9f9945d0a95ca..6705000de95f9e4f4852c83c545b4984a3dbe5fc 100644 --- a/src/main/java/model/Obstacle/Obstacles.java +++ b/src/main/java/model/Obstacle/Obstacles.java @@ -13,17 +13,9 @@ import static model.GameBoard.elementPosition; public abstract class Obstacles implements BoardElement { public abstract Color getColor(); + public abstract Boolean accept(Visitor visitor); - 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); - } - } + public void update(GameBoard gameBoard , Position position, HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition){ if(newElementPosition.containsKey(position)) diff --git a/src/main/java/model/Obstacle/Road.java b/src/main/java/model/Obstacle/Road.java index f4a15d5a94eeea524a5db428e0fa196fce3f06f8..cbe4b3bb8b3b8dfca16705676e43137e02e7e5ed 100644 --- a/src/main/java/model/Obstacle/Road.java +++ b/src/main/java/model/Obstacle/Road.java @@ -3,11 +3,16 @@ package model.Obstacle; import javafx.scene.paint.Color; import model.BoardElement; import model.GameBoard; +import model.Visitor.CrossableByRoad; import model.Visitor.Visitor; import util.Position; import java.util.ArrayList; import java.util.HashMap; +import java.util.Map; + +import static model.GameBoard.elementPosition; +import static model.GameBoard.randomPosition; public class Road extends Obstacles { private final Color color; @@ -28,11 +33,37 @@ public class Road extends Obstacles { @Override public void initialize() { - super.initialize(); + Position position = new Position(0,0); + int count = 0 ; + for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPosition.entrySet()) { + ArrayList<BoardElement> boardElements = entry.getValue(); + for(BoardElement boardElement : boardElements){ + if(!boardElement.accept(new CrossableByRoad())){ + position=entry.getKey(); + count++; + } + } + } + if(count!=0){ + Position newPosition = new Position(position.row(),position.column()+1); + if (elementPosition.containsKey(newPosition)) { + elementPosition.get(newPosition).add(this); + + } else { + ArrayList<BoardElement> boardElements = new ArrayList<>(); + boardElements.add(this); + elementPosition.put(newPosition, boardElements); + } + } + else { + ArrayList<BoardElement> boardElements = new ArrayList<>(); + boardElements.add(this); + elementPosition.put(randomPosition(), boardElements); + } } @Override public void update(GameBoard gameBoard, Position position, HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition) { super.update(gameBoard,position,newElementPosition,extinguishPosition); } -} +} \ No newline at end of file diff --git a/src/main/java/model/Rockery.java b/src/main/java/model/Rockery.java new file mode 100644 index 0000000000000000000000000000000000000000..e94e2ae0bc7fc6bac29b06a6760ee394152836a1 --- /dev/null +++ b/src/main/java/model/Rockery.java @@ -0,0 +1,72 @@ +package model; + +import javafx.scene.paint.Color; +import model.Visitor.CrossableByFire; +import model.Visitor.CrossableByRockery; +import model.Visitor.Visitor; +import util.Position; + +import java.util.ArrayList; +import java.util.HashMap; + +import static model.GameBoard.elementPosition; + +public class Rockery implements BoardElement{ + private final Color color; + + public Rockery(Color color){ + this.color=color; + } + @Override + public Color getColor() { + return color; + } + + @Override + public Boolean accept(Visitor visitor) { + return visitor.visit(this); + } + + @Override + public void initialize() { + Position position = GameBoard.randomPosition(); + + while(!canInitialise(position)){ + position = GameBoard.randomPosition(); + } + addElementToElementPosition(elementPosition,position); + } + + private boolean canInitialise(Position position) { + if(elementPosition.containsKey(position)) { + for (BoardElement element : GameBoard.elementPosition.get(position)) { + if (!element.accept(new CrossableByRockery())) { + return false; + } + } + } + return true; + } + + private void addElementToElementPosition(HashMap<Position, ArrayList<BoardElement>> newElementPosition, Position newFirePosition) { + if (newElementPosition.containsKey(newFirePosition) ) { + newElementPosition.get(newFirePosition).add(this); + } else { + ArrayList<BoardElement> boardElements = new ArrayList<>(); + boardElements.add(this); + newElementPosition.put(newFirePosition, boardElements); + } + } + + @Override + public void update(GameBoard gameBoard , Position position, HashMap<Position, ArrayList<BoardElement>> newElementPosition, + ArrayList<Position> extinguishPosition){ + if(newElementPosition.containsKey(position)) + newElementPosition.get(position).add(this); + else{ + ArrayList<BoardElement> boardElements = new ArrayList<>(); + boardElements.add(this); + newElementPosition.put(position,boardElements); + } + } +} diff --git a/src/main/java/model/Visitor/CrossRoad.java b/src/main/java/model/Visitor/CrossableByFire.java similarity index 82% rename from src/main/java/model/Visitor/CrossRoad.java rename to src/main/java/model/Visitor/CrossableByFire.java index 40f1eb87a03280d227302657dc51f2f8b2f926ff..198343c8bd6700fc974c7cc236b4297030b37041 100644 --- a/src/main/java/model/Visitor/CrossRoad.java +++ b/src/main/java/model/Visitor/CrossableByFire.java @@ -6,8 +6,9 @@ import model.ExtinguishFire.MotorizedFireFighter; import model.Flammable.Fire; import model.Obstacle.Mountain; import model.Obstacle.Road; +import model.Rockery; -public class CrossRoad implements Visitor { +public class CrossableByFire implements Visitor { @Override public boolean visit(Fire fire) { return false; @@ -26,8 +27,6 @@ public class CrossRoad implements Visitor { return false; } - - @Override public boolean visit(Mountain mountain) { return false; @@ -35,6 +34,11 @@ public class CrossRoad implements Visitor { @Override public boolean visit(Road road) { + return false; + } + + @Override + public boolean visit(Rockery rockery) { return true; } } diff --git a/src/main/java/model/Visitor/CrossableByFirefighter.java b/src/main/java/model/Visitor/CrossableByFirefighter.java new file mode 100644 index 0000000000000000000000000000000000000000..21ae2cae63d7c498db2898f6469a73bf4c5c9edd --- /dev/null +++ b/src/main/java/model/Visitor/CrossableByFirefighter.java @@ -0,0 +1,46 @@ +package model.Visitor; + +import model.ExtinguishFire.Cloud; +import model.ExtinguishFire.FireFighter; +import model.ExtinguishFire.MotorizedFireFighter; +import model.Flammable.Fire; +import model.Obstacle.Mountain; +import model.Obstacle.Road; +import model.Rockery; + +public class CrossableByFirefighter implements Visitor{ + @Override + public boolean visit(Fire fire) { + return true; + } + + @Override + public boolean visit(FireFighter fireFighter) { + return false; + } + + @Override + public boolean visit(Cloud cloud) { + return false; + } + + @Override + public boolean visit(MotorizedFireFighter motorizedFireFighter) { + return false; + } + + @Override + public boolean visit(Mountain mountain) { + return false; + } + + @Override + public boolean visit(Road road) { + return true; + } + + @Override + public boolean visit(Rockery rockery) { + return true; + } +} diff --git a/src/main/java/model/Visitor/CrossMountain.java b/src/main/java/model/Visitor/CrossableByMountain.java similarity index 80% rename from src/main/java/model/Visitor/CrossMountain.java rename to src/main/java/model/Visitor/CrossableByMountain.java index 6b0da04e64f2300608e60a3ff7b95c2eda38360a..650b4edc8dfb3d0e75c95a12af429b894c0a4c8f 100644 --- a/src/main/java/model/Visitor/CrossMountain.java +++ b/src/main/java/model/Visitor/CrossableByMountain.java @@ -6,8 +6,9 @@ import model.ExtinguishFire.MotorizedFireFighter; import model.Flammable.Fire; import model.Obstacle.Mountain; import model.Obstacle.Road; +import model.Rockery; -public class CrossMountain implements Visitor { +public class CrossableByMountain implements Visitor { @Override public boolean visit(Fire fire) { return false; @@ -26,11 +27,15 @@ public class CrossMountain implements Visitor { @Override public boolean visit(Mountain mountain) { - return true; + return false; } @Override public boolean visit(Road road) { return false; } + @Override + public boolean visit(Rockery rockery) { + return false; + } } diff --git a/src/main/java/model/Visitor/CrossableByRoad.java b/src/main/java/model/Visitor/CrossableByRoad.java new file mode 100644 index 0000000000000000000000000000000000000000..591b760901f4e7aec259af1a6d9d7a6c1082584c --- /dev/null +++ b/src/main/java/model/Visitor/CrossableByRoad.java @@ -0,0 +1,43 @@ +package model.Visitor; + +import model.ExtinguishFire.Cloud; +import model.ExtinguishFire.FireFighter; +import model.ExtinguishFire.MotorizedFireFighter; +import model.Flammable.Fire; +import model.Obstacle.Mountain; +import model.Obstacle.Road; +import model.Rockery; + +public class CrossableByRoad implements Visitor { + @Override + public boolean visit(Fire fire) { + return false; + } + + @Override + public boolean visit(FireFighter fireFighter) { + 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; + } + + @Override + public boolean visit(Road road) { + return false; + } + @Override + public boolean visit(Rockery rockery) { + return false; + } +} diff --git a/src/main/java/model/Visitor/CrossableByRockery.java b/src/main/java/model/Visitor/CrossableByRockery.java new file mode 100644 index 0000000000000000000000000000000000000000..3310a42bfeed78ffd23132c35b2e18e9c114c60b --- /dev/null +++ b/src/main/java/model/Visitor/CrossableByRockery.java @@ -0,0 +1,46 @@ +package model.Visitor; + +import model.ExtinguishFire.Cloud; +import model.ExtinguishFire.FireFighter; +import model.ExtinguishFire.MotorizedFireFighter; +import model.Flammable.Fire; +import model.Obstacle.Mountain; +import model.Obstacle.Road; +import model.Rockery; + +public class CrossableByRockery implements Visitor{ + @Override + public boolean visit(Fire fire) { + return true; + } + + @Override + public boolean visit(FireFighter fireFighter) { + 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; + } + + @Override + public boolean visit(Road road) { + return false; + } + + @Override + public boolean visit(Rockery rockery) { + return false; + } +} diff --git a/src/main/java/model/Visitor/FireFinder.java b/src/main/java/model/Visitor/FireFinder.java index dd8ed25a546046ad15ad60ad0000acd9c2ae4095..db0b3e2a9a4d70184c28943c4f10d7c4d6c3327c 100644 --- a/src/main/java/model/Visitor/FireFinder.java +++ b/src/main/java/model/Visitor/FireFinder.java @@ -6,6 +6,7 @@ import model.ExtinguishFire.MotorizedFireFighter; import model.Flammable.Fire; import model.Obstacle.Mountain; import model.Obstacle.Road; +import model.Rockery; public class FireFinder implements Visitor { @Override @@ -35,4 +36,8 @@ public class FireFinder implements Visitor { public boolean visit(Road road) { return false; } + @Override + public boolean visit(Rockery rockery) { + return false; + } } diff --git a/src/main/java/model/Visitor/RockeryFinder.java b/src/main/java/model/Visitor/RockeryFinder.java new file mode 100644 index 0000000000000000000000000000000000000000..2b62a87342ebf1f4a68455aa251ef753f29b685d --- /dev/null +++ b/src/main/java/model/Visitor/RockeryFinder.java @@ -0,0 +1,44 @@ +package model.Visitor; + +import model.ExtinguishFire.Cloud; +import model.ExtinguishFire.FireFighter; +import model.ExtinguishFire.MotorizedFireFighter; +import model.Flammable.Fire; +import model.Obstacle.Mountain; +import model.Obstacle.Road; +import model.Rockery; + +public class RockeryFinder implements Visitor{ + @Override + public boolean visit(Fire fire) { + return false; + } + + @Override + public boolean visit(FireFighter fireFighter) { + return false; + } + + @Override + public boolean visit(Cloud cloud) { + return false; + } + + @Override + public boolean visit(MotorizedFireFighter motorizedFireFighter) { + return false; + } + + @Override + public boolean visit(Mountain mountain) { + return false; + } + + @Override + public boolean visit(Road road) { + return false; + } + public boolean visit(Rockery rockery) { + return true; + } +} diff --git a/src/main/java/model/Visitor/Visitor.java b/src/main/java/model/Visitor/Visitor.java index 53cb66b6497e59ad15c9413fd55534bb849e5a3c..c546c8e23d2b6973dcab728ea5522e1b70a3c969 100644 --- a/src/main/java/model/Visitor/Visitor.java +++ b/src/main/java/model/Visitor/Visitor.java @@ -6,13 +6,14 @@ import model.ExtinguishFire.MotorizedFireFighter; import model.Flammable.Fire; import model.Obstacle.Mountain; import model.Obstacle.Road; +import model.Rockery; 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); + boolean visit(Rockery rockery); }