Skip to content
Snippets Groups Projects
Commit eba8bac7 authored by YOUSSOUF Ali moussa's avatar YOUSSOUF Ali moussa
Browse files

implementations des routes avec ses methodes .

parent 918f13bd
Branches
No related tags found
No related merge requests found
Pipeline #25761 passed
Showing
with 215 additions and 38 deletions
...@@ -22,6 +22,8 @@ public class SimulatorApplication extends javafx.application.Application { ...@@ -22,6 +22,8 @@ public class SimulatorApplication extends javafx.application.Application {
public static final int INITIAL_CLOUD_COUNT = 6; public static final int INITIAL_CLOUD_COUNT = 6;
public static final int INITIAL_MONTAIN_COUNT = 4; public static final int INITIAL_MONTAIN_COUNT = 4;
public static final int INITIAL_MOTORIZED_FIREFIGHTER_COUNT = 4; public static final int INITIAL_MOTORIZED_FIREFIGHTER_COUNT = 4;
public static final int INITIAL_ROAD_COUNT = 2;
private Stage primaryStage; private Stage primaryStage;
...@@ -48,7 +50,7 @@ public class SimulatorApplication extends javafx.application.Application { ...@@ -48,7 +50,7 @@ public class SimulatorApplication extends javafx.application.Application {
view = loader.load(); view = loader.load();
Controller controller = loader.getController(); Controller controller = loader.getController();
controller.initialize(BOX_WIDTH, BOX_HEIGHT, COLUMN_COUNT, ROW_COUNT, controller.initialize(BOX_WIDTH, BOX_HEIGHT, COLUMN_COUNT, ROW_COUNT,
INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT, INITIAL_CLOUD_COUNT,INITIAL_MONTAIN_COUNT,INITIAL_MOTORIZED_FIREFIGHTER_COUNT); INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT, INITIAL_CLOUD_COUNT,INITIAL_MONTAIN_COUNT,INITIAL_MOTORIZED_FIREFIGHTER_COUNT,INITIAL_ROAD_COUNT);
} }
private void showScene() { private void showScene() {
......
...@@ -15,6 +15,12 @@ import javafx.util.Pair; ...@@ -15,6 +15,12 @@ import javafx.util.Pair;
import model.*; import model.*;
import util.Position; import util.Position;
import view.*; import view.*;
import view.Element.EMPTY;
import view.Element.FIRE;
import view.Fighters.FIREFIGHTER;
import view.Fighters.MOTORIZED_FIREFIGHTER;
import view.Obstacles.MONTAINS;
import view.Obstacles.ROADS;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -98,6 +104,12 @@ public class Controller { ...@@ -98,6 +104,12 @@ public class Controller {
return new MOTORIZED_FIREFIGHTER(); return new MOTORIZED_FIREFIGHTER();
} }
if(model instanceof Roads){
return new ROADS();
}
} }
return new EMPTY(); return new EMPTY();
...@@ -136,9 +148,9 @@ public class Controller { ...@@ -136,9 +148,9 @@ public class Controller {
} }
public void initialize(int squareWidth, int squareHeight, int columnCount, public void initialize(int squareWidth, int squareHeight, int columnCount,
int rowCount, int initialFireCount, int initialFirefighterCount, int initialCloudsCount, int initialMontainsCount,int initialMorized_firefighterCount) { int rowCount, int initialFireCount, int initialFirefighterCount, int initialCloudsCount, int initialMontainsCount,int initialMorized_firefighterCount,int initialRoadsCount) {
grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight); grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight);
this.setModel(new FirefighterBoard(columnCount, rowCount, initialFireCount, initialFirefighterCount,initialCloudsCount, initialMontainsCount,initialMorized_firefighterCount)); this.setModel(new FirefighterBoard(columnCount, rowCount, initialFireCount, initialFirefighterCount,initialCloudsCount, initialMontainsCount,initialMorized_firefighterCount,initialRoadsCount));
repaintGrid(); repaintGrid();
} }
......
package model;
import util.Position;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
public abstract class AbstractFighter extends BoardMethods implements ModelElement {
private List<Position> fighterPositions;
public void add(Position position) {
fighterPositions.add(position);
}
public List<Position> getFighterPositions() {
return fighterPositions;
}
public void initializeElements(int initialfighterCount, int rowCount, int columnCount) {
this.rowCount = rowCount;
this.columnCount = columnCount;
fighterPositions = new ArrayList<>();
for (int index = 0; index < initialfighterCount; index++)
fighterPositions.add(randomPosition());
}
public List<Position> updatefighters(Set<Position> firePositions, Montains montains) {
List<Position> result = new ArrayList<>();
List<Position> firefighterNewPositions = new ArrayList<>();
for (Position firefighterPosition : fighterPositions) {
Position newFirefighterPosition = neighborClosestToFire(firefighterPosition, firePositions);
if (firefighterNewPositions.contains(newFirefighterPosition) || montains.getMontainsPositions().contains(newFirefighterPosition)) {
firefighterNewPositions.add(firefighterPosition);
extinguish(firefighterPosition, firePositions);
} else {
firefighterNewPositions.add(newFirefighterPosition);
extinguish(newFirefighterPosition, firePositions);
}
result.add(firefighterPosition);
result.add(newFirefighterPosition);
List<Position> neighborFirePositions = neighbors(newFirefighterPosition).stream()
.filter(firePositions::contains).toList();
for (Position firePosition : neighborFirePositions)
extinguish(firePosition, firePositions);
result.addAll(neighborFirePositions);
}
fighterPositions = firefighterNewPositions;
return result;
}
}
...@@ -4,9 +4,9 @@ import util.Position; ...@@ -4,9 +4,9 @@ import util.Position;
import java.util.*; import java.util.*;
public class FireFighters extends BoardMethods implements ModelElement { public class FireFighters extends AbstractFighter implements ModelElement {
private List<Position> fireFightersPositions; /* private List<Position> fireFightersPositions;
...@@ -61,6 +61,9 @@ public class FireFighters extends BoardMethods implements ModelElement { ...@@ -61,6 +61,9 @@ public class FireFighters extends BoardMethods implements ModelElement {
fireFightersPositions = firefighterNewPositions; fireFightersPositions = firefighterNewPositions;
return result; return result;
} }
*/
public FireFighters() {
}
......
...@@ -12,6 +12,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> { ...@@ -12,6 +12,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
private final int initialFirefighterCount; private final int initialFirefighterCount;
private final int initialCloudsCount; private final int initialCloudsCount;
private final int initialMorized_firefighterCount; private final int initialMorized_firefighterCount;
private final int initialRoadsCount;
private final int initialMontainCount; private final int initialMontainCount;
private Fires fires; private Fires fires;
...@@ -19,10 +20,11 @@ public class FirefighterBoard implements Board<List<ModelElement>> { ...@@ -19,10 +20,11 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
private Cloud clouds; private Cloud clouds;
private Montains Montains; private Montains Montains;
private Motorized_Firefighter motorized_firefighter; private Motorized_Firefighter motorized_firefighter;
private Roads roads;
private int step = 0; private int step = 0;
public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialCloudsCount, int initialMontainCount,int initialMorized_firefighterCount) { public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialCloudsCount, int initialMontainCount,int initialMorized_firefighterCount,int initialRoadsCount) {
this.columnCount = columnCount; this.columnCount = columnCount;
this.rowCount = rowCount; this.rowCount = rowCount;
this.initialFireCount = initialFireCount; this.initialFireCount = initialFireCount;
...@@ -30,6 +32,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> { ...@@ -30,6 +32,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
this.initialCloudsCount = initialCloudsCount; this.initialCloudsCount = initialCloudsCount;
this.initialMontainCount = initialMontainCount; this.initialMontainCount = initialMontainCount;
this.initialMorized_firefighterCount = initialMorized_firefighterCount; this.initialMorized_firefighterCount = initialMorized_firefighterCount;
this.initialRoadsCount = initialRoadsCount;
initializeElements(); initializeElements();
} }
...@@ -39,17 +42,19 @@ public class FirefighterBoard implements Board<List<ModelElement>> { ...@@ -39,17 +42,19 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
this.clouds = new Cloud(); this.clouds = new Cloud();
this.Montains = new Montains(); this.Montains = new Montains();
this.motorized_firefighter = new Motorized_Firefighter(); this.motorized_firefighter = new Motorized_Firefighter();
this.roads = new Roads();
fires.initializeElements(initialFireCount,rowCount,columnCount); fires.initializeElements(initialFireCount,rowCount,columnCount);
fireFighters.initializeElements(initialFirefighterCount,rowCount,columnCount); fireFighters.initializeElements(initialFirefighterCount,rowCount,columnCount);
clouds.initializeElements(initialCloudsCount,rowCount, columnCount); clouds.initializeElements(initialCloudsCount,rowCount, columnCount);
Montains.initializeElements(initialMontainCount, rowCount,columnCount); Montains.initializeElements(initialMontainCount, rowCount,columnCount);
motorized_firefighter.initializeElements(initialMorized_firefighterCount,rowCount,columnCount); motorized_firefighter.initializeElements(initialMorized_firefighterCount,rowCount,columnCount);
roads.initializeElements(initialRoadsCount,rowCount,columnCount);
} }
@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(Position firefighterPosition : fireFighters.getFireFightersPositions()) for(Position firefighterPosition : fireFighters.getFighterPositions())
if (firefighterPosition.equals(position)) if (firefighterPosition.equals(position))
result.add(new FireFighters()); result.add(new FireFighters());
...@@ -61,10 +66,16 @@ public class FirefighterBoard implements Board<List<ModelElement>> { ...@@ -61,10 +66,16 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
if (cloudsPositions.equals(position)) if (cloudsPositions.equals(position))
result.add(new Cloud()); result.add(new Cloud());
for(Position motorized_firefighter : motorized_firefighter.getMotorized_fireFightersPositions()) for(Position motorized_firefighter : motorized_firefighter.getFighterPositions())
if (motorized_firefighter.equals(position)) if (motorized_firefighter.equals(position))
result.add(new Motorized_Firefighter()); result.add(new Motorized_Firefighter());
for(Position motorized_firefighter : roads.getRoadsPositions())
if (motorized_firefighter.equals(position))
result.add(new Roads());
if(fires.getFirePositions().contains(position)) if(fires.getFirePositions().contains(position))
result.add(new Fires()); result.add(new Fires());
return result; return result;
...@@ -81,11 +92,11 @@ public class FirefighterBoard implements Board<List<ModelElement>> { ...@@ -81,11 +92,11 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
} }
public List<Position> updateToNextGeneration() { public List<Position> updateToNextGeneration() {
List<Position> result = fireFighters.updateFirefighters(fires.getFirePositions(),Montains); List<Position> result = fireFighters.updatefighters(fires.getFirePositions(),Montains);
result.addAll(fires.updateFires(Montains)); result.addAll(fires.updateFires(Montains,roads));
if (!fires.getFirePositions().isEmpty()) { if (!fires.getFirePositions().isEmpty()) {
result.addAll(clouds.updateCouds(fires.getFirePositions())); result.addAll(clouds.updateCouds(fires.getFirePositions()));
result.addAll(motorized_firefighter.updateMotorized_firefighter(fires.getFirePositions(),Montains)); result.addAll(motorized_firefighter.updateMotorizedFirefighters(fires.getFirePositions(),Montains));
step++; step++;
fires.incrementStep(); fires.incrementStep();
} }
...@@ -112,7 +123,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> { ...@@ -112,7 +123,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
public void setState(List<ModelElement> state, Position position) { public void setState(List<ModelElement> state, Position position) {
//fires.extinguish(position); //fires.extinguish(position);
for (;;) { for (;;) {
if (!fireFighters.getFireFightersPositions().remove(position)) break; if (!fireFighters.getFighterPositions().remove(position)) break;
} }
for(ModelElement element : state){ for(ModelElement element : state){
...@@ -129,6 +140,10 @@ public class FirefighterBoard implements Board<List<ModelElement>> { ...@@ -129,6 +140,10 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
if(element instanceof Montains){ if(element instanceof Montains){
Montains.add(position); Montains.add(position);
} }
if(element instanceof Roads){
roads.add(position);
}
if (element instanceof Motorized_Firefighter){ if (element instanceof Motorized_Firefighter){
motorized_firefighter.add(position); motorized_firefighter.add(position);
} }
......
...@@ -22,16 +22,15 @@ public class Fires extends BoardMethods implements ModelElement { ...@@ -22,16 +22,15 @@ public class Fires extends BoardMethods implements ModelElement {
return firePositions; return firePositions;
} }
public List<Position> updateFires(Montains montains) { public List<Position> updateFires(Montains montains, Roads roads) {
List<Position> result = new ArrayList<>(); List<Position> result = new ArrayList<>();
if (step % 2 == 0) { if (step % 2 == 0) {
List<Position> newFirePositions = new ArrayList<>(); List<Position> newFirePositions = new ArrayList<>();
for (Position fire : firePositions) { for (Position fire : firePositions) {
List<Position> neighborsOfFires = neighbors(fire); List<Position> neighbors= neighbors(fire);
for(Position neighbor : neighborsOfFires) { for (Position position : neighbors){
if (!montains.getMontainsPositions().contains(neighbor)){ if(!montains.getMontainsPositions().contains(position) || !roads.getRoadsPositions().contains(position))
newFirePositions.add(neighbor); newFirePositions.add(position);
}
} }
} }
firePositions.addAll(newFirePositions); firePositions.addAll(newFirePositions);
......
...@@ -6,7 +6,7 @@ import java.util.*; ...@@ -6,7 +6,7 @@ import java.util.*;
public class Montains extends BoardMethods implements ModelElement { public class Montains extends BoardMethods implements ModelElement {
private Set<Position> MontainsPositions; private List<Position> MontainsPositions;
public Montains() { public Montains() {
...@@ -16,20 +16,35 @@ public class Montains extends BoardMethods implements ModelElement { ...@@ -16,20 +16,35 @@ public class Montains extends BoardMethods implements ModelElement {
MontainsPositions.add(newPositions); MontainsPositions.add(newPositions);
} }
public Set<Position> getMontainsPositions() { public List<Position> getMontainsPositions() {
return MontainsPositions; return MontainsPositions;
} }
public void initializeElements(int initialMontainsCount, int rowCount, int columnCount) {
public void initializeElements(int initialFireCount, int rowCount, int columnCount) {
this.columnCount = columnCount;
this.rowCount = rowCount; this.rowCount = rowCount;
MontainsPositions = new HashSet<>(); this.columnCount = columnCount;
for (int index = 0; index < initialFireCount; index++) MontainsPositions = new ArrayList<>();
MontainsPositions.add(randomPosition());
for (int index = 0; index < initialMontainsCount; index++) {
Position blockStart = randomPosition();
int blockSize = 3;
for (int rowOffset = 0; rowOffset < blockSize; rowOffset++) {
for (int colOffset = 0; colOffset < blockSize; colOffset++) {
// Ajoutez chaque position du bloc à la liste des positions des montagnes
int newRow = (blockStart.row() + rowOffset) % rowCount;
int newCol = (blockStart.column() + colOffset) % columnCount;
// Assurez-vous que les résultats sont positifs
newRow = (newRow + rowCount) % rowCount;
newCol = (newCol + columnCount) % columnCount;
MontainsPositions.add(new Position(newRow, newCol));
}
}
}
}
} }
...@@ -37,7 +52,7 @@ public class Montains extends BoardMethods implements ModelElement { ...@@ -37,7 +52,7 @@ public class Montains extends BoardMethods implements ModelElement {
}
......
...@@ -6,8 +6,8 @@ import java.util.ArrayList; ...@@ -6,8 +6,8 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
public class Motorized_Firefighter extends BoardMethods implements ModelElement { public class Motorized_Firefighter extends AbstractFighter {
/*
private List<Position> Motorized_fireFightersPositions; private List<Position> Motorized_fireFightersPositions;
public Motorized_Firefighter() { public Motorized_Firefighter() {
...@@ -62,6 +62,16 @@ public class Motorized_Firefighter extends BoardMethods implements ModelElement ...@@ -62,6 +62,16 @@ public class Motorized_Firefighter extends BoardMethods implements ModelElement
} }
return result; return result;
} }
*/
public List<Position> updateMotorizedFirefighters(Set<Position> firePositions, Montains montains) {
List<Position> result = new ArrayList<>();
for (int i = 0; i < 2; i++) {
result.addAll(super.updatefighters(firePositions, montains));
}
return result;
}
} }
package model;
import model.BoardMethods;
import model.ModelElement;
import util.Position;
import java.util.ArrayList;
import java.util.List;
public class Roads extends BoardMethods implements ModelElement {
private List<Position> roadsPositions;
public Roads() {
}
public void add(Position position){
roadsPositions.add(position);
}
public List<Position> getRoadsPositions() {
return roadsPositions;
}
public void initializeElements(int initialRoadsCount, int rowCount, int columnCount) {
this.rowCount = rowCount;
this.columnCount = columnCount;
roadsPositions = new ArrayList<>();
for (int index = 0; index < initialRoadsCount; index++) {
// Choisir une position aléatoire pour le coin supérieur gauche du bloc
Position blockStart = randomPosition();
// Définir la taille du bloc (5x5, par exemple)
int blockSize = 6;
for (int rowOffset = 0; rowOffset < blockSize; rowOffset++) {
for (int colOffset = 0; colOffset < 2; colOffset++) {
// Ajoutez chaque position du bloc à la liste des positions des montagnes
int newRow = (blockStart.row() + rowOffset) % rowCount;
int newCol = (blockStart.column() + colOffset) % columnCount;
roadsPositions.add(new Position(newRow, newCol));
}
}
}
}
}
package view; package view.Element;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import view.ViewElement;
public class EMPTY implements ViewElement { public class EMPTY implements ViewElement {
@Override @Override
......
package view; package view.Element;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import view.ViewElement;
public class FIRE implements ViewElement { public class FIRE implements ViewElement {
@Override @Override
......
package view; package view.Fighters;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import view.ViewElement;
public class FIREFIGHTER implements ViewElement { public class FIREFIGHTER implements ViewElement {
@Override @Override
......
package view; package view.Fighters;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import view.ViewElement;
public class MOTORIZED_FIREFIGHTER implements ViewElement { public class MOTORIZED_FIREFIGHTER implements ViewElement {
@Override @Override
......
package view; package view.Obstacles;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import view.ViewElement;
public class MONTAINS implements ViewElement { public class MONTAINS implements ViewElement {
@Override @Override
public Color getColor() { public Color getColor() {
return Color.BLACK; return Color.DARKCYAN;
} }
} }
package view.Obstacles;
import javafx.scene.paint.Color;
import view.ViewElement;
public class ROADS implements ViewElement {
@Override
public Color getColor() {
return Color.CORAL;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment