Skip to content
Snippets Groups Projects
Commit 0885cdd3 authored by MEHDI's avatar MEHDI
Browse files

mehdi and mohamed : making fire as an element

parent f3626214
Branches
No related tags found
No related merge requests found
......@@ -2,9 +2,7 @@ package model;
import util.Position;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
public class Fire implements Element {
......@@ -33,8 +31,24 @@ public class Fire implements Element {
this.position = position;
}
public List<Position> update(FirefighterBoard firefighterBoard) {
return null;
List<Position> modifiedPositions = new ArrayList<>();
Map<Position, List<Position>> neighbors = firefighterBoard.getNeighbors();
// Étendre le feu seulement à chaque étape paire
if (firefighterBoard.stepNumber() % 2 == 0) {
List<Position> neighborPositions = neighbors.get(this.getPosition());
for (Position position : neighborPositions) {
if (!(firefighterBoard.getState(position).contains(modelElement))) {
// Ajouter un nouveau feu directement dans la liste des éléments
firefighterBoard.getElements().add(new Fire(position));
}
// Marquer la position comme modifiée
modifiedPositions.add(position);
}
}
return modifiedPositions;
}
public boolean contains(List<Position> positions) {
......
......@@ -4,7 +4,9 @@ import util.Position;
import util.TargetStrategy;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class FireFighter extends Extinguisher {
......
......@@ -13,12 +13,8 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
private final int initialFirefighterCount;
private final int initialCloudCount;
private final int initialRoadCount;
private List<FireFighter> firefighters;
private List<Element> elements;
private Map<Position, Fire> fires = new HashMap<>();
private List<Cloud> clouds;
private final Map<Position, List<Position>> neighbors = new HashMap<>();
private final Position[][] positions;
private int step = 0;
......@@ -57,12 +53,10 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
public void initializeElements() {
elements = new ArrayList<>();
fires.clear();
for (int index = 0; index < initialFireCount; index++) {
Position position = randomPosition();
fires.put(position, new Fire(position));
elements.add(new Fire(randomPosition()));
}
for (int index = 0; index < initialFirefighterCount; index++) {
......@@ -99,7 +93,6 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
for(Element element : elements){
if(element.getPosition().equals(position))result.add(element.getElement());
}
if (fires.containsKey(position)) result.add(ModelElement.FIRE);
return result;
}
......@@ -108,44 +101,25 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
private List<Position> updateFires() {
public List<Position> updateElements() {
List<Position> modifiedPositions = new ArrayList<>();
if (step % 2 == 0) {
Set<Position> newFirePositions = new HashSet<>();
for (Position fire : new HashSet<>(fires.keySet())) {
List<Position> neighboursAvaiable = neighbors.get(fire);
neighboursAvaiable.removeAll(getRoadsPosition());
newFirePositions.addAll(neighbors.get(fire));
}
for (Position position : newFirePositions) {
if (!fires.containsKey(position)) {
fires.put(position, new Fire(position));
modifiedPositions.add(position);
}
}
}
return modifiedPositions;
}
public List<Position> updateElements(){
List<Position> modifiedPositions = new ArrayList<>();
for (Element element : elements) {
if(element.getClass().equals(Road.class)){
continue;
}
for (Element element : new ArrayList<>(elements)) {
modifiedPositions.addAll(element.update(this));
}
return modifiedPositions;
}
public List<Element> getElements() {
return elements;
}
public boolean containsFireAt(Position position) {
return elements.stream()
.anyMatch(e -> e instanceof Fire && e.getPosition().equals(position));
}
public Position randomNeighbor(Position position) {
List<Position> neighborPositions = neighbors.get(position);
......@@ -157,7 +131,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
public List<Position> updateToNextGeneration() {
List<Position> modifiedPositions = updateElements();
modifiedPositions.addAll(updateFires());
step++;
return modifiedPositions;
}
......@@ -185,14 +159,23 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
}
public void extinguish(Position position) {
if (fires.containsKey(position)) {
fires.remove(position);
for(Fire fire : new HashSet<>(getFires().values())){
if(fire.getPosition().equals(position)){
elements.remove(fire);
}
}
}
public Map<Position,Fire> getFires(){
return this.fires;
Map<Position,Fire>fires = new HashMap<>();
for(Element element : elements){
if(element.getClass().equals(Fire.class)){
fires.put(element.getPosition(), (Fire) element);
}
}
return fires;
}
public Map<Position, List<Position>> getNeighbors() {
......@@ -218,9 +201,9 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
for (ModelElement element : state) {
switch (element) {
case FIRE -> fires.put(position, new Fire(position));
case FIREFIGHTER -> firefighters.add(new FireFighter(position));
case CLOUD -> clouds.add(new Cloud(position));
case FIRE -> elements.add(new Fire(position));
case FIREFIGHTER -> elements.add(new FireFighter(position));
case CLOUD -> elements.add(new Cloud(position));
}
}
}
......
......@@ -2,6 +2,7 @@ package model;
import util.Position;
import java.util.ArrayList;
import java.util.List;
public class Road implements Element {
......@@ -30,6 +31,6 @@ public class Road implements Element {
@Override
public List<Position> update(FirefighterBoard firefighterBoard) {
return null;
return List.of();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment