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 {
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 = 10;
public static final int INITIAL_CLOUD_COUNT = 5;
private Stage primaryStage;
......
......@@ -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 =
......
......@@ -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;
}
}
......@@ -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,CLOUD
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),CLOUD(Color.PINK), 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