diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index a83eda2c2dfda65c35fc3fbca98f80cdebee67ee..d2219362bb51232c67817489ee1e479f46ed6cd8 100644 Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/build/resources/main/view/view.fxml b/build/resources/main/view/view.fxml index 336ffa315645baacbe25bf59171d2ff6d867b9c5..8be26ffd3de7165c468bfca9c3f375f80e016a4e 100644 --- a/build/resources/main/view/view.fxml +++ b/build/resources/main/view/view.fxml @@ -32,6 +32,20 @@ <ToggleButton fx:id="pauseToggleButton" maxHeight="-Infinity" maxWidth="-Infinity" mnemonicParsing="false" onAction="#pauseToggleButtonAction" prefHeight="24.0" prefWidth="200.0" styleClass="button" text="Pause"/> + + <Label maxHeight="-Infinity" maxWidth="-Infinity" alignment="CENTER" prefHeight="24.0" prefWidth="200.0" + text="BLACK : ROAD"/> + <Label maxHeight="-Infinity" maxWidth="-Infinity" alignment="CENTER" prefHeight="24.0" prefWidth="200.0" + text="BLUE : FIREFIGHTER"/> + <Label maxHeight="-Infinity" maxWidth="-Infinity" alignment="CENTER" prefHeight="24.0" prefWidth="200.0" + text="RED : FIRE"/> + <Label maxHeight="-Infinity" maxWidth="-Infinity" alignment="CENTER" prefHeight="24.0" prefWidth="200.0" + text="GRAY : CLOUD"/> + <Label maxHeight="-Infinity" maxWidth="-Infinity" alignment="CENTER" prefHeight="24.0" prefWidth="200.0" + text="AQUA : MOTORIZEDFIREFIGHTER"/> + <Label maxHeight="-Infinity" maxWidth="-Infinity" alignment="CENTER" prefHeight="24.0" prefWidth="200.0" + text="BROWN : MOUNTAIN"/> + </VBox> <FirefighterGrid fx:id="grid" xmlns="http://javafx.com/javafx" diff --git a/src/Diagramme.png b/src/Diagramme.png new file mode 100644 index 0000000000000000000000000000000000000000..41499cc35e1644d1e9296bf374da3a47aa5ca5e4 Binary files /dev/null and b/src/Diagramme.png differ diff --git a/src/README.md b/src/README.md new file mode 100644 index 0000000000000000000000000000000000000000..8bd0607685013786221ded943eaae5372415040e --- /dev/null +++ b/src/README.md @@ -0,0 +1,60 @@ +# **Rapport de projet : Simulateur d'Automates Cellulaires** + +## **1. Objectif du projet** +Le projet vise à simuler un système complexe utilisant un automate cellulaire représenté sous forme de grille. Les principales entités sont : +- **Feux** : Représentant les incendies qui se propagent. +- **Pompiers** : Acteurs principaux pour éteindre les incendies. +- **Nuages** : Contribuent également à l'extinction des feux. +- **Routes** : Influencent la propagation du feu. +- **Montagnes** : Empêchent le mouvement des entités. + +L'objectif est de modéliser les interactions entre ces entités tout en respectant les principes de la programmation orientée objet. + +--- + +## **2. Description technique** + +### **2.1. Architecture logicielle** +L'architecture est basée sur les principes suivants : +- **Interface `Board`** : Définit les caractéristiques et états du plateau (grille). +- **Entités (`Elements`)** : Inclut des classes comme `Fire`, `Firefighter`, `Cloud`, etc., pour gérer des états spécifiques des positions dans la grille. +- **Mise à jour (`Updater`)** : Gestion des transitions des entités à chaque étape (par exemple, propagation du feu ou mouvement des pompiers). +- **Gestion d'état** : La classe `StateManager` centralise l'état de chaque position sur la grille. + +### **2.2. Classes principales** +1. **Modèle du plateau (`FirefightingBoard`)** + - Contient les entités et gère leur initialisation. + - Gère les dimensions de la grille et les étapes de simulation. + +2. **Entités** + - **`Fire`** : Gère la propagation des incendies en tenant compte des obstacles (routes, montagnes). + - **`Firefighter` et `MotorizedFirefighter`** : Extincteurs manuels et motorisés avec des algorithmes de déplacement spécifiques. + - **`Cloud`** : Positionne des nuages de pluie pour éteindre les feux. + - **`Road` et `Mountain`** : Obstacles pour les feux et les pompiers. + +3. **Mise à jour (`Updater`)** + - `FireUpdater` : Propage les feux vers les cases adjacentes. + - `FirefighterUpdater` et `MotorizedFirefighterUpdater` : Déplacement et extinction de feux. + - `CloudUpdater` : Positionne les nuages pour éteindre les incendies. + +### **2.3. Méthodes clés** +- **Initialisation** : + Chaque entité est positionnée aléatoirement grâce à `RandomPositionsGenerator`. +- **Propagation des états** : + Chaque `Updater` modifie l'état des entités selon des règles spécifiques. +- **Gestion des voisins** : + La classe `Neighbors` identifie les cases adjacentes pour chaque position. + +--- + +## **3. Respect des principes SOLID** +1. **Responsabilité unique (SRP)** : + Chaque classe a une seule responsabilité (exemple : `Fire` gère les positions des feux uniquement). +2. **Ouvert/fermé (OCP)** : + Les entités (`FireExtinguisher`, `Updater`) peuvent être étendues sans modification des classes existantes. +3. **Substitution de Liskov (LSP)** : + Les classes dérivées (`Firefighter`, `MotorizedFirefighter`) respectent les contrats de la classe de base `FireExtinguisher`. +4. **Séparation des interfaces (ISP)** : + Les interfaces sont spécifiques (`Board`, `Elements`, `State`). +5. **Inversion des dépendances (DIP)** : + Les classes dépendent d'abstractions, pas d'implémentations spécifiques. \ No newline at end of file