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);
 }