Skip to content
Snippets Groups Projects
Commit 056c02c2 authored by BELHACHEMI Mehdi's avatar BELHACHEMI Mehdi
Browse files

Merge remote-tracking branch 'origin/main'

# Conflicts:
#	src/main/java/app/SimulatorApplication.java
#	src/main/java/model/ModelElement.java
#	src/main/java/view/ViewElement.java
parents d463f126 2822f639
No related branches found
No related tags found
No related merge requests found
...@@ -19,7 +19,7 @@ public class SimulatorApplication extends javafx.application.Application { ...@@ -19,7 +19,7 @@ public class SimulatorApplication extends javafx.application.Application {
private static final int BOX_HEIGHT = 50; private static final int BOX_HEIGHT = 50;
public static final int INITIAL_FIRE_COUNT = 15; public static final int INITIAL_FIRE_COUNT = 15;
public static final int INITIAL_FIREFIGHTER_COUNT = 10; public static final int INITIAL_FIREFIGHTER_COUNT = 10;
public static final int INITIAL_CLOUD_COUNT = 10; public static final int INITIAL_CLOUD_COUNT = 5;
private Stage primaryStage; private Stage primaryStage;
......
...@@ -88,9 +88,13 @@ public class Controller { ...@@ -88,9 +88,13 @@ public class Controller {
if (squareState.contains(ModelElement.FIRE)) { if (squareState.contains(ModelElement.FIRE)) {
return ViewElement.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; return ViewElement.EMPTY;
} }
private void initializeTimeline() { private void initializeTimeline() {
Duration duration = new Duration(Controller.PERIOD_IN_MILLISECONDS); Duration duration = new Duration(Controller.PERIOD_IN_MILLISECONDS);
EventHandler<ActionEvent> eventHandler = EventHandler<ActionEvent> eventHandler =
......
...@@ -4,19 +4,19 @@ import util.Position; ...@@ -4,19 +4,19 @@ import util.Position;
public class Cloud { public class Cloud {
private Position position; private Position position;
public Cloud(Position position) { public Cloud(Position position) {
this.position = position; this.position = position;
} }
public Position getPosition() { public Position getPosition() {
return position; return position;
} }
public void setPosition(Position position) {
this.position = position;
}
} }
...@@ -70,6 +70,10 @@ public class FirefighterBoard implements Board<List<ModelElement>> { ...@@ -70,6 +70,10 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
for (int index = 0; index < initialFirefighterCount; index++) { for (int index = 0; index < initialFirefighterCount; index++) {
firefighters.add(new FireFighter(randomPosition())); firefighters.add(new FireFighter(randomPosition()));
} }
for (int index = 0; index < initialCloudCount; index++) {
clouds.add(new Cloud(randomPosition()));
}
} }
private Position randomPosition() { private Position randomPosition() {
...@@ -79,13 +83,38 @@ public class FirefighterBoard implements Board<List<ModelElement>> { ...@@ -79,13 +83,38 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
@Override @Override
public List<ModelElement> getState(Position position) { public List<ModelElement> getState(Position position) {
List<ModelElement> result = new ArrayList<>(); List<ModelElement> result = new ArrayList<>();
for (FireFighter firefighter : firefighters) { for (FireFighter firefighter : firefighters) {
if (firefighter.getPosition().equals(position)) result.add(ModelElement.FIREFIGHTER); if (firefighter.getPosition().equals(position)) result.add(ModelElement.FIREFIGHTER);
} }
if (fires.containsKey(position)) result.add(ModelElement.FIRE); if (fires.containsKey(position)) result.add(ModelElement.FIRE);
for (Cloud cloud : clouds) {
if (cloud.getPosition().equals(position)) result.add(ModelElement.CLOUD);
}
return result; 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 @Override
public int rowCount() { public int rowCount() {
return rowCount; return rowCount;
...@@ -98,20 +127,22 @@ public class FirefighterBoard implements Board<List<ModelElement>> { ...@@ -98,20 +127,22 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
public List<Position> updateToNextGeneration() { public List<Position> updateToNextGeneration() {
List<Position> modifiedPositions = updateFirefighters(); List<Position> modifiedPositions = updateFirefighters();
modifiedPositions.addAll(updateClouds());
modifiedPositions.addAll(updateFires()); modifiedPositions.addAll(updateFires());
step++; step++;
return modifiedPositions; return modifiedPositions;
} }
private List<Position> updateFires() { private List<Position> updateFires() {
List<Position> modifiedPositions = new ArrayList<>(); List<Position> modifiedPositions = new ArrayList<>();
if (step % 2 == 0) { if (step % 2 == 0) {
Set<Position> newFirePositions = new HashSet<>(); 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)); newFirePositions.addAll(neighbors.get(fire));
} }
for (Position position : newFirePositions) { 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)); fires.put(position, new Fire(position));
modifiedPositions.add(position); modifiedPositions.add(position);
} }
...@@ -121,6 +152,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> { ...@@ -121,6 +152,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
} }
@Override @Override
public int stepNumber() { public int stepNumber() {
return step; return step;
...@@ -132,15 +164,12 @@ public class FirefighterBoard implements Board<List<ModelElement>> { ...@@ -132,15 +164,12 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
Position currentPosition = firefighter.getPosition(); Position currentPosition = firefighter.getPosition();
Position newPosition = targetStrategy.neighborClosestToFire(currentPosition, fires.keySet(), neighbors); Position newPosition = targetStrategy.neighborClosestToFire(currentPosition, fires.keySet(), neighbors);
// Déplacement du pompier
firefighter.setPosition(newPosition); firefighter.setPosition(newPosition);
modifiedPositions.add(currentPosition); modifiedPositions.add(currentPosition);
modifiedPositions.add(newPosition); modifiedPositions.add(newPosition);
// Éteindre le feu à la nouvelle position
extinguish(newPosition); extinguish(newPosition);
// Éteindre les feux voisins
for (Position neighbor : neighbors.get(newPosition)) { for (Position neighbor : neighbors.get(newPosition)) {
extinguish(neighbor); extinguish(neighbor);
modifiedPositions.add(neighbor); modifiedPositions.add(neighbor);
......
package model; package model;
public enum ModelElement { public enum ModelElement {
FIREFIGHTER, FIRE,CLOUD FIREFIGHTER,
FIRE,
CLOUD;
} }
...@@ -10,8 +10,10 @@ import java.util.List; ...@@ -10,8 +10,10 @@ import java.util.List;
public class FirefighterGrid extends Canvas implements Grid<ViewElement>{ public class FirefighterGrid extends Canvas implements Grid<ViewElement>{
private void paintElementAtPosition(ViewElement element, Position position) { private void paintElementAtPosition(ViewElement element, Position position) {
System.out.println("Painting " + element + " at " + position);
paintBox(position.row(), position.column(), element.color); paintBox(position.row(), position.column(), element.color);
} }
private int boxWidth; private int boxWidth;
private int boxHeight; private int boxHeight;
private int columnCount; private int columnCount;
......
...@@ -3,7 +3,7 @@ package view; ...@@ -3,7 +3,7 @@ package view;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
public enum ViewElement { public enum ViewElement {
FIREFIGHTER(Color.BLUE), FIRE(Color.RED),CLOUD(Color.PINK), EMPTY(Color.WHITE); FIREFIGHTER(Color.BLUE), FIRE(Color.RED),CLOUD(Color.LIGHTSKYBLUE), EMPTY(Color.WHITE);
final Color color; final Color color;
ViewElement(Color color) { ViewElement(Color color) {
this.color = color; this.color = color;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment