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

fixing problems

parent 24dffc76
Branches
No related tags found
No related merge requests found
...@@ -2,25 +2,29 @@ package model; ...@@ -2,25 +2,29 @@ package model;
import util.Position; import util.Position;
import java.util.Set;
public class Fire { public class Fire {
private Position firePositions; private Position position;
public Fire(Position position){ public Fire(Position position){
this.firePositions = position; this.position = position;
} }
public void setFirePosition(Position postion){
this.firePositions = postion; public Position getPosition() {
return position;
} }
public Position getFirePosition() { public void setPosition(Position position) {
return firePositions; this.position = position;
} }
} }
\ No newline at end of file
...@@ -2,23 +2,27 @@ package model; ...@@ -2,23 +2,27 @@ package model;
import util.Position; import util.Position;
import java.util.List;
public class FireFighter { public class FireFighter {
private Position position;
private Position FireFighterPosition;
public FireFighter(Position position){ public FireFighter(Position position){
this.FireFighterPosition = position; this.position = position;
} }
public void setFireFighterPosition(Position postion){ public Position getPosition() {
this.FireFighterPosition = postion; return position;
} }
public Position getFireFighterPosition() { public void setPosition(Position position) {
return FireFighterPosition; this.position = position;
} }
} }
\ No newline at end of file
package model; package model;
import util.TargetStrategy;
import util.Position; import util.Position;
import util.TargetStrategy;
import java.util.*; import java.util.*;
public class FirefighterBoard implements Board<List<ModelElement>> { public class FirefighterBoard implements Board<List<ModelElement>> {
private final int columnCount; private final int columnCount;
private final int rowCount; private final int rowCount;
private final int initialFirefighterCount;
private final int initialFireCount; private final int initialFireCount;
private List<FireFighter> firefighter; private final int initialFirefighterCount;
private Set<Fire> fire;
private final TargetStrategy targetStrategy = new TargetStrategy(); private final TargetStrategy targetStrategy = new TargetStrategy();
private List<FireFighter> firefighters;
private Set<Fire> fires;
private Map<Position, List<Position>> neighbors = new HashMap(); private Map<Position, List<Position>> neighbors = new HashMap();
private final Position[][] positions; private final Position[][] positions;
private int step = 0; private int step = 0;
...@@ -44,14 +41,12 @@ public class FirefighterBoard implements Board<List<ModelElement>> { ...@@ -44,14 +41,12 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
} }
public void initializeElements() { public void initializeElements() {
firefighter = new ArrayList<>(); firefighters = new ArrayList<>();
fire = new HashSet<>(); fires = new HashSet<>();
for (int index = 0; index < initialFireCount; index++) { for (int index = 0; index < initialFireCount; index++)
fire.add(new Fire(randomPosition())); fires.add(new Fire(randomPosition()));
}
for (int index = 0; index < initialFirefighterCount; index++) for (int index = 0; index < initialFirefighterCount; index++)
firefighter.add(new FireFighter(randomPosition())); firefighters.add(new FireFighter(randomPosition()));
} }
private Position randomPosition() { private Position randomPosition() {
...@@ -61,15 +56,13 @@ public class FirefighterBoard implements Board<List<ModelElement>> { ...@@ -61,15 +56,13 @@ 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 : firefighter) for (FireFighter firefighter : firefighters)
if (firefighter.getFireFighterPosition().equals(position)) if (firefighter.getPosition().equals(position))
result.add(ModelElement.FIREFIGHTER); result.add(ModelElement.FIREFIGHTER);
for (Fire fire : fire) { if (this.getFirePositions(fires).contains(position))
if (fire.getFirePosition().equals(position)) {
result.add(ModelElement.FIRE); result.add(ModelElement.FIRE);
}
}
return result; return result;
} }
...@@ -94,14 +87,10 @@ public class FirefighterBoard implements Board<List<ModelElement>> { ...@@ -94,14 +87,10 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
List<Position> modifiedPositions = new ArrayList<>(); List<Position> modifiedPositions = new ArrayList<>();
if (step % 2 == 0) { if (step % 2 == 0) {
List<Position> newFirePositions = new ArrayList<>(); List<Position> newFirePositions = new ArrayList<>();
for (Fire fire : fire) { for (Position fire : getFirePositions(this.fires)) {
newFirePositions.addAll(neighbors.get(fire)); newFirePositions.addAll(neighbors.get(fire));
} }
this.getFirePositions(fires).addAll(newFirePositions);
for (Position position : newFirePositions) {
fire.add(new Fire(position));
}
modifiedPositions.addAll(newFirePositions); modifiedPositions.addAll(newFirePositions);
} }
return modifiedPositions; return modifiedPositions;
...@@ -115,26 +104,26 @@ public class FirefighterBoard implements Board<List<ModelElement>> { ...@@ -115,26 +104,26 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
private List<Position> updateFirefighters() { private List<Position> updateFirefighters() {
List<Position> modifiedPosition = new ArrayList<>(); List<Position> modifiedPosition = new ArrayList<>();
List<FireFighter> firefighters = new ArrayList<>(); List<Position> firefighterNewPositions = new ArrayList<>();
List<Position> firePositions = new ArrayList<>(); for (Position firefighterPosition : this.getFireFighterPositions(this.firefighters)) {
for(Fire fire: fire){
firePositions.add(fire.getFirePosition());
}
for (FireFighter firefighter: firefighter) {
Position newFirefighterPosition = Position newFirefighterPosition =
targetStrategy.neighborClosestToFire(firefighter.getFireFighterPosition(), targetStrategy.neighborClosestToFire(firefighterPosition,
firePositions, neighbors); this.getFirePositions(fires), neighbors);
firefighters.add(firefighter); firefighterNewPositions.add(newFirefighterPosition);
extinguish(newFirefighterPosition); extinguish(newFirefighterPosition);
modifiedPosition.add(firefighter.getFireFighterPosition()); modifiedPosition.add(firefighterPosition);
modifiedPosition.add(newFirefighterPosition); modifiedPosition.add(newFirefighterPosition);
List<Position> neighborFirePositions = neighbors.get(newFirefighterPosition).stream() List<Position> neighborFirePositions = neighbors.get(newFirefighterPosition).stream()
.filter(firePositions::contains).toList(); .filter(this.getFirePositions(fires)::contains).toList();
for (Position firePosition : neighborFirePositions) for (Position firePosition : neighborFirePositions)
extinguish(firePosition); extinguish(firePosition);
modifiedPosition.addAll(neighborFirePositions); modifiedPosition.addAll(neighborFirePositions);
} }
firefighter = firefighters; ArrayList<FireFighter> newFireFighters = new ArrayList<>();
for(Position position : firefighterNewPositions){
newFireFighters.add(new FireFighter(position));
}
firefighters = newFireFighters;
return modifiedPosition; return modifiedPosition;
} }
...@@ -145,8 +134,11 @@ public class FirefighterBoard implements Board<List<ModelElement>> { ...@@ -145,8 +134,11 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
} }
private void extinguish(Position position) { private void extinguish(Position position) {
fire.remove(position); for(Fire fire: fires){
if(fire.getPosition().equals(position)){
fires.remove(fire);
}
}
} }
...@@ -154,24 +146,38 @@ public class FirefighterBoard implements Board<List<ModelElement>> { ...@@ -154,24 +146,38 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
public void setState(List<ModelElement> state, Position position) { public void setState(List<ModelElement> state, Position position) {
extinguish(position); extinguish(position);
for (; ; ) { for (; ; ) {
if (!getFireFighterPositions(this.firefighters).remove(position)) break;
for (FireFighter fireFighter : firefighter) { }
if (fireFighter.getFireFighterPosition().equals(position)) { for (ModelElement element : state) {
firefighter.remove(position); switch (element) {
break; case FIRE -> fires.add(new Fire(position));
case FIREFIGHTER -> firefighters.add(new FireFighter(position));
}
} }
} }
for (ModelElement element : state) {
switch (element) {
case FIRE -> fire.add(new Fire(position)); public Set<Position> getFirePositions(Set<Fire> fireSet){
case FIREFIGHTER -> firefighter.add(new FireFighter(position)); Set<Position> firePositions = new HashSet<>();
for(Fire fire : fireSet){
firePositions.add(fire.getPosition());
} }
return firePositions;
} }
public ArrayList<Position> getFireFighterPositions(List<FireFighter> fireFighterList){
ArrayList<Position> fireFighterPositions = new ArrayList<>();
for(FireFighter fireFighter : fireFighterList){
fireFighterPositions.add(fireFighter.getPosition());
} }
return fireFighterPositions;
} }
} }
\ No newline at end of file
...@@ -4,5 +4,6 @@ module firefighter { ...@@ -4,5 +4,6 @@ module firefighter {
requires javafx.graphics; requires javafx.graphics;
opens controller to javafx.fxml; opens controller to javafx.fxml;
exports app; exports app;
exports view;
opens app to javafx.fxml; opens app to javafx.fxml;
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment