Skip to content
Snippets Groups Projects
Commit 2822f639 authored by ASFOUR Mohamed's avatar ASFOUR Mohamed
Browse files

MEHDI ET MOHAMED : nous avons fini la classe cloud et les methodes dans...

MEHDI ET MOHAMED : nous avons fini la classe cloud et les methodes dans FirefighterBoard pour afficher les clouds parfaitement et fonctionne parfaitement
parent 08aa441c
Branches
No related tags found
No related merge requests found
Pipeline #40313 passed
......@@ -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;
......
......@@ -88,9 +88,13 @@ public class Controller {
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 =
......
......@@ -4,19 +4,19 @@ import util.Position;
public class Cloud {
private Position position;
public Cloud(Position position) {
this.position = position;
}
public Position getPosition() {
return position;
}
public void setPosition(Position position) {
this.position = position;
}
}
......@@ -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);
......
package model;
public enum ModelElement {
FIREFIGHTER, FIRE
FIREFIGHTER,
FIRE,
CLOUD;
}
......@@ -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;
......
......@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment