diff --git a/.gradle/8.10.2/checksums/checksums.lock b/.gradle/8.10.2/checksums/checksums.lock
new file mode 100644
index 0000000000000000000000000000000000000000..c6fbc10666e8d83a72ae779ca26100213afae867
Binary files /dev/null and b/.gradle/8.10.2/checksums/checksums.lock differ
diff --git a/.gradle/8.10.2/checksums/md5-checksums.bin b/.gradle/8.10.2/checksums/md5-checksums.bin
new file mode 100644
index 0000000000000000000000000000000000000000..8d067ec20a7dcf41b356774d823c9240154fb24a
Binary files /dev/null and b/.gradle/8.10.2/checksums/md5-checksums.bin differ
diff --git a/.gradle/8.10.2/checksums/sha1-checksums.bin b/.gradle/8.10.2/checksums/sha1-checksums.bin
new file mode 100644
index 0000000000000000000000000000000000000000..00956ce527e2a56652c433ba68fd95440dd511d1
Binary files /dev/null and b/.gradle/8.10.2/checksums/sha1-checksums.bin differ
diff --git a/.gradle/8.10.2/dependencies-accessors/gc.properties b/.gradle/8.10.2/dependencies-accessors/gc.properties
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/.gradle/8.10.2/executionHistory/executionHistory.bin b/.gradle/8.10.2/executionHistory/executionHistory.bin
new file mode 100644
index 0000000000000000000000000000000000000000..1d9b03bdc6cbe67e97519fb05e40e59a3e85c342
Binary files /dev/null and b/.gradle/8.10.2/executionHistory/executionHistory.bin differ
diff --git a/.gradle/8.10.2/executionHistory/executionHistory.lock b/.gradle/8.10.2/executionHistory/executionHistory.lock
new file mode 100644
index 0000000000000000000000000000000000000000..735bad5eeb75815a39b64a3ec41c81a38d1a15bf
Binary files /dev/null and b/.gradle/8.10.2/executionHistory/executionHistory.lock differ
diff --git a/.gradle/8.10.2/fileChanges/last-build.bin b/.gradle/8.10.2/fileChanges/last-build.bin
new file mode 100644
index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d
Binary files /dev/null and b/.gradle/8.10.2/fileChanges/last-build.bin differ
diff --git a/.gradle/8.10.2/fileHashes/fileHashes.bin b/.gradle/8.10.2/fileHashes/fileHashes.bin
new file mode 100644
index 0000000000000000000000000000000000000000..ae49fba6d39db2df31dca7d18e7c93407c9353c4
Binary files /dev/null and b/.gradle/8.10.2/fileHashes/fileHashes.bin differ
diff --git a/.gradle/8.10.2/fileHashes/fileHashes.lock b/.gradle/8.10.2/fileHashes/fileHashes.lock
new file mode 100644
index 0000000000000000000000000000000000000000..fbe7a20c23b6f0c4523910cf01fa0ca6c9780d18
Binary files /dev/null and b/.gradle/8.10.2/fileHashes/fileHashes.lock differ
diff --git a/.gradle/8.10.2/fileHashes/resourceHashesCache.bin b/.gradle/8.10.2/fileHashes/resourceHashesCache.bin
new file mode 100644
index 0000000000000000000000000000000000000000..cb7f20b246ae90a5f2ede90d885ffa634e43a510
Binary files /dev/null and b/.gradle/8.10.2/fileHashes/resourceHashesCache.bin differ
diff --git a/.gradle/8.10.2/gc.properties b/.gradle/8.10.2/gc.properties
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock
new file mode 100644
index 0000000000000000000000000000000000000000..9e69c2a3fb56ec2b2a8a719214101eb64207386e
Binary files /dev/null and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties
new file mode 100644
index 0000000000000000000000000000000000000000..55d4b5525aaa91e67351a8a932a453a85921b7d7
--- /dev/null
+++ b/.gradle/buildOutputCleanup/cache.properties
@@ -0,0 +1,2 @@
+#Fri Nov 08 10:47:52 CET 2024
+gradle.version=8.10.2
diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin
new file mode 100644
index 0000000000000000000000000000000000000000..aecd38125fa9404993ea041f3cc1df19ac0599f5
Binary files /dev/null and b/.gradle/buildOutputCleanup/outputFiles.bin differ
diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe
new file mode 100644
index 0000000000000000000000000000000000000000..fe886ac49c59267528f195425f1ec6f6d90a7d75
Binary files /dev/null and b/.gradle/file-system.probe differ
diff --git a/.gradle/vcs-1/gc.properties b/.gradle/vcs-1/gc.properties
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..ffd490716bc655f94aae954a7b09dc4aa0b75d8f
--- /dev/null
+++ b/README.md
@@ -0,0 +1,42 @@
+
+Groupe tp4:
+- Numa Efremon
+- Mehdi Martin
+
+# Rapport (08/11/2024)
+
+Nous avons pour cette séance décidée de réfléchir sur la stratégie pour mettre en œuvre le projet de manière efficace, pour cela.
+Nous avons opté pour un patron stratégie qui nous permettra de gérer les instances de feu et des pompiers ainsi qu'un patron.
+État qui nous permettra de gérer les états de manière efficace tout en respectant les principes solides. De plus, nous avons réglé.
+Les petits bugs qui étaient inclus dans les fichiers. Nous avons créé le diagramme des classes qui nous permettent de poser les bases.
+Afin d'implémenter les patrons de conception citée plus haut
+
+### Numa : analyse du code et résolution des bugs + création du diagramme des classes
+
+### Mehdi : analyse du code et tentative d'implémentation de la tache 1 + réflexion implémentation d'un patron de conception complet
+
+Objectif pour la semaine prochaine
+- faire la tache 1 tout en respectant le principe solide et le diagramme des classes
+- commencer à mettre en œuvre le patron de conception. 
+
+
+# Rapport (15/11/2024)
+
+Dans cette séance j'ai constaté que la nouvelle version du programme respectant les principes SOLID et le diagramme des classes implémenté possède certain bugs 
+nottament graphique, pour cela j'ai passer ma séance a annalyser le comportement du programme et à résoudre les bugs. Quand nous lancons le jeu nous voyons 
+tout simplement que les cases des feux disparaissent mais aucune création de case pour le feu ou de déplacement des pompiers. Je suppose donc que le problème viens 
+tout simplement de mes positions mais aprés un dégogage complet de chaque méthode j'ai constaté que le tableau de positions se met bien a jour donc le problème est ailleur 
+je me suis donc mis a deboger le controller et regardant précesment le rendue de grid.repaint(updatedSquares) je constate certaines annomalie : 
+    1) les feux sont crée dans la liste des mise a jour graphique mais ne sont pas affiché
+    2) il semple que certaine case soit mis a jours plusieurs fois 
+Pour régler le problème je vais adopter le principe de reverse ingeneering et je vais donc regarder le code de la classe grid pour comprendre comment elle fonctionne et comment elle met a jour les cases.
+
+### Numa : implémentation du diagrame + résolutions des bugs SOLID + résolutions de certains bugs du a l'implementation des tableaux 
+
+### Mehdi :rien 
+
+Objectif pour la semaine prochaine
+- résoudre le bugs graphique
+
+    
+    
\ No newline at end of file
diff --git a/build/classes/java/main/app/SimulatorApplication.class b/build/classes/java/main/app/SimulatorApplication.class
new file mode 100644
index 0000000000000000000000000000000000000000..e59db45cc2ae6bd48b1b517132ce22b532b94837
Binary files /dev/null and b/build/classes/java/main/app/SimulatorApplication.class differ
diff --git a/build/classes/java/main/app/SimulatorMain.class b/build/classes/java/main/app/SimulatorMain.class
new file mode 100644
index 0000000000000000000000000000000000000000..a2dee6a565c2ac303dd2d6027dbf08183edeeddf
Binary files /dev/null and b/build/classes/java/main/app/SimulatorMain.class differ
diff --git a/build/classes/java/main/controller/Controller.class b/build/classes/java/main/controller/Controller.class
new file mode 100644
index 0000000000000000000000000000000000000000..c60279b01b86922da4da68622370e03b145b4bfe
Binary files /dev/null and b/build/classes/java/main/controller/Controller.class differ
diff --git a/build/classes/java/main/controller/PersistentToggleGroup.class b/build/classes/java/main/controller/PersistentToggleGroup.class
new file mode 100644
index 0000000000000000000000000000000000000000..da299736efc238eef36f74e7abed7e5b291eba8d
Binary files /dev/null and b/build/classes/java/main/controller/PersistentToggleGroup.class differ
diff --git a/build/classes/java/main/model/Board.class b/build/classes/java/main/model/Board.class
new file mode 100644
index 0000000000000000000000000000000000000000..18242fdec83565452b8793a712481ec89a92e393
Binary files /dev/null and b/build/classes/java/main/model/Board.class differ
diff --git a/build/classes/java/main/model/FireFighterStrategy.class b/build/classes/java/main/model/FireFighterStrategy.class
new file mode 100644
index 0000000000000000000000000000000000000000..8006abb72f4d9b76c37045492c581ccaff46afe2
Binary files /dev/null and b/build/classes/java/main/model/FireFighterStrategy.class differ
diff --git a/build/classes/java/main/model/FireStrategy.class b/build/classes/java/main/model/FireStrategy.class
new file mode 100644
index 0000000000000000000000000000000000000000..ad0376d85ce52187497077055d9fa4bdced27c7d
Binary files /dev/null and b/build/classes/java/main/model/FireStrategy.class differ
diff --git a/build/classes/java/main/model/FirefighterBoard$1.class b/build/classes/java/main/model/FirefighterBoard$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..637582e21cc6af57b3b8a19c02ae62d0c462619a
Binary files /dev/null and b/build/classes/java/main/model/FirefighterBoard$1.class differ
diff --git a/build/classes/java/main/model/FirefighterBoard.class b/build/classes/java/main/model/FirefighterBoard.class
new file mode 100644
index 0000000000000000000000000000000000000000..52b995794e6ac106a982055220b504094418932e
Binary files /dev/null and b/build/classes/java/main/model/FirefighterBoard.class differ
diff --git a/build/classes/java/main/model/Initializer.class b/build/classes/java/main/model/Initializer.class
new file mode 100644
index 0000000000000000000000000000000000000000..f9a4839bb3a5c0911ccbbe379b202962c18454b8
Binary files /dev/null and b/build/classes/java/main/model/Initializer.class differ
diff --git a/build/classes/java/main/model/ModelElement.class b/build/classes/java/main/model/ModelElement.class
new file mode 100644
index 0000000000000000000000000000000000000000..f756ec4d7620c7727342e7330b426f8db83a1489
Binary files /dev/null and b/build/classes/java/main/model/ModelElement.class differ
diff --git a/build/classes/java/main/model/ModelStrategy.class b/build/classes/java/main/model/ModelStrategy.class
new file mode 100644
index 0000000000000000000000000000000000000000..516baaceea58a7cb8dfd2a53c3e0abd49da01b8b
Binary files /dev/null and b/build/classes/java/main/model/ModelStrategy.class differ
diff --git a/build/classes/java/main/model/RandomCloudStrategy.class b/build/classes/java/main/model/RandomCloudStrategy.class
new file mode 100644
index 0000000000000000000000000000000000000000..66fd1fd236738e4dad1d4080850c026977ae8fe4
Binary files /dev/null and b/build/classes/java/main/model/RandomCloudStrategy.class differ
diff --git a/build/classes/java/main/module-info.class b/build/classes/java/main/module-info.class
new file mode 100644
index 0000000000000000000000000000000000000000..f0b28b3b4966d6d1c1eac55f53fff160e8e01b67
Binary files /dev/null and b/build/classes/java/main/module-info.class differ
diff --git a/build/classes/java/main/util/Position.class b/build/classes/java/main/util/Position.class
new file mode 100644
index 0000000000000000000000000000000000000000..afa6140ff267268bf6756e3a97e89a7b9e3ad65c
Binary files /dev/null and b/build/classes/java/main/util/Position.class differ
diff --git a/build/classes/java/main/util/TargetStrategy.class b/build/classes/java/main/util/TargetStrategy.class
new file mode 100644
index 0000000000000000000000000000000000000000..91ebbd6ca418ec914ccf852cf42b85aa1df23be1
Binary files /dev/null and b/build/classes/java/main/util/TargetStrategy.class differ
diff --git a/build/classes/java/main/view/FirefighterGrid.class b/build/classes/java/main/view/FirefighterGrid.class
new file mode 100644
index 0000000000000000000000000000000000000000..05ec18aeff68513e99aa82d1e6ae68a3edf3cccd
Binary files /dev/null and b/build/classes/java/main/view/FirefighterGrid.class differ
diff --git a/build/classes/java/main/view/Grid.class b/build/classes/java/main/view/Grid.class
new file mode 100644
index 0000000000000000000000000000000000000000..3db58592fb018dfd2fdd792ea9ad02a2a0d797c1
Binary files /dev/null and b/build/classes/java/main/view/Grid.class differ
diff --git a/build/classes/java/main/view/ViewElement.class b/build/classes/java/main/view/ViewElement.class
new file mode 100644
index 0000000000000000000000000000000000000000..bdf79ca7bc5a8994db9d0daeb5f21a0694d65bdb
Binary files /dev/null and b/build/classes/java/main/view/ViewElement.class differ
diff --git a/build/classes/java/test/model/FirefighterBoardTest.class b/build/classes/java/test/model/FirefighterBoardTest.class
new file mode 100644
index 0000000000000000000000000000000000000000..76372f1176ee1389803a2bb64c0a732cc57e4c36
Binary files /dev/null and b/build/classes/java/test/model/FirefighterBoardTest.class differ
diff --git a/build/classes/java/test/view/FirefighterGridTest.class b/build/classes/java/test/view/FirefighterGridTest.class
new file mode 100644
index 0000000000000000000000000000000000000000..281b17c8e26e41d3c98363898d7b8885135a4096
Binary files /dev/null and b/build/classes/java/test/view/FirefighterGridTest.class differ
diff --git a/build/libs/firefighter-all.jar b/build/libs/firefighter-all.jar
new file mode 100644
index 0000000000000000000000000000000000000000..23627f531755f6730cea1b00a09f39a50118853a
Binary files /dev/null and b/build/libs/firefighter-all.jar differ
diff --git a/build/reports/tests/test/classes/model.FirefighterBoardTest.html b/build/reports/tests/test/classes/model.FirefighterBoardTest.html
new file mode 100644
index 0000000000000000000000000000000000000000..bfe85276e89380544dec67eb477efe2ef46be4d4
--- /dev/null
+++ b/build/reports/tests/test/classes/model.FirefighterBoardTest.html
@@ -0,0 +1,111 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta http-equiv="x-ua-compatible" content="IE=edge"/>
+<title>Test results - FirefighterBoardTest</title>
+<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
+<link href="../css/style.css" rel="stylesheet" type="text/css"/>
+<script src="../js/report.js" type="text/javascript"></script>
+</head>
+<body>
+<div id="content">
+<h1>FirefighterBoardTest</h1>
+<div class="breadcrumbs">
+<a href="../index.html">all</a> &gt; 
+<a href="../packages/model.html">model</a> &gt; FirefighterBoardTest</div>
+<div id="summary">
+<table>
+<tr>
+<td>
+<div class="summaryGroup">
+<table>
+<tr>
+<td>
+<div class="infoBox" id="tests">
+<div class="counter">4</div>
+<p>tests</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="failures">
+<div class="counter">0</div>
+<p>failures</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="ignored">
+<div class="counter">0</div>
+<p>ignored</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="duration">
+<div class="counter">0.038s</div>
+<p>duration</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</td>
+<td>
+<div class="infoBox success" id="successRate">
+<div class="percent">100%</div>
+<p>successful</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div id="tabs">
+<ul class="tabLinks">
+<li>
+<a href="#tab0">Tests</a>
+</li>
+</ul>
+<div id="tab0" class="tab">
+<h2>Tests</h2>
+<table>
+<thead>
+<tr>
+<th>Test</th>
+<th>Duration</th>
+<th>Result</th>
+</tr>
+</thead>
+<tr>
+<td class="success">testColumnCount()</td>
+<td class="success">0.031s</td>
+<td class="success">passed</td>
+</tr>
+<tr>
+<td class="success">testGetState_afterSet()</td>
+<td class="success">0.006s</td>
+<td class="success">passed</td>
+</tr>
+<tr>
+<td class="success">testRowCount()</td>
+<td class="success">0.001s</td>
+<td class="success">passed</td>
+</tr>
+<tr>
+<td class="success">testStepNumber()</td>
+<td class="success">0s</td>
+<td class="success">passed</td>
+</tr>
+</table>
+</div>
+</div>
+<div id="footer">
+<p>
+<div>
+<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
+<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
+</label>
+</div>Generated by 
+<a href="http://www.gradle.org">Gradle 8.10.2</a> at 17 nov. 2024, 22:28:43</p>
+</div>
+</div>
+</body>
+</html>
diff --git a/build/reports/tests/test/classes/view.FirefighterGridTest.html b/build/reports/tests/test/classes/view.FirefighterGridTest.html
new file mode 100644
index 0000000000000000000000000000000000000000..b0858979bf03828ad4b7b4be819c05c17601f99c
--- /dev/null
+++ b/build/reports/tests/test/classes/view.FirefighterGridTest.html
@@ -0,0 +1,101 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta http-equiv="x-ua-compatible" content="IE=edge"/>
+<title>Test results - FirefighterGridTest</title>
+<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
+<link href="../css/style.css" rel="stylesheet" type="text/css"/>
+<script src="../js/report.js" type="text/javascript"></script>
+</head>
+<body>
+<div id="content">
+<h1>FirefighterGridTest</h1>
+<div class="breadcrumbs">
+<a href="../index.html">all</a> &gt; 
+<a href="../packages/view.html">view</a> &gt; FirefighterGridTest</div>
+<div id="summary">
+<table>
+<tr>
+<td>
+<div class="summaryGroup">
+<table>
+<tr>
+<td>
+<div class="infoBox" id="tests">
+<div class="counter">2</div>
+<p>tests</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="failures">
+<div class="counter">0</div>
+<p>failures</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="ignored">
+<div class="counter">0</div>
+<p>ignored</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="duration">
+<div class="counter">0.096s</div>
+<p>duration</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</td>
+<td>
+<div class="infoBox success" id="successRate">
+<div class="percent">100%</div>
+<p>successful</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div id="tabs">
+<ul class="tabLinks">
+<li>
+<a href="#tab0">Tests</a>
+</li>
+</ul>
+<div id="tab0" class="tab">
+<h2>Tests</h2>
+<table>
+<thead>
+<tr>
+<th>Test</th>
+<th>Duration</th>
+<th>Result</th>
+</tr>
+</thead>
+<tr>
+<td class="success">testColumnCount()</td>
+<td class="success">0.095s</td>
+<td class="success">passed</td>
+</tr>
+<tr>
+<td class="success">testRowCount()</td>
+<td class="success">0.001s</td>
+<td class="success">passed</td>
+</tr>
+</table>
+</div>
+</div>
+<div id="footer">
+<p>
+<div>
+<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
+<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
+</label>
+</div>Generated by 
+<a href="http://www.gradle.org">Gradle 8.10.2</a> at 17 nov. 2024, 22:28:43</p>
+</div>
+</div>
+</body>
+</html>
diff --git a/build/reports/tests/test/css/base-style.css b/build/reports/tests/test/css/base-style.css
new file mode 100644
index 0000000000000000000000000000000000000000..4afa73e3ddcf5e21bdd0a22ac575dc99b2e3d826
--- /dev/null
+++ b/build/reports/tests/test/css/base-style.css
@@ -0,0 +1,179 @@
+
+body {
+    margin: 0;
+    padding: 0;
+    font-family: sans-serif;
+    font-size: 12pt;
+}
+
+body, a, a:visited {
+    color: #303030;
+}
+
+#content {
+    padding-left: 50px;
+    padding-right: 50px;
+    padding-top: 30px;
+    padding-bottom: 30px;
+}
+
+#content h1 {
+    font-size: 160%;
+    margin-bottom: 10px;
+}
+
+#footer {
+    margin-top: 100px;
+    font-size: 80%;
+    white-space: nowrap;
+}
+
+#footer, #footer a {
+    color: #a0a0a0;
+}
+
+#line-wrapping-toggle {
+    vertical-align: middle;
+}
+
+#label-for-line-wrapping-toggle {
+    vertical-align: middle;
+}
+
+ul {
+    margin-left: 0;
+}
+
+h1, h2, h3 {
+    white-space: nowrap;
+}
+
+h2 {
+    font-size: 120%;
+}
+
+ul.tabLinks {
+    padding-left: 0;
+    padding-top: 10px;
+    padding-bottom: 10px;
+    overflow: auto;
+    min-width: 800px;
+    width: auto !important;
+    width: 800px;
+}
+
+ul.tabLinks li {
+    float: left;
+    height: 100%;
+    list-style: none;
+    padding-left: 10px;
+    padding-right: 10px;
+    padding-top: 5px;
+    padding-bottom: 5px;
+    margin-bottom: 0;
+    -moz-border-radius: 7px;
+    border-radius: 7px;
+    margin-right: 25px;
+    border: solid 1px #d4d4d4;
+    background-color: #f0f0f0;
+}
+
+ul.tabLinks li:hover {
+    background-color: #fafafa;
+}
+
+ul.tabLinks li.selected {
+    background-color: #c5f0f5;
+    border-color: #c5f0f5;
+}
+
+ul.tabLinks a {
+    font-size: 120%;
+    display: block;
+    outline: none;
+    text-decoration: none;
+    margin: 0;
+    padding: 0;
+}
+
+ul.tabLinks li h2 {
+    margin: 0;
+    padding: 0;
+}
+
+div.tab {
+}
+
+div.selected {
+    display: block;
+}
+
+div.deselected {
+    display: none;
+}
+
+div.tab table {
+    min-width: 350px;
+    width: auto !important;
+    width: 350px;
+    border-collapse: collapse;
+}
+
+div.tab th, div.tab table {
+    border-bottom: solid #d0d0d0 1px;
+}
+
+div.tab th {
+    text-align: left;
+    white-space: nowrap;
+    padding-left: 6em;
+}
+
+div.tab th:first-child {
+    padding-left: 0;
+}
+
+div.tab td {
+    white-space: nowrap;
+    padding-left: 6em;
+    padding-top: 5px;
+    padding-bottom: 5px;
+}
+
+div.tab td:first-child {
+    padding-left: 0;
+}
+
+div.tab td.numeric, div.tab th.numeric {
+    text-align: right;
+}
+
+span.code {
+    display: inline-block;
+    margin-top: 0em;
+    margin-bottom: 1em;
+}
+
+span.code pre {
+    font-size: 11pt;
+    padding-top: 10px;
+    padding-bottom: 10px;
+    padding-left: 10px;
+    padding-right: 10px;
+    margin: 0;
+    background-color: #f7f7f7;
+    border: solid 1px #d0d0d0;
+    min-width: 700px;
+    width: auto !important;
+    width: 700px;
+}
+
+span.wrapped pre {
+    word-wrap: break-word;
+    white-space: pre-wrap;
+    word-break: break-all;
+}
+
+label.hidden {
+    display: none;
+}
\ No newline at end of file
diff --git a/build/reports/tests/test/css/style.css b/build/reports/tests/test/css/style.css
new file mode 100644
index 0000000000000000000000000000000000000000..3dc4913e7a077a1f1f3810b1f20cc9275fb236bf
--- /dev/null
+++ b/build/reports/tests/test/css/style.css
@@ -0,0 +1,84 @@
+
+#summary {
+    margin-top: 30px;
+    margin-bottom: 40px;
+}
+
+#summary table {
+    border-collapse: collapse;
+}
+
+#summary td {
+    vertical-align: top;
+}
+
+.breadcrumbs, .breadcrumbs a {
+    color: #606060;
+}
+
+.infoBox {
+    width: 110px;
+    padding-top: 15px;
+    padding-bottom: 15px;
+    text-align: center;
+}
+
+.infoBox p {
+    margin: 0;
+}
+
+.counter, .percent {
+    font-size: 120%;
+    font-weight: bold;
+    margin-bottom: 8px;
+}
+
+#duration {
+    width: 125px;
+}
+
+#successRate, .summaryGroup {
+    border: solid 2px #d0d0d0;
+    -moz-border-radius: 10px;
+    border-radius: 10px;
+}
+
+#successRate {
+    width: 140px;
+    margin-left: 35px;
+}
+
+#successRate .percent {
+    font-size: 180%;
+}
+
+.success, .success a {
+    color: #008000;
+}
+
+div.success, #successRate.success {
+    background-color: #bbd9bb;
+    border-color: #008000;
+}
+
+.failures, .failures a {
+    color: #b60808;
+}
+
+.skipped, .skipped a {
+    color: #c09853;
+}
+
+div.failures, #successRate.failures {
+    background-color: #ecdada;
+    border-color: #b60808;
+}
+
+ul.linkList {
+    padding-left: 0;
+}
+
+ul.linkList li {
+    list-style: none;
+    margin-bottom: 5px;
+}
diff --git a/build/reports/tests/test/index.html b/build/reports/tests/test/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..b6e21a89b8bb54d504d0f4fb752134b1edd2df6c
--- /dev/null
+++ b/build/reports/tests/test/index.html
@@ -0,0 +1,153 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta http-equiv="x-ua-compatible" content="IE=edge"/>
+<title>Test results - Test Summary</title>
+<link href="css/base-style.css" rel="stylesheet" type="text/css"/>
+<link href="css/style.css" rel="stylesheet" type="text/css"/>
+<script src="js/report.js" type="text/javascript"></script>
+</head>
+<body>
+<div id="content">
+<h1>Test Summary</h1>
+<div id="summary">
+<table>
+<tr>
+<td>
+<div class="summaryGroup">
+<table>
+<tr>
+<td>
+<div class="infoBox" id="tests">
+<div class="counter">6</div>
+<p>tests</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="failures">
+<div class="counter">0</div>
+<p>failures</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="ignored">
+<div class="counter">0</div>
+<p>ignored</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="duration">
+<div class="counter">0.134s</div>
+<p>duration</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</td>
+<td>
+<div class="infoBox success" id="successRate">
+<div class="percent">100%</div>
+<p>successful</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div id="tabs">
+<ul class="tabLinks">
+<li>
+<a href="#tab0">Packages</a>
+</li>
+<li>
+<a href="#tab1">Classes</a>
+</li>
+</ul>
+<div id="tab0" class="tab">
+<h2>Packages</h2>
+<table>
+<thead>
+<tr>
+<th>Package</th>
+<th>Tests</th>
+<th>Failures</th>
+<th>Ignored</th>
+<th>Duration</th>
+<th>Success rate</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="success">
+<a href="packages/model.html">model</a>
+</td>
+<td>4</td>
+<td>0</td>
+<td>0</td>
+<td>0.038s</td>
+<td class="success">100%</td>
+</tr>
+<tr>
+<td class="success">
+<a href="packages/view.html">view</a>
+</td>
+<td>2</td>
+<td>0</td>
+<td>0</td>
+<td>0.096s</td>
+<td class="success">100%</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div id="tab1" class="tab">
+<h2>Classes</h2>
+<table>
+<thead>
+<tr>
+<th>Class</th>
+<th>Tests</th>
+<th>Failures</th>
+<th>Ignored</th>
+<th>Duration</th>
+<th>Success rate</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="success">
+<a href="classes/model.FirefighterBoardTest.html">model.FirefighterBoardTest</a>
+</td>
+<td>4</td>
+<td>0</td>
+<td>0</td>
+<td>0.038s</td>
+<td class="success">100%</td>
+</tr>
+<tr>
+<td class="success">
+<a href="classes/view.FirefighterGridTest.html">view.FirefighterGridTest</a>
+</td>
+<td>2</td>
+<td>0</td>
+<td>0</td>
+<td>0.096s</td>
+<td class="success">100%</td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+<div id="footer">
+<p>
+<div>
+<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
+<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
+</label>
+</div>Generated by 
+<a href="http://www.gradle.org">Gradle 8.10.2</a> at 17 nov. 2024, 22:28:43</p>
+</div>
+</div>
+</body>
+</html>
diff --git a/build/reports/tests/test/js/report.js b/build/reports/tests/test/js/report.js
new file mode 100644
index 0000000000000000000000000000000000000000..83bab4a19f36a6f460c6747ad6b7252f63a1fad3
--- /dev/null
+++ b/build/reports/tests/test/js/report.js
@@ -0,0 +1,194 @@
+(function (window, document) {
+    "use strict";
+
+    var tabs = {};
+
+    function changeElementClass(element, classValue) {
+        if (element.getAttribute("className")) {
+            element.setAttribute("className", classValue);
+        } else {
+            element.setAttribute("class", classValue);
+        }
+    }
+
+    function getClassAttribute(element) {
+        if (element.getAttribute("className")) {
+            return element.getAttribute("className");
+        } else {
+            return element.getAttribute("class");
+        }
+    }
+
+    function addClass(element, classValue) {
+        changeElementClass(element, getClassAttribute(element) + " " + classValue);
+    }
+
+    function removeClass(element, classValue) {
+        changeElementClass(element, getClassAttribute(element).replace(classValue, ""));
+    }
+
+    function initTabs() {
+        var container = document.getElementById("tabs");
+
+        tabs.tabs = findTabs(container);
+        tabs.titles = findTitles(tabs.tabs);
+        tabs.headers = findHeaders(container);
+        tabs.select = select;
+        tabs.deselectAll = deselectAll;
+        tabs.select(0);
+
+        return true;
+    }
+
+    function getCheckBox() {
+        return document.getElementById("line-wrapping-toggle");
+    }
+
+    function getLabelForCheckBox() {
+        return document.getElementById("label-for-line-wrapping-toggle");
+    }
+
+    function findCodeBlocks() {
+        var spans = document.getElementById("tabs").getElementsByTagName("span");
+        var codeBlocks = [];
+        for (var i = 0; i < spans.length; ++i) {
+            if (spans[i].className.indexOf("code") >= 0) {
+                codeBlocks.push(spans[i]);
+            }
+        }
+        return codeBlocks;
+    }
+
+    function forAllCodeBlocks(operation) {
+        var codeBlocks = findCodeBlocks();
+
+        for (var i = 0; i < codeBlocks.length; ++i) {
+            operation(codeBlocks[i], "wrapped");
+        }
+    }
+
+    function toggleLineWrapping() {
+        var checkBox = getCheckBox();
+
+        if (checkBox.checked) {
+            forAllCodeBlocks(addClass);
+        } else {
+            forAllCodeBlocks(removeClass);
+        }
+    }
+
+    function initControls() {
+        if (findCodeBlocks().length > 0) {
+            var checkBox = getCheckBox();
+            var label = getLabelForCheckBox();
+
+            checkBox.onclick = toggleLineWrapping;
+            checkBox.checked = false;
+
+            removeClass(label, "hidden");
+         }
+    }
+
+    function switchTab() {
+        var id = this.id.substr(1);
+
+        for (var i = 0; i < tabs.tabs.length; i++) {
+            if (tabs.tabs[i].id === id) {
+                tabs.select(i);
+                break;
+            }
+        }
+
+        return false;
+    }
+
+    function select(i) {
+        this.deselectAll();
+
+        changeElementClass(this.tabs[i], "tab selected");
+        changeElementClass(this.headers[i], "selected");
+
+        while (this.headers[i].firstChild) {
+            this.headers[i].removeChild(this.headers[i].firstChild);
+        }
+
+        var h2 = document.createElement("H2");
+
+        h2.appendChild(document.createTextNode(this.titles[i]));
+        this.headers[i].appendChild(h2);
+    }
+
+    function deselectAll() {
+        for (var i = 0; i < this.tabs.length; i++) {
+            changeElementClass(this.tabs[i], "tab deselected");
+            changeElementClass(this.headers[i], "deselected");
+
+            while (this.headers[i].firstChild) {
+                this.headers[i].removeChild(this.headers[i].firstChild);
+            }
+
+            var a = document.createElement("A");
+
+            a.setAttribute("id", "ltab" + i);
+            a.setAttribute("href", "#tab" + i);
+            a.onclick = switchTab;
+            a.appendChild(document.createTextNode(this.titles[i]));
+
+            this.headers[i].appendChild(a);
+        }
+    }
+
+    function findTabs(container) {
+        return findChildElements(container, "DIV", "tab");
+    }
+
+    function findHeaders(container) {
+        var owner = findChildElements(container, "UL", "tabLinks");
+        return findChildElements(owner[0], "LI", null);
+    }
+
+    function findTitles(tabs) {
+        var titles = [];
+
+        for (var i = 0; i < tabs.length; i++) {
+            var tab = tabs[i];
+            var header = findChildElements(tab, "H2", null)[0];
+
+            header.parentNode.removeChild(header);
+
+            if (header.innerText) {
+                titles.push(header.innerText);
+            } else {
+                titles.push(header.textContent);
+            }
+        }
+
+        return titles;
+    }
+
+    function findChildElements(container, name, targetClass) {
+        var elements = [];
+        var children = container.childNodes;
+
+        for (var i = 0; i < children.length; i++) {
+            var child = children.item(i);
+
+            if (child.nodeType === 1 && child.nodeName === name) {
+                if (targetClass && child.className.indexOf(targetClass) < 0) {
+                    continue;
+                }
+
+                elements.push(child);
+            }
+        }
+
+        return elements;
+    }
+
+    // Entry point.
+
+    window.onload = function() {
+        initTabs();
+        initControls();
+    };
+} (window, window.document));
\ No newline at end of file
diff --git a/build/reports/tests/test/packages/model.html b/build/reports/tests/test/packages/model.html
new file mode 100644
index 0000000000000000000000000000000000000000..7712ac6ffb9fe17216d1dc8a4cd801d89812faba
--- /dev/null
+++ b/build/reports/tests/test/packages/model.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta http-equiv="x-ua-compatible" content="IE=edge"/>
+<title>Test results - Package model</title>
+<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
+<link href="../css/style.css" rel="stylesheet" type="text/css"/>
+<script src="../js/report.js" type="text/javascript"></script>
+</head>
+<body>
+<div id="content">
+<h1>Package model</h1>
+<div class="breadcrumbs">
+<a href="../index.html">all</a> &gt; model</div>
+<div id="summary">
+<table>
+<tr>
+<td>
+<div class="summaryGroup">
+<table>
+<tr>
+<td>
+<div class="infoBox" id="tests">
+<div class="counter">4</div>
+<p>tests</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="failures">
+<div class="counter">0</div>
+<p>failures</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="ignored">
+<div class="counter">0</div>
+<p>ignored</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="duration">
+<div class="counter">0.038s</div>
+<p>duration</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</td>
+<td>
+<div class="infoBox success" id="successRate">
+<div class="percent">100%</div>
+<p>successful</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div id="tabs">
+<ul class="tabLinks">
+<li>
+<a href="#tab0">Classes</a>
+</li>
+</ul>
+<div id="tab0" class="tab">
+<h2>Classes</h2>
+<table>
+<thead>
+<tr>
+<th>Class</th>
+<th>Tests</th>
+<th>Failures</th>
+<th>Ignored</th>
+<th>Duration</th>
+<th>Success rate</th>
+</tr>
+</thead>
+<tr>
+<td class="success">
+<a href="../classes/model.FirefighterBoardTest.html">FirefighterBoardTest</a>
+</td>
+<td>4</td>
+<td>0</td>
+<td>0</td>
+<td>0.038s</td>
+<td class="success">100%</td>
+</tr>
+</table>
+</div>
+</div>
+<div id="footer">
+<p>
+<div>
+<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
+<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
+</label>
+</div>Generated by 
+<a href="http://www.gradle.org">Gradle 8.10.2</a> at 17 nov. 2024, 22:28:43</p>
+</div>
+</div>
+</body>
+</html>
diff --git a/build/reports/tests/test/packages/view.html b/build/reports/tests/test/packages/view.html
new file mode 100644
index 0000000000000000000000000000000000000000..a0ff9b6df9df933f8398cb2df43c7124605d3b5f
--- /dev/null
+++ b/build/reports/tests/test/packages/view.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta http-equiv="x-ua-compatible" content="IE=edge"/>
+<title>Test results - Package view</title>
+<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
+<link href="../css/style.css" rel="stylesheet" type="text/css"/>
+<script src="../js/report.js" type="text/javascript"></script>
+</head>
+<body>
+<div id="content">
+<h1>Package view</h1>
+<div class="breadcrumbs">
+<a href="../index.html">all</a> &gt; view</div>
+<div id="summary">
+<table>
+<tr>
+<td>
+<div class="summaryGroup">
+<table>
+<tr>
+<td>
+<div class="infoBox" id="tests">
+<div class="counter">2</div>
+<p>tests</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="failures">
+<div class="counter">0</div>
+<p>failures</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="ignored">
+<div class="counter">0</div>
+<p>ignored</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="duration">
+<div class="counter">0.096s</div>
+<p>duration</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</td>
+<td>
+<div class="infoBox success" id="successRate">
+<div class="percent">100%</div>
+<p>successful</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div id="tabs">
+<ul class="tabLinks">
+<li>
+<a href="#tab0">Classes</a>
+</li>
+</ul>
+<div id="tab0" class="tab">
+<h2>Classes</h2>
+<table>
+<thead>
+<tr>
+<th>Class</th>
+<th>Tests</th>
+<th>Failures</th>
+<th>Ignored</th>
+<th>Duration</th>
+<th>Success rate</th>
+</tr>
+</thead>
+<tr>
+<td class="success">
+<a href="../classes/view.FirefighterGridTest.html">FirefighterGridTest</a>
+</td>
+<td>2</td>
+<td>0</td>
+<td>0</td>
+<td>0.096s</td>
+<td class="success">100%</td>
+</tr>
+</table>
+</div>
+</div>
+<div id="footer">
+<p>
+<div>
+<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
+<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
+</label>
+</div>Generated by 
+<a href="http://www.gradle.org">Gradle 8.10.2</a> at 17 nov. 2024, 22:28:43</p>
+</div>
+</div>
+</body>
+</html>
diff --git a/build/resources/main/view/DarkTheme.css b/build/resources/main/view/DarkTheme.css
new file mode 100644
index 0000000000000000000000000000000000000000..46b78aaf90972dd435399466c9fd861ca73fc59f
--- /dev/null
+++ b/build/resources/main/view/DarkTheme.css
@@ -0,0 +1,142 @@
+.background {
+    -fx-background-color: #1d1d1d;
+}
+
+.label {
+    -fx-font-size: 11pt;
+    -fx-font-family: "Segoe UI Semibold";
+    -fx-text-fill: white;
+    -fx-opacity: 0.6;
+}
+
+.label-bright {
+    -fx-font-size: 11pt;
+    -fx-font-family: "Segoe UI Semibold";
+    -fx-text-fill: white;
+    -fx-opacity: 1;
+}
+
+.label-header {
+    -fx-font-size: 32pt;
+    -fx-font-family: "Segoe UI Light";
+    -fx-text-fill: white;
+    -fx-opacity: 1;
+}
+
+.table-view {
+    -fx-base: #1d1d1d;
+    -fx-control-inner-background: #1d1d1d;
+    -fx-background-color: #1d1d1d;
+    -fx-table-cell-border-color: transparent;
+    -fx-table-header-border-color: transparent;
+    -fx-padding: 5;
+}
+
+.table-view .column-header-background {
+    -fx-background-color: transparent;
+}
+
+.table-view .column-header, .table-view .filler {
+    -fx-border-width: 0 0 1 0;
+    -fx-background-color: transparent;
+    -fx-border-color: 
+        transparent
+        transparent
+        derive(-fx-base, 80%) 
+        transparent;
+    -fx-border-insets: 0 10 1 0;
+}
+
+.table-view .column-header .label {
+    -fx-font-size: 20pt;
+    -fx-font-family: "Segoe UI Light";
+    -fx-text-fill: white;
+    -fx-alignment: center-left;
+    -fx-opacity: 1;
+}
+
+.table-view:focused .table-row-cell:filled:focused:selected {
+    -fx-background-color: -fx-focus-color;
+}
+
+.split-pane:horizontal > .split-pane-divider {
+    -fx-border-color: transparent #1d1d1d transparent #1d1d1d;
+    -fx-background-color: transparent, derive(#1d1d1d,20%);
+}
+
+.split-pane {
+    -fx-padding: 1 0 0 0;
+}
+
+.menu-bar {
+    -fx-background-color: derive(#1d1d1d,20%);
+}
+
+.context-menu {
+    -fx-background-color: derive(#1d1d1d,50%);
+}
+
+.menu-bar .label {
+    -fx-font-size: 14pt;
+    -fx-font-family: "Segoe UI Light";
+    -fx-text-fill: white;
+    -fx-opacity: 0.9;
+}
+
+.menu .left-container {
+    -fx-background-color: black;
+}
+
+.text-field {
+    -fx-font-size: 12pt;
+    -fx-font-family: "Segoe UI Semibold";
+}
+
+/* 
+ * Metro style Push Button
+ * Author: Pedro Duque Vieira
+ * http://pixelduke.wordpress.com/2012/10/23/jmetro-windows-8-controls-on-java/
+ */
+.button {
+    -fx-padding: 5 22 5 22;   
+    -fx-border-color: #e2e2e2;
+    -fx-border-width: 2;
+    -fx-background-radius: 0;
+    -fx-background-color: #1d1d1d;
+    -fx-font-family: "Segoe UI", Helvetica, Arial, sans-serif;
+    -fx-font-size: 11pt;
+    -fx-text-fill: #d8d8d8;
+    -fx-background-insets: 0 0 0 0, 0, 1, 2;
+}
+
+.button:hover {
+    -fx-background-color: #3a3a3a;
+}
+
+.button:pressed, .button:default:hover:pressed {
+  -fx-background-color: white;
+  -fx-text-fill: #1d1d1d;
+}
+
+.button:focused {
+    -fx-border-color: white, white;
+    -fx-border-width: 1, 1;
+    -fx-border-style: solid;
+    -fx-border-radius: 0, 0;
+    -fx-border-insets: 1 1 1 1, 0;
+}
+
+.button:disabled, .button:default:disabled {
+    -fx-opacity: 0.4;
+    -fx-background-color: #1d1d1d;
+    -fx-text-fill: white;
+}
+
+.button:default {
+    -fx-background-color: -fx-focus-color;
+    -fx-text-fill: #ffffff;
+}
+
+.button:default:hover {
+    -fx-background-color: derive(-fx-focus-color,30%);
+}
\ No newline at end of file
diff --git a/build/resources/main/view/view.fxml b/build/resources/main/view/view.fxml
new file mode 100644
index 0000000000000000000000000000000000000000..336ffa315645baacbe25bf59171d2ff6d867b9c5
--- /dev/null
+++ b/build/resources/main/view/view.fxml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.scene.control.Button?>
+<?import javafx.scene.layout.HBox?>
+<?import javafx.scene.layout.VBox?>
+<?import view.FirefighterGrid?>
+
+<?import javafx.scene.control.ToggleButton?>
+<?import javafx.scene.control.Separator?>
+<?import javafx.scene.control.Label?>
+<HBox styleClass="background" stylesheets="@DarkTheme.css"
+      xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml"
+      fx:controller="controller.Controller">
+  <VBox>
+    <Separator maxHeight="-Infinity" maxWidth="-Infinity"
+               prefHeight="24.0" prefWidth="200.0"/>
+    <Label maxHeight="-Infinity" maxWidth="-Infinity" alignment="CENTER" prefHeight="24.0" prefWidth="200.0"
+           text="Generation number"/>
+    <Label fx:id="generationNumberLabel" alignment="CENTER" contentDisplay="TEXT_ONLY"
+           maxHeight="-Infinity" maxWidth="-Infinity" prefHeight="24.0" prefWidth="200.0"/>
+    <Separator maxHeight="-Infinity" maxWidth="-Infinity"
+               prefHeight="24.0" prefWidth="200.0"/>
+    <Button fx:id="restartButton" maxHeight="-Infinity" maxWidth="-Infinity"
+            mnemonicParsing="false" onAction="#restartButtonAction" prefHeight="24.0" prefWidth="200.0"
+            text="Restart"/>
+    <Button fx:id="oneStepButton" maxHeight="-Infinity" maxWidth="-Infinity"
+            mnemonicParsing="false" onAction="#oneStepButtonAction" prefHeight="24.0" prefWidth="200.0"
+            text="One step"/>
+    <ToggleButton fx:id="playToggleButton" maxHeight="-Infinity" maxWidth="-Infinity"
+                  mnemonicParsing="false" onAction="#playToggleButtonAction" prefHeight="24.0"
+                  prefWidth="200.0" styleClass="button" text="Play"/>
+    <ToggleButton fx:id="pauseToggleButton" maxHeight="-Infinity" maxWidth="-Infinity"
+                  mnemonicParsing="false" onAction="#pauseToggleButtonAction" prefHeight="24.0"
+                  prefWidth="200.0" styleClass="button" text="Pause"/>
+  </VBox>
+  <FirefighterGrid fx:id="grid"
+                   xmlns="http://javafx.com/javafx"
+                   xmlns:fx="http://javafx.com/fxml">
+  </FirefighterGrid>
+</HBox>
diff --git a/build/scriptsShadow/firefighter b/build/scriptsShadow/firefighter
new file mode 100755
index 0000000000000000000000000000000000000000..ecdb49f7161492f27d686545536b691fbc98cf31
--- /dev/null
+++ b/build/scriptsShadow/firefighter
@@ -0,0 +1,183 @@
+#!/usr/bin/env sh
+
+#
+# Copyright 2015 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+##
+##  firefighter start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/.." >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="firefighter"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and FIREFIGHTER_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+    echo "$*"
+}
+
+die () {
+    echo
+    echo "$*"
+    echo
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+  CYGWIN* )
+    cygwin=true
+    ;;
+  Darwin* )
+    darwin=true
+    ;;
+  MINGW* )
+    msys=true
+    ;;
+  NONSTOP* )
+    nonstop=true
+    ;;
+esac
+
+CLASSPATH=$APP_HOME/lib/firefighter-all.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+        JAVACMD="$JAVA_HOME/bin/java"
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD="java"
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+    MAX_FD_LIMIT=`ulimit -H -n`
+    if [ $? -eq 0 ] ; then
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+            MAX_FD="$MAX_FD_LIMIT"
+        fi
+        ulimit -n $MAX_FD
+        if [ $? -ne 0 ] ; then
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
+        fi
+    else
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+    fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+    JAVACMD=`cygpath --unix "$JAVACMD"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=`expr $i + 1`
+    done
+    case $i in
+        0) set -- ;;
+        1) set -- "$args0" ;;
+        2) set -- "$args0" "$args1" ;;
+        3) set -- "$args0" "$args1" "$args2" ;;
+        4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Escape application args
+save () {
+    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+    echo " "
+}
+APP_ARGS=`save "$@"`
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $FIREFIGHTER_OPTS -jar "\"$CLASSPATH\"" "$APP_ARGS"
+
+exec "$JAVACMD" "$@"
\ No newline at end of file
diff --git a/build/scriptsShadow/firefighter.bat b/build/scriptsShadow/firefighter.bat
new file mode 100644
index 0000000000000000000000000000000000000000..9d9829681fb66d0a67461026443aef372fc9b694
--- /dev/null
+++ b/build/scriptsShadow/firefighter.bat
@@ -0,0 +1,84 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem  firefighter startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%..
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and FIREFIGHTER_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\lib\firefighter-all.jar
+
+@rem Execute firefighter
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %FIREFIGHTER_OPTS%  -jar "%CLASSPATH%" %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable FIREFIGHTER_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if  not "" == "%FIREFIGHTER_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
\ No newline at end of file
diff --git a/build/test-results/test/TEST-model.FirefighterBoardTest.xml b/build/test-results/test/TEST-model.FirefighterBoardTest.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e7981c210077de4c834de2c9b0cf387c5a4eb6cc
--- /dev/null
+++ b/build/test-results/test/TEST-model.FirefighterBoardTest.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<testsuite name="model.FirefighterBoardTest" tests="4" skipped="0" failures="0" errors="0" timestamp="2024-11-17T21:28:43" hostname="macbookair.home" time="0.04">
+  <properties/>
+  <testcase name="testColumnCount()" classname="model.FirefighterBoardTest" time="0.031"/>
+  <testcase name="testGetState_afterSet()" classname="model.FirefighterBoardTest" time="0.006"/>
+  <testcase name="testRowCount()" classname="model.FirefighterBoardTest" time="0.001"/>
+  <testcase name="testStepNumber()" classname="model.FirefighterBoardTest" time="0.0"/>
+  <system-out><![CDATA[]]></system-out>
+  <system-err><![CDATA[]]></system-err>
+</testsuite>
diff --git a/build/test-results/test/TEST-view.FirefighterGridTest.xml b/build/test-results/test/TEST-view.FirefighterGridTest.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2a92e85fe56fd274c2eff396352d002ab4596173
--- /dev/null
+++ b/build/test-results/test/TEST-view.FirefighterGridTest.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<testsuite name="view.FirefighterGridTest" tests="2" skipped="0" failures="0" errors="0" timestamp="2024-11-17T21:28:43" hostname="macbookair.home" time="0.096">
+  <properties/>
+  <testcase name="testColumnCount()" classname="view.FirefighterGridTest" time="0.095"/>
+  <testcase name="testRowCount()" classname="view.FirefighterGridTest" time="0.001"/>
+  <system-out><![CDATA[]]></system-out>
+  <system-err><![CDATA[]]></system-err>
+</testsuite>
diff --git a/build/test-results/test/binary/output.bin b/build/test-results/test/binary/output.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/build/test-results/test/binary/output.bin.idx b/build/test-results/test/binary/output.bin.idx
new file mode 100644
index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d
Binary files /dev/null and b/build/test-results/test/binary/output.bin.idx differ
diff --git a/build/test-results/test/binary/results.bin b/build/test-results/test/binary/results.bin
new file mode 100644
index 0000000000000000000000000000000000000000..2e1c8f5b10dab7b147f4e69f2065f22739b5e5b8
Binary files /dev/null and b/build/test-results/test/binary/results.bin differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Controller.class.uniqueId3 b/build/tmp/compileJava/compileTransaction/stash-dir/Controller.class.uniqueId3
new file mode 100644
index 0000000000000000000000000000000000000000..c60279b01b86922da4da68622370e03b145b4bfe
Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/Controller.class.uniqueId3 differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/FirefighterBoard$1.class.uniqueId4 b/build/tmp/compileJava/compileTransaction/stash-dir/FirefighterBoard$1.class.uniqueId4
new file mode 100644
index 0000000000000000000000000000000000000000..637582e21cc6af57b3b8a19c02ae62d0c462619a
Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/FirefighterBoard$1.class.uniqueId4 differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/FirefighterBoard.class.uniqueId1 b/build/tmp/compileJava/compileTransaction/stash-dir/FirefighterBoard.class.uniqueId1
new file mode 100644
index 0000000000000000000000000000000000000000..5f65afd279c16ea7d0121adab5450a84ec9c78b1
Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/FirefighterBoard.class.uniqueId1 differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/RandomCloudStrategy.class.uniqueId2 b/build/tmp/compileJava/compileTransaction/stash-dir/RandomCloudStrategy.class.uniqueId2
new file mode 100644
index 0000000000000000000000000000000000000000..a009523a041ce1cea2d5e6da47fd13805ee91cd5
Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/RandomCloudStrategy.class.uniqueId2 differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/module-info.class.uniqueId0 b/build/tmp/compileJava/compileTransaction/stash-dir/module-info.class.uniqueId0
new file mode 100644
index 0000000000000000000000000000000000000000..f0b28b3b4966d6d1c1eac55f53fff160e8e01b67
Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/module-info.class.uniqueId0 differ
diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin
new file mode 100644
index 0000000000000000000000000000000000000000..55492907100549a09ccee9fbfa874c677b7ab0e1
Binary files /dev/null and b/build/tmp/compileJava/previous-compilation-data.bin differ
diff --git a/build/tmp/compileTestJava/compileTransaction/stash-dir/FirefighterBoardTest.class.uniqueId0 b/build/tmp/compileTestJava/compileTransaction/stash-dir/FirefighterBoardTest.class.uniqueId0
new file mode 100644
index 0000000000000000000000000000000000000000..21d13f1cc1402592912e6a62f579ee1dcbfca7ef
Binary files /dev/null and b/build/tmp/compileTestJava/compileTransaction/stash-dir/FirefighterBoardTest.class.uniqueId0 differ
diff --git a/build/tmp/compileTestJava/previous-compilation-data.bin b/build/tmp/compileTestJava/previous-compilation-data.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a15ffba00a11c94f60828e536b32007d148ad76e
Binary files /dev/null and b/build/tmp/compileTestJava/previous-compilation-data.bin differ
diff --git a/build/tmp/shadowJar/MANIFEST.MF b/build/tmp/shadowJar/MANIFEST.MF
new file mode 100644
index 0000000000000000000000000000000000000000..2c5dafadb5f53a219e1c22537b872baf7d0b350d
--- /dev/null
+++ b/build/tmp/shadowJar/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Main-Class: app.SimulatorMain
+
diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java
index 2a60897c6eb8ba847cb8589840c16a0f175ce0a3..2af329f0ae7d110c65f169138cc271d36639605c 100644
--- a/src/main/java/controller/Controller.java
+++ b/src/main/java/controller/Controller.java
@@ -13,6 +13,7 @@ import javafx.scene.control.ToggleGroup;
 import javafx.util.Duration;
 import javafx.util.Pair;
 import model.Board;
+import model.Initializer;
 import model.ModelElement;
 import model.FirefighterBoard;
 import util.Position;
@@ -66,6 +67,7 @@ public class Controller {
       ViewElement viewElement = getViewElement(squareState);
       updatedSquares.add(new Pair<>(updatedPosition, viewElement));
     }
+    System.out.println("Mise à jour graphique : " + updatedSquares);
     grid.repaint(updatedSquares);
     updateGenerationLabel(board.stepNumber());
   }
@@ -82,19 +84,24 @@ public class Controller {
   }
 
   private ViewElement getViewElement(List<ModelElement> squareState) {
-    if(squareState.contains(ModelElement.FIREFIGHTER)){
+    if (squareState == null) {
+      return ViewElement.EMPTY;
+    }
+    if (squareState.contains(ModelElement.FIREFIGHTER)) {
       return ViewElement.FIREFIGHTER;
     }
-    if (squareState.contains(ModelElement.FIRE)){
+    if (squareState.contains(ModelElement.FIRE)) {
       return ViewElement.FIRE;
     }
+    if (squareState.contains(ModelElement.CLOUD)) {
+      return ViewElement.CLOUD;
+    }
     return ViewElement.EMPTY;
   }
 
   private void initializeTimeline() {
     Duration duration = new Duration(Controller.PERIOD_IN_MILLISECONDS);
-    EventHandler<ActionEvent> eventHandler =
-            event -> updateBoard();
+    EventHandler<ActionEvent> eventHandler = event -> updateBoard();
     KeyFrame keyFrame = new KeyFrame(duration, eventHandler);
     timeline = new Timeline(keyFrame);
     timeline.setCycleCount(Animation.INDEFINITE);
@@ -123,17 +130,19 @@ public class Controller {
     repaintGrid();
   }
 
+  public void oneStepButtonAction() {
+    this.pause();
+    updateBoard();
+  }
+
   public void initialize(int squareWidth, int squareHeight, int columnCount,
                                 int rowCount, int initialFireCount, int initialFirefighterCount) {
     grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight);
-    this.setModel(new FirefighterBoard(columnCount, rowCount, initialFireCount, initialFirefighterCount));
+    Initializer initializer = new Initializer(columnCount, rowCount, initialFireCount, initialFirefighterCount);
+    this.setModel(new FirefighterBoard(initializer));
     repaintGrid();
   }
 
-  public void oneStepButtonAction() {
-    this.pause();
-    updateBoard();
-  }
 
   private void updateGenerationLabel(int value){
     generationNumberLabel.setText(Integer.toString(value));
diff --git a/src/main/java/model/FireFighterStrategy.java b/src/main/java/model/FireFighterStrategy.java
new file mode 100644
index 0000000000000000000000000000000000000000..f707922ab0a3ec088247c12c8ee07144e2f8264c
--- /dev/null
+++ b/src/main/java/model/FireFighterStrategy.java
@@ -0,0 +1,62 @@
+package model;
+
+import util.Position;
+import util.TargetStrategy;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+public class FireFighterStrategy implements ModelStrategy {
+    private  final TargetStrategy targetStrategy = new TargetStrategy();
+    private List<Position> firefighterPositions;
+    private  final Set<Position> firePositions;
+    private  final Map<Position, List<Position>> neighbors;
+
+    public FireFighterStrategy(List<Position> initialFirefighterPositions, Set<Position> firePositions, Map<Position, List<Position>> neighbors) {
+        this.firefighterPositions = new ArrayList<>(initialFirefighterPositions); // Copie des positions initiales des pompiers
+        this.firePositions = firePositions; // Référence aux positions des feux
+        this.neighbors = neighbors; // Carte des voisins
+    }
+
+
+    @Override
+    public List<Position> update() {
+        List<Position> modifiedPosition = new ArrayList<>();
+        List<Position> firefighterNewPositions = new ArrayList<>();
+        for (Position firefighterPosition : firefighterPositions) {
+            Position newFirefighterPosition =
+                    targetStrategy.neighborClosestToFire(firefighterPosition,
+                            firePositions, neighbors);
+            firefighterNewPositions.add(newFirefighterPosition);
+            extinguish(newFirefighterPosition);
+            modifiedPosition.add(firefighterPosition);
+            modifiedPosition.add(newFirefighterPosition);
+            List<Position> neighborFirePositions = neighbors.get(newFirefighterPosition).stream()
+                    .filter(firePositions::contains).toList();
+            for (Position firePosition : neighborFirePositions)
+                extinguish(firePosition);
+            modifiedPosition.addAll(neighborFirePositions);
+        }
+        firefighterPositions = firefighterNewPositions;
+        return modifiedPosition;
+    }
+
+
+    private void extinguish(Position position) {
+        firePositions.remove(position);
+    }
+
+    @Override
+    public Set<Position> getFire() {
+        return firePositions ;
+    }
+
+    @Override
+    public List<Position> getModelPos() {
+        return firefighterPositions ;
+    }
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/model/FireStrategy.java b/src/main/java/model/FireStrategy.java
new file mode 100644
index 0000000000000000000000000000000000000000..320ebead0fb81a1c8e86283a43b8c955428ae9c9
--- /dev/null
+++ b/src/main/java/model/FireStrategy.java
@@ -0,0 +1,42 @@
+package model;
+
+import util.Position;
+
+import java.util.*;
+
+public class FireStrategy implements ModelStrategy {
+    private final Set<Position> firePositions;
+    private final Map<Position, List<Position>> neighbors;
+    int step ;
+
+    public FireStrategy(Set<Position> firePositions, Map<Position, List<Position>> neighbors, int step) {
+        this.firePositions = firePositions;
+        this.neighbors = neighbors;
+        this.step = step;
+    }
+
+    public List<Position> update() {
+        List<Position> modifiedPositions = new ArrayList<>();
+        if (step % 2 == 0) {
+            List<Position> newFirePositions = new ArrayList<>();
+            for (Position fire : firePositions) {
+                newFirePositions.addAll(neighbors.get(fire));
+            }
+            firePositions.addAll(newFirePositions);
+            modifiedPositions.addAll(newFirePositions);
+        }
+        return modifiedPositions;
+
+    }
+
+
+    @Override
+    public Set<Position> getFire() {
+        return firePositions ;
+    }
+
+    @Override
+    public List<Position> getModelPos() {
+        throw new UnsupportedOperationException("ici on appel le feu");
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java
index c0bd67cc4f444a33c41551779b11f3d619412bef..84c118a3351ca717a70d3445bd3d846e72f5c912 100644
--- a/src/main/java/model/FirefighterBoard.java
+++ b/src/main/java/model/FirefighterBoard.java
@@ -1,66 +1,35 @@
 package model;
 
 import util.Position;
-
 import java.util.*;
 
-
 public class FirefighterBoard implements Board<List<ModelElement>> {
   private final int columnCount;
   private final int rowCount;
   private final int initialFireCount;
   private final int initialFirefighterCount;
-  private final TargetStrategy targetStrategy = new TargetStrategy();
+
   private List<Position> firefighterPositions;
   private Set<Position> firePositions;
-  private Map<Position, List<Position>> neighbors = new HashMap();
+  private List<Position> cloudPositions;
+  private final Map<Position, List<Position>> neighbors;
   private final Position[][] positions;
-  private int step = 0;
-  private final Random randomGenerator = new Random();
-
-  public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount) {
-    this.columnCount = columnCount;
-    this.rowCount = rowCount;
-    this.positions = new Position[rowCount][columnCount];
-    for (int column = 0; column < columnCount; column++)
-      for (int row = 0; row < rowCount; row++)
-        positions[row][column] = new Position(row, column);
-    for (int column = 0; column < columnCount; column++)
-      for (int row = 0; row < rowCount; row++) {
-        List<Position> list = new ArrayList<>();
-        if (row > 0) list.add(positions[row - 1][column]);
-        if (column > 0) list.add(positions[row][column - 1]);
-        if (row < rowCount - 1) list.add(positions[row + 1][column]);
-        if (column < columnCount - 1) list.add(positions[row][column + 1]);
-        neighbors.put(positions[row][column], list);
-      }
-    this.initialFireCount = initialFireCount;
-    this.initialFirefighterCount = initialFirefighterCount;
-    initializeElements();
-  }
 
-  public void initializeElements() {
-    firefighterPositions = new ArrayList<>();
-    firePositions = new HashSet<>();
-    for (int index = 0; index < initialFireCount; index++)
-      firePositions.add(randomPosition());
-    for (int index = 0; index < initialFirefighterCount; index++)
-      firefighterPositions.add(randomPosition());
-  }
 
-  private Position randomPosition() {
-    return new Position(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(columnCount));
-  }
+  private int step = 0;
 
-  @Override
-  public List<ModelElement> getState(Position position) {
-    List<ModelElement> result = new ArrayList<>();
-    for (Position firefighterPosition : firefighterPositions)
-      if (firefighterPosition.equals(position))
-        result.add(ModelElement.FIREFIGHTER);
-    if (firePositions.contains(position))
-      result.add(ModelElement.FIRE);
-    return result;
+  // Constructor takes in the initializer to handle initialization
+  public FirefighterBoard(Initializer initializer) {
+    this.columnCount = initializer.getColumnCount();
+    this.rowCount = initializer.getRowCount();
+    this.initialFireCount = initializer.getInitialFireCount();
+    this.initialFirefighterCount = initializer.getInitialFirefighterCount();
+
+    this.positions = initializer.getPositions();
+    this.firefighterPositions = initializer.getFirefighterPositions();
+    this.firePositions = initializer.getFirePositions();
+    this.cloudPositions = initializer.getCloudPositions();
+    this.neighbors = initializer.getNeighbors();
   }
 
   @Override
@@ -73,63 +42,27 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
     return columnCount;
   }
 
-  public List<Position> updateToNextGeneration() {
-    List<Position> modifiedPositions = updateFirefighters();
-    modifiedPositions.addAll(updateFires());
-    step++;
-    return modifiedPositions;
-  }
-
-  private List<Position> updateFires() {
-    List<Position> modifiedPositions = new ArrayList<>();
-    if (step % 2 == 0) {
-      List<Position> newFirePositions = new ArrayList<>();
-      for (Position fire : firePositions) {
-        newFirePositions.addAll(neighbors.get(fire));
-      }
-      firePositions.addAll(newFirePositions);
-      modifiedPositions.addAll(newFirePositions);
-    }
-    return modifiedPositions;
-
-  }
 
   @Override
   public int stepNumber() {
     return step;
   }
 
-  private List<Position> updateFirefighters() {
-    List<Position> modifiedPosition = new ArrayList<>();
-    List<Position> firefighterNewPositions = new ArrayList<>();
-    for (Position firefighterPosition : firefighterPositions) {
-      Position newFirefighterPosition =
-              targetStrategy.neighborClosestToFire(firefighterPosition,
-                      firePositions, neighbors);
-      firefighterNewPositions.add(newFirefighterPosition);
-      extinguish(newFirefighterPosition);
-      modifiedPosition.add(firefighterPosition);
-      modifiedPosition.add(newFirefighterPosition);
-      List<Position> neighborFirePositions = neighbors.get(newFirefighterPosition).stream()
-              .filter(firePositions::contains).toList();
-      for (Position firePosition : neighborFirePositions)
-        extinguish(firePosition);
-      modifiedPosition.addAll(neighborFirePositions);
-    }
-    firefighterPositions = firefighterNewPositions;
-    return modifiedPosition;
-  }
 
   @Override
   public void reset() {
     step = 0;
-    initializeElements();
-  }
+    Initializer initializer = new Initializer(columnCount, rowCount, initialFireCount, initialFirefighterCount);
 
-  private void extinguish(Position position) {
-    firePositions.remove(position);
-  }
+    firePositions.clear();
+    firePositions.addAll(initializer.getFirePositions());
 
+    firefighterPositions.clear();
+    firefighterPositions.addAll(initializer.getFirefighterPositions());
+
+    cloudPositions.clear();
+    cloudPositions.addAll(initializer.getCloudPositions());
+  }
 
   @Override
   public void setState(List<ModelElement> state, Position position) {
@@ -141,7 +74,47 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
       switch (element) {
         case FIRE -> firePositions.add(position);
         case FIREFIGHTER -> firefighterPositions.add(position);
+        case CLOUD -> cloudPositions.add(position);
       }
     }
   }
-}
\ No newline at end of file
+
+
+  @Override
+  public List<ModelElement> getState(Position position) {
+    List<ModelElement> result = new ArrayList<>();
+    if (firefighterPositions.contains(position)) {
+      result.add(ModelElement.FIREFIGHTER);
+    }
+    if (firePositions.contains(position)) {
+      result.add(ModelElement.FIRE);
+    }
+    if (cloudPositions.contains(position)) {
+      result.add(ModelElement.CLOUD);
+    }
+    return result;
+  }
+
+  @Override
+  public List<Position> updateToNextGeneration() {
+    ModelStrategy Fire = new FireStrategy(firePositions, neighbors, step);
+    ModelStrategy FireFighter = new FireFighterStrategy(firefighterPositions, firePositions, neighbors);
+    ModelStrategy Cloud = new RandomCloudStrategy(cloudPositions, firePositions, neighbors, rowCount, columnCount);
+
+    List<Position> modifiedPositions = FireFighter.update() ;
+    firePositions= FireFighter.getFire() ;
+
+    modifiedPositions.addAll(Fire.update());
+    firePositions= Fire.getFire() ;
+    firefighterPositions= FireFighter.getModelPos() ;
+
+    modifiedPositions.addAll(Cloud.update());
+    firePositions= Cloud.getFire() ;
+    cloudPositions = Cloud.getModelPos() ;
+
+
+
+    step++;
+    return modifiedPositions;
+  }
+}
diff --git a/src/main/java/model/Initializer.java b/src/main/java/model/Initializer.java
new file mode 100644
index 0000000000000000000000000000000000000000..78f9ac4cc99fc4f13d6c3fed506b9a54225fbedb
--- /dev/null
+++ b/src/main/java/model/Initializer.java
@@ -0,0 +1,109 @@
+package model;
+
+import util.Position;
+import util.TargetStrategy;
+import java.util.*;
+
+public class Initializer {
+    private final int columnCount;
+    private final int rowCount;
+    private final int initialFireCount;
+    private final int initialFirefighterCount;
+
+    private final Position[][] positions;
+    private final Map<Position, List<Position>> neighbors;
+    private final List<Position> firefighterPositions;
+    private final Set<Position> firePositions;
+    private final List<Position> cloudPositions;
+
+    private final Random randomGenerator = new Random();
+
+    public Initializer(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount) {
+        this.columnCount = columnCount;
+        this.rowCount = rowCount;
+        this.initialFireCount = initialFireCount;
+        this.initialFirefighterCount = initialFirefighterCount;
+
+        this.positions = new Position[rowCount][columnCount];
+        this.neighbors = new HashMap<>();
+        this.firefighterPositions = new ArrayList<>();
+        this.firePositions = new HashSet<>();
+        this.cloudPositions = new ArrayList<>();
+
+        initializePositions();
+        initializeNeighbors();
+        initializeElements();
+    }
+
+    public void initializePositions() {
+        for (int row = 0; row < rowCount; row++) {
+            for (int col = 0; col < columnCount; col++) {
+                positions[row][col] = new Position(row, col);
+            }
+        }
+    }
+
+    public void initializeNeighbors() {
+        for (int row = 0; row < rowCount; row++) {
+            for (int col = 0; col < columnCount; col++) {
+                List<Position> list = new ArrayList<>();
+                if (row > 0) list.add(positions[row - 1][col]); // Up
+                if (col > 0) list.add(positions[row][col - 1]); // Left
+                if (row < rowCount - 1) list.add(positions[row + 1][col]); // Down
+                if (col < columnCount - 1) list.add(positions[row][col + 1]); // Right
+                neighbors.put(positions[row][col], list);
+            }
+        }
+    }
+
+    public void initializeElements() {
+        for (int i = 0; i < initialFireCount; i++) {
+            firePositions.add(randomPosition());
+        }
+        for (int i = 0; i < initialFirefighterCount; i++) {
+            firefighterPositions.add(randomPosition());
+        }
+        for (int i = 0; i < 6; i++) {
+            cloudPositions.add(randomPosition());
+        }
+    }
+
+    private Position randomPosition() {
+        return new Position(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(columnCount));
+    }
+
+    public int getColumnCount() {
+        return columnCount;
+    }
+
+    public int getRowCount() {
+        return rowCount;
+    }
+
+    public int getInitialFireCount() {
+        return initialFireCount;
+    }
+
+    public int getInitialFirefighterCount() {
+        return initialFirefighterCount;
+    }
+
+    public Position[][] getPositions() {
+        return positions;
+    }
+
+    public Map<Position, List<Position>> getNeighbors() {
+        return neighbors;
+    }
+
+    public List<Position> getFirefighterPositions() {
+        return firefighterPositions;
+    }
+
+    public Set<Position> getFirePositions() {
+        return firePositions;
+    }
+    public List<Position> getCloudPositions() {
+        return cloudPositions;
+    }
+}
diff --git a/src/main/java/model/ModelElement.java b/src/main/java/model/ModelElement.java
index 759eee5e54c3a39472d8f7defbbbe6a2b67b8f00..303e1dcb1b5238252d3e0e11364f24e56632e714 100644
--- a/src/main/java/model/ModelElement.java
+++ b/src/main/java/model/ModelElement.java
@@ -1,5 +1,5 @@
 package model;
 
 public enum ModelElement {
-  FIREFIGHTER, FIRE
+  FIREFIGHTER, FIRE ,CLOUD
 }
diff --git a/src/main/java/model/ModelStrategy.java b/src/main/java/model/ModelStrategy.java
new file mode 100644
index 0000000000000000000000000000000000000000..673641c24b8a6e6596f21447abdfbd46067fdb6f
--- /dev/null
+++ b/src/main/java/model/ModelStrategy.java
@@ -0,0 +1,12 @@
+package model;
+
+import util.Position;
+
+import java.util.List;
+import java.util.Set;
+
+public interface ModelStrategy {
+    List<Position> update() ;
+    List<Position> getModelPos();
+    Set<Position> getFire();
+}
diff --git a/src/main/java/model/RandomCloudStrategy.java b/src/main/java/model/RandomCloudStrategy.java
new file mode 100644
index 0000000000000000000000000000000000000000..8f67e44fec39951857f1c155b76ededd476b4a5f
--- /dev/null
+++ b/src/main/java/model/RandomCloudStrategy.java
@@ -0,0 +1,85 @@
+package model;
+
+import util.Position;
+import util.TargetStrategy;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Random;
+
+public class RandomCloudStrategy implements ModelStrategy {
+    private  final TargetStrategy targetStrategy = new TargetStrategy();
+    private List<Position> cloudPositions;
+    private  final Set<Position> firePositions;
+    private  final Map<Position, List<Position>> neighbors;
+    private Random randomNumbers ;
+    int maxRows;
+    int maxCols;
+
+    public RandomCloudStrategy(List<Position> cloudPosition, Set<Position> firePositions, Map<Position, List<Position>> neighbors, int maxRows, int maxCols) {
+        this.cloudPositions = new ArrayList<>(cloudPosition); // Copie des positions initiales des nuages
+        this.firePositions = firePositions; // Référence aux positions des feux
+        this.neighbors = neighbors; // Carte des voisins
+        randomNumbers = new Random(); // randomiser
+        this.maxRows = maxRows;
+        this.maxCols = maxCols;
+    }
+
+    @Override
+    public List<Position> update() {
+        List<Position> modifiedPosition = new ArrayList<>();
+        List<Position> cloudNewPositions = new ArrayList<>();
+
+        for (Position CloudPosition : cloudPositions) {
+            Position newCloudPosition = randomPosition(CloudPosition);
+
+            cloudNewPositions.add(newCloudPosition);
+            extinguish(newCloudPosition);
+            modifiedPosition.add(CloudPosition);
+            modifiedPosition.add(newCloudPosition);
+
+            List<Position> neighborFirePositions = neighbors.get(newCloudPosition);
+            if (neighborFirePositions != null) {
+                neighborFirePositions = neighborFirePositions.stream()
+                        .filter(firePositions::contains)
+                        .toList();
+
+                for (Position firePosition : neighborFirePositions) {
+                    extinguish(firePosition);
+                }
+                modifiedPosition.addAll(neighborFirePositions);
+            }
+        }
+        cloudPositions = cloudNewPositions;
+        return modifiedPosition;
+    }
+
+    public Position randomPosition(Position pos) {
+        int row_update = randomNumbers.nextInt(3) - 1; // Déplacement entre -1 et 1
+        int col_update = randomNumbers.nextInt(3) - 1; // Déplacement entre -1 et 1
+
+        // Calculer les nouvelles coordonnées
+        int newRow = pos.row() + row_update;
+        int newCol = pos.column() + col_update;
+        if(newRow>=0 && newRow<maxRows && newCol>=0 && newCol<maxCols){
+            return new Position(newRow, newCol);
+        }
+        return pos ;
+    }
+
+
+
+    @Override
+    public List<Position> getModelPos() {
+        return cloudPositions;
+    }
+    private void extinguish(Position position) {
+        firePositions.remove(position);
+    }
+    @Override
+    public Set<Position> getFire() {
+        return firePositions;
+    }
+}
diff --git a/src/main/java/util/TargetStrategy.java b/src/main/java/util/TargetStrategy.java
index 583186787d4d8d47173fbe61cc424f2f7ee384c9..5e2e743affb2795efbf641942452fe0339d5bce9 100644
--- a/src/main/java/util/TargetStrategy.java
+++ b/src/main/java/util/TargetStrategy.java
@@ -1,4 +1,4 @@
-package model;
+package util;
 
 import util.Position;
 
@@ -12,8 +12,8 @@ public class TargetStrategy {
      * @param targets positions that are targeted.
      * @return the position next to the current position that is on the path to the closest target.
      */
-    Position neighborClosestToFire(Position position, Collection<Position> targets,
-                                   Map<Position,List<Position>>neighbors) {
+    public Position neighborClosestToFire(Position position, Collection<Position> targets,
+                                          Map<Position, List<Position>> neighbors) {
         Set<Position> seen = new HashSet<Position>();
         HashMap<Position, Position> firstMove = new HashMap<Position, Position>();
         Queue<Position> toVisit = new LinkedList<Position>(neighbors.get(position));
diff --git a/src/main/java/view/ViewElement.java b/src/main/java/view/ViewElement.java
index ffb76112e1af543df5af41fa906082ef11be9967..26e787ff6467ad930bec4106d2f13eaa287fa282 100644
--- a/src/main/java/view/ViewElement.java
+++ b/src/main/java/view/ViewElement.java
@@ -3,7 +3,7 @@ package view;
 import javafx.scene.paint.Color;
 
 public enum ViewElement {
-  FIREFIGHTER(Color.BLUE), FIRE(Color.RED), EMPTY(Color.WHITE);
+  FIREFIGHTER(Color.BLUE), FIRE(Color.RED), EMPTY(Color.WHITE), CLOUD(Color.GRAY);
   final Color color;
   ViewElement(Color color) {
     this.color = color;
diff --git a/src/test/java/model/FirefighterBoardTest.java b/src/test/java/model/FirefighterBoardTest.java
index 25cc8dbca8acea698879df68a5006a179f281ecc..c8e1c2bcc48e3517bb6a3e67d211784e44b67922 100644
--- a/src/test/java/model/FirefighterBoardTest.java
+++ b/src/test/java/model/FirefighterBoardTest.java
@@ -10,17 +10,17 @@ import static org.assertj.core.api.Assertions.*;
 public class FirefighterBoardTest {
   @Test
   void testColumnCount(){
-    Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3);
+    Board<List<ModelElement>> board = new FirefighterBoard(new Initializer(20, 10, 1, 3));
     assertThat(board.columnCount()).isEqualTo(20);
   }
   @Test
   void testRowCount(){
-    Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3);
+    Board<List<ModelElement>> board = new FirefighterBoard(new Initializer(20, 10, 1, 3));
     assertThat(board.rowCount()).isEqualTo(10);
   }
   @Test
   void testStepNumber(){
-    Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3);
+    Board<List<ModelElement>> board = new FirefighterBoard(new Initializer(20, 10, 1, 3));
     for(int index = 0; index < 10; index++){
       assertThat(board.stepNumber()).isEqualTo(index);
       board.updateToNextGeneration();
@@ -29,7 +29,7 @@ public class FirefighterBoardTest {
   }
   @Test
   void testGetState_afterSet(){
-    Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 0, 0);
+    Board<List<ModelElement>> board = new FirefighterBoard(new Initializer(20, 10, 0, 0));
     Position position = new Position(1,2);
     assertThat(board.getState(position)).isEmpty();
     board.setState(List.of(ModelElement.FIRE), position);
diff --git a/test.txt b/test.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f2b2147f82186056578070b57f49506a6874b4c9
--- /dev/null
+++ b/test.txt
@@ -0,0 +1,109 @@
+Mise à jour graphique : [Position[row=16,
+column=6]=FIREFIGHTER,
+Position[row=15, column=6]=EMPTY
+, Position[row=13,
+ column=4]=FIREFIGHTER,
+ Position[row=12, column=4]=EMPTY,
+  Position[row=12, column=15]=FIREFIGHTER,
+   Position[row=11, column=15]=EMPTY,
+    Position[row=6, column=16]=FIREFIGHTER,
+    Position[row=5, column=16]=EMPTY,
+     Position[row=5, column=9]=FIREFIGHTER,
+     Position[row=5, column=8]=EMPTY,
+      Position[row=3, column=13]=FIREFIGHTER,
+       Position[row=3, column=12]=EMPTY,
+       Position[row=2, column=4]=EMPTY,
+       Position[row=3, column=3]=EMPTY,
+       Position[row=4, column=4]=EMPTY,
+       Position[row=3, column=5]=EMPTY,
+       Position[row=5, column=0]=EMPTY,
+       Position[row=7, column=0]=EMPTY,
+       Position[row=6, column=1]=EMPTY,
+       Position[row=4, column=4]=EMPTY,
+       Position[row=5, column=3]=EMPTY,
+        Position[row=6, column=4]=EMPTY,
+        Position[row=5, column=5]=EMPTY]
+
+Initial fire positions: [Position[row=3, column=4],
+Position[row=6, column=0],
+Position[row=5, column=4]]
+
+
+
+--------------
+
+Mise à jour graphique : [Position[row=6, column=3]=FIREFIGHTER,
+Position[row=7, column=3]=EMPTY,
+Position[row=3, column=1]=EMPTY,
+Position[row=4, column=1]=EMPTY,
+Position[row=5, column=7]=EMPTY,
+Position[row=6, column=7]=EMPTY,
+Position[row=17, column=1]=EMPTY,
+Position[row=18, column=1]=EMPTY,
+Position[row=15, column=5]=EMPTY,
+Position[row=16, column=5]=EMPTY,
+Position[row=8, column=0]=EMPTY,
+Position[row=8, column=1]=EMPTY,
+ Position[row=3, column=4]=EMPTY,
+ Position[row=4, column=3]=EMPTY,
+ Position[row=5, column=4]=EMPTY,
+  Position[row=4, column=5]=EMPTY,
+  Position[row=4, column=5]=EMPTY,
+  Position[row=5, column=4]=EMPTY,
+  Position[row=6, column=5]=EMPTY,
+  Position[row=5, column=6]=EMPTY,
+  Position[row=7, column=14]=EMPTY,
+   Position[row=8, column=13]=EMPTY,
+   Position[row=9, column=14]=EMPTY,
+   Position[row=8, column=15]=FIRE,
+   Position[row=8, column=15]=FIRE,
+   Position[row=9, column=14]=EMPTY,
+    Position[row=10, column=15]=EMPTY,
+    Position[row=9, column=16]=EMPTY,
+    Position[row=7, column=15]=EMPTY,
+    Position[row=8, column=14]=EMPTY,
+     Position[row=9, column=15]=EMPTY,
+     Position[row=8, column=16]=EMPTY,
+     Position[row=6, column=15]=EMPTY,
+     Position[row=7, column=14]=EMPTY,
+     Position[row=8, column=15]=FIRE,
+     Position[row=7, column=16]=EMPTY,
+      Position[row=7, column=16]=EMPTY,
+       Position[row=8, column=15]=FIRE,
+       Position[row=9, column=16]=EMPTY,
+        Position[row=8, column=17]=EMPTY,
+        Position[row=17, column=5]=EMPTY,
+        Position[row=18, column=4]=EMPTY,
+        Position[row=19, column=5]=EMPTY,
+        Position[row=18, column=6]=FIRE,
+        Position[row=18, column=6]=FIRE,
+        Position[row=19, column=5]=EMPTY,
+        Position[row=19, column=7]=EMPTY,
+        Position[row=17, column=6]=EMPTY,
+        Position[row=18, column=5]=EMPTY,
+        Position[row=19, column=6]=EMPTY,
+        Position[row=18, column=7]=EMPTY,
+        Position[row=16, column=6]=EMPTY,
+        Position[row=17, column=5]=EMPTY,
+        Position[row=18, column=6]=FIRE,
+        Position[row=17, column=7]=EMPTY,
+        Position[row=17, column=7]=EMPTY,
+        Position[row=18, column=6]=FIRE,
+        Position[row=19, column=7]=EMPTY,
+        Position[row=18, column=8]=EMPTY,
+         Position[row=4, column=3]=EMPTY,
+         Position[row=5, column=2]=EMPTY,
+         Position[row=6, column=3]=FIREFIGHTER,
+         Position[row=5, column=4]=EMPTY,
+          Position[row=5, column=4]=EMPTY,
+          Position[row=6, column=3]=FIREFIGHTER,
+           Position[row=7, column=4]=EMPTY,
+           Position[row=6, column=5]=EMPTY,
+           Position[row=4, column=4]=EMPTY,
+           Position[row=5, column=3]=EMPTY,
+           Position[row=6, column=4]=EMPTY,
+           Position[row=5, column=5]=EMPTY]
+
+Initial fire positions: [Position[row=18, column=6],
+Position[row=8, column=15],
+ Position[row=5, column=4]]