From 2822f6399e0d8dc715daf60815a30ae32df4ccb9 Mon Sep 17 00:00:00 2001 From: a22021617 <mohamed.asfour@etu.univ-amu.fr> Date: Fri, 22 Nov 2024 11:37:18 +0100 Subject: [PATCH] MEHDI ET MOHAMED : nous avons fini la classe cloud et les methodes dans FirefighterBoard pour afficher les clouds parfaitement et fonctionne parfaitement --- src/main/java/app/SimulatorApplication.java | 2 +- src/main/java/controller/Controller.java | 8 +++-- src/main/java/model/Cloud.java | 8 ++--- src/main/java/model/FirefighterBoard.java | 39 ++++++++++++++++++--- src/main/java/model/ModelElement.java | 5 ++- src/main/java/view/FirefighterGrid.java | 2 ++ src/main/java/view/ViewElement.java | 2 +- 7 files changed, 52 insertions(+), 14 deletions(-) diff --git a/src/main/java/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java index e7c14c9..cf04286 100644 --- a/src/main/java/app/SimulatorApplication.java +++ b/src/main/java/app/SimulatorApplication.java @@ -19,7 +19,7 @@ public class SimulatorApplication extends javafx.application.Application { private static final int BOX_HEIGHT = 50; public static final int INITIAL_FIRE_COUNT = 15; public static final int INITIAL_FIREFIGHTER_COUNT = 10; - public static final int INITIAL_CLOUD_COUNT = 1; + public static final int INITIAL_CLOUD_COUNT = 5; private Stage primaryStage; diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java index d31f549..0c9dfb7 100644 --- a/src/main/java/controller/Controller.java +++ b/src/main/java/controller/Controller.java @@ -82,15 +82,19 @@ public class Controller { } private ViewElement getViewElement(List<ModelElement> squareState) { - if(squareState.contains(ModelElement.FIREFIGHTER)){ + 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)) { // Assurez-vous que le modèle inclut bien le nuage + return ViewElement.CLOUD; + } return ViewElement.EMPTY; } + private void initializeTimeline() { Duration duration = new Duration(Controller.PERIOD_IN_MILLISECONDS); EventHandler<ActionEvent> eventHandler = diff --git a/src/main/java/model/Cloud.java b/src/main/java/model/Cloud.java index cbda767..b517e50 100644 --- a/src/main/java/model/Cloud.java +++ b/src/main/java/model/Cloud.java @@ -4,19 +4,19 @@ import util.Position; public class Cloud { - private Position position; - public Cloud(Position position){ + public Cloud(Position position) { this.position = position; } - public Position getPosition() { return position; } - + public void setPosition(Position position) { + this.position = position; + } } diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java index 224f0ba..b60c9ae 100644 --- a/src/main/java/model/FirefighterBoard.java +++ b/src/main/java/model/FirefighterBoard.java @@ -70,6 +70,10 @@ public class FirefighterBoard implements Board<List<ModelElement>> { for (int index = 0; index < initialFirefighterCount; index++) { firefighters.add(new FireFighter(randomPosition())); } + for (int index = 0; index < initialCloudCount; index++) { + clouds.add(new Cloud(randomPosition())); + } + } private Position randomPosition() { @@ -79,13 +83,38 @@ public class FirefighterBoard implements Board<List<ModelElement>> { @Override public List<ModelElement> getState(Position position) { List<ModelElement> result = new ArrayList<>(); + for (FireFighter firefighter : firefighters) { if (firefighter.getPosition().equals(position)) result.add(ModelElement.FIREFIGHTER); } if (fires.containsKey(position)) result.add(ModelElement.FIRE); + + for (Cloud cloud : clouds) { + if (cloud.getPosition().equals(position)) result.add(ModelElement.CLOUD); + } return result; } + private List<Position> updateClouds() { + List<Position> modifiedPositions = new ArrayList<>(); + for (Cloud cloud : clouds) { + Position currentPosition = cloud.getPosition(); + Position newPosition = randomNeighbor(currentPosition); + cloud.setPosition(newPosition); + modifiedPositions.add(currentPosition); + modifiedPositions.add(newPosition); + + + extinguish(newPosition); + } + return modifiedPositions; + } + private Position randomNeighbor(Position position) { + List<Position> neighborPositions = neighbors.get(position); + return neighborPositions.get(randomGenerator.nextInt(neighborPositions.size())); + } + + @Override public int rowCount() { return rowCount; @@ -98,20 +127,22 @@ public class FirefighterBoard implements Board<List<ModelElement>> { public List<Position> updateToNextGeneration() { List<Position> modifiedPositions = updateFirefighters(); + modifiedPositions.addAll(updateClouds()); modifiedPositions.addAll(updateFires()); step++; return modifiedPositions; } + private List<Position> updateFires() { List<Position> modifiedPositions = new ArrayList<>(); if (step % 2 == 0) { Set<Position> newFirePositions = new HashSet<>(); - for (Position fire : new HashSet<>(fires.keySet())) { // Utilisez une copie de la clé + for (Position fire : new HashSet<>(fires.keySet())) { newFirePositions.addAll(neighbors.get(fire)); } for (Position position : newFirePositions) { - if (!fires.containsKey(position)) { // Vérifiez si le feu est nouveau + if (!fires.containsKey(position)) { fires.put(position, new Fire(position)); modifiedPositions.add(position); } @@ -121,6 +152,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> { } + @Override public int stepNumber() { return step; @@ -132,15 +164,12 @@ public class FirefighterBoard implements Board<List<ModelElement>> { Position currentPosition = firefighter.getPosition(); Position newPosition = targetStrategy.neighborClosestToFire(currentPosition, fires.keySet(), neighbors); - // Déplacement du pompier firefighter.setPosition(newPosition); modifiedPositions.add(currentPosition); modifiedPositions.add(newPosition); - // Éteindre le feu à la nouvelle position extinguish(newPosition); - // Éteindre les feux voisins for (Position neighbor : neighbors.get(newPosition)) { extinguish(neighbor); modifiedPositions.add(neighbor); diff --git a/src/main/java/model/ModelElement.java b/src/main/java/model/ModelElement.java index 759eee5..4613ca6 100644 --- a/src/main/java/model/ModelElement.java +++ b/src/main/java/model/ModelElement.java @@ -1,5 +1,8 @@ package model; public enum ModelElement { - FIREFIGHTER, FIRE + FIREFIGHTER, + FIRE, + CLOUD; } + diff --git a/src/main/java/view/FirefighterGrid.java b/src/main/java/view/FirefighterGrid.java index 4c9041f..d97172f 100644 --- a/src/main/java/view/FirefighterGrid.java +++ b/src/main/java/view/FirefighterGrid.java @@ -10,8 +10,10 @@ import java.util.List; public class FirefighterGrid extends Canvas implements Grid<ViewElement>{ private void paintElementAtPosition(ViewElement element, Position position) { + System.out.println("Painting " + element + " at " + position); paintBox(position.row(), position.column(), element.color); } + private int boxWidth; private int boxHeight; private int columnCount; diff --git a/src/main/java/view/ViewElement.java b/src/main/java/view/ViewElement.java index ffb7611..d3e0008 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),CLOUD(Color.LIGHTSKYBLUE), EMPTY(Color.WHITE); final Color color; ViewElement(Color color) { this.color = color; -- GitLab