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
No related branches found
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 {
public static final int INITIAL_CLOUD_COUNT = 6;
public static final int INITIAL_MONTAIN_COUNT = 4;
public static final int INITIAL_MOTORIZED_FIREFIGHTER_COUNT = 4;
public static final int INITIAL_ROAD_COUNT = 2;
private Stage primaryStage;
......@@ -48,7 +50,7 @@ public class SimulatorApplication extends javafx.application.Application {
view = loader.load();
Controller controller = loader.getController();
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() {
......
......@@ -15,6 +15,12 @@ import javafx.util.Pair;
import model.*;
import util.Position;
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.List;
......@@ -98,6 +104,12 @@ public class Controller {
return new MOTORIZED_FIREFIGHTER();
}
if(model instanceof Roads){
return new ROADS();
}
}
return new EMPTY();
......@@ -136,9 +148,9 @@ public class Controller {
}
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);
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();
}
......
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;
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 {
fireFightersPositions = firefighterNewPositions;
return result;
}
*/
public FireFighters() {
}
......
......@@ -12,6 +12,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
private final int initialFirefighterCount;
private final int initialCloudsCount;
private final int initialMorized_firefighterCount;
private final int initialRoadsCount;
private final int initialMontainCount;
private Fires fires;
......@@ -19,10 +20,11 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
private Cloud clouds;
private Montains Montains;
private Motorized_Firefighter motorized_firefighter;
private Roads roads;
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.rowCount = rowCount;
this.initialFireCount = initialFireCount;
......@@ -30,6 +32,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
this.initialCloudsCount = initialCloudsCount;
this.initialMontainCount = initialMontainCount;
this.initialMorized_firefighterCount = initialMorized_firefighterCount;
this.initialRoadsCount = initialRoadsCount;
initializeElements();
}
......@@ -39,17 +42,19 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
this.clouds = new Cloud();
this.Montains = new Montains();
this.motorized_firefighter = new Motorized_Firefighter();
this.roads = new Roads();
fires.initializeElements(initialFireCount,rowCount,columnCount);
fireFighters.initializeElements(initialFirefighterCount,rowCount,columnCount);
clouds.initializeElements(initialCloudsCount,rowCount, columnCount);
Montains.initializeElements(initialMontainCount, rowCount,columnCount);
motorized_firefighter.initializeElements(initialMorized_firefighterCount,rowCount,columnCount);
roads.initializeElements(initialRoadsCount,rowCount,columnCount);
}
@Override
public List<ModelElement> getState(Position position) {
List<ModelElement> result = new ArrayList<>();
for(Position firefighterPosition : fireFighters.getFireFightersPositions())
for(Position firefighterPosition : fireFighters.getFighterPositions())
if (firefighterPosition.equals(position))
result.add(new FireFighters());
......@@ -61,10 +66,16 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
if (cloudsPositions.equals(position))
result.add(new Cloud());
for(Position motorized_firefighter : motorized_firefighter.getMotorized_fireFightersPositions())
for(Position motorized_firefighter : motorized_firefighter.getFighterPositions())
if (motorized_firefighter.equals(position))
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))
result.add(new Fires());
return result;
......@@ -81,11 +92,11 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
}
public List<Position> updateToNextGeneration() {
List<Position> result = fireFighters.updateFirefighters(fires.getFirePositions(),Montains);
result.addAll(fires.updateFires(Montains));
List<Position> result = fireFighters.updatefighters(fires.getFirePositions(),Montains);
result.addAll(fires.updateFires(Montains,roads));
if (!fires.getFirePositions().isEmpty()) {
result.addAll(clouds.updateCouds(fires.getFirePositions()));
result.addAll(motorized_firefighter.updateMotorized_firefighter(fires.getFirePositions(),Montains));
result.addAll(motorized_firefighter.updateMotorizedFirefighters(fires.getFirePositions(),Montains));
step++;
fires.incrementStep();
}
......@@ -112,7 +123,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
public void setState(List<ModelElement> state, Position position) {
//fires.extinguish(position);
for (;;) {
if (!fireFighters.getFireFightersPositions().remove(position)) break;
if (!fireFighters.getFighterPositions().remove(position)) break;
}
for(ModelElement element : state){
......@@ -129,6 +140,10 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
if(element instanceof Montains){
Montains.add(position);
}
if(element instanceof Roads){
roads.add(position);
}
if (element instanceof Motorized_Firefighter){
motorized_firefighter.add(position);
}
......
......@@ -22,16 +22,15 @@ public class Fires extends BoardMethods implements ModelElement {
return firePositions;
}
public List<Position> updateFires(Montains montains) {
public List<Position> updateFires(Montains montains, Roads roads) {
List<Position> result = new ArrayList<>();
if (step % 2 == 0) {
List<Position> newFirePositions = new ArrayList<>();
for (Position fire : firePositions) {
List<Position> neighborsOfFires = neighbors(fire);
for(Position neighbor : neighborsOfFires) {
if (!montains.getMontainsPositions().contains(neighbor)){
newFirePositions.add(neighbor);
}
List<Position> neighbors= neighbors(fire);
for (Position position : neighbors){
if(!montains.getMontainsPositions().contains(position) || !roads.getRoadsPositions().contains(position))
newFirePositions.add(position);
}
}
firePositions.addAll(newFirePositions);
......
......@@ -6,7 +6,7 @@ import java.util.*;
public class Montains extends BoardMethods implements ModelElement {
private Set<Position> MontainsPositions;
private List<Position> MontainsPositions;
public Montains() {
......@@ -16,20 +16,35 @@ public class Montains extends BoardMethods implements ModelElement {
MontainsPositions.add(newPositions);
}
public Set<Position> getMontainsPositions() {
public List<Position> getMontainsPositions() {
return MontainsPositions;
}
public void initializeElements(int initialFireCount, int rowCount, int columnCount) {
this.columnCount = columnCount;
public void initializeElements(int initialMontainsCount, int rowCount, int columnCount) {
this.rowCount = rowCount;
MontainsPositions = new HashSet<>();
for (int index = 0; index < initialFireCount; index++)
MontainsPositions.add(randomPosition());
this.columnCount = columnCount;
MontainsPositions = new ArrayList<>();
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 {
}
......
......@@ -6,8 +6,8 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Set;
public class Motorized_Firefighter extends BoardMethods implements ModelElement {
public class Motorized_Firefighter extends AbstractFighter {
/*
private List<Position> Motorized_fireFightersPositions;
public Motorized_Firefighter() {
......@@ -62,6 +62,16 @@ public class Motorized_Firefighter extends BoardMethods implements ModelElement
}
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 view.ViewElement;
public class EMPTY implements ViewElement {
@Override
......
package view;
package view.Element;
import javafx.scene.paint.Color;
import view.ViewElement;
public class FIRE implements ViewElement {
@Override
......
package view;
package view.Fighters;
import javafx.scene.paint.Color;
import view.ViewElement;
public class FIREFIGHTER implements ViewElement {
@Override
......
package view;
package view.Fighters;
import javafx.scene.paint.Color;
import view.ViewElement;
public class MOTORIZED_FIREFIGHTER implements ViewElement {
@Override
......
package view;
package view.Obstacles;
import javafx.scene.paint.Color;
import view.ViewElement;
public class MONTAINS implements ViewElement {
@Override
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