Skip to content
Snippets Groups Projects
Commit e545624c authored by melizzzz's avatar melizzzz
Browse files

Cloud

parent c7504db9
No related branches found
No related tags found
No related merge requests found
Pipeline #39149 passed
......@@ -46,7 +46,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_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT, INITIAL_CLOUD_COUNT);
}
private void showScene() {
......
......@@ -122,9 +122,9 @@ public class Controller {
}
public void initialize(int squareWidth, int squareHeight, int columnCount,
int rowCount, int initialFireCount, int initialFirefighterCount) {
int rowCount, int initialFireCount, int initialFirefighterCount, int initialcloudCount) {
grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight);
this.setModel(new FireFighterScenario(columnCount, rowCount, initialFireCount, initialFirefighterCount));
this.setModel(new FireFighterScenario(columnCount, rowCount, initialFireCount, initialFirefighterCount, initialcloudCount));
repaintGrid();
}
......
package model;
import javafx.geometry.Pos;
import javafx.scene.paint.Color;
import util.Position;
import util.PositionUtil;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class Cloud implements Entity{
private int age;
private Position position;
private final Color viewColor = Color.GREEN;
public Cloud(Position position, Board<Square> b){
this.age = 0;
this.position = position;
}
public Cloud(Position position, Board<Square> b, int age){
this.age = age;
this.position = position;
}
@Override
public List<Position> nextTurn(Board<Square> b) {
List<Position> adjacentPositions = PositionUtil.generateAdjacentPositions(position, b);
Position next_position = adjacentPositions.get(new Random().nextInt(adjacentPositions.size()));
if (b.getStates(next_position).getEntities().stream().anyMatch(element -> element instanceof Fire)){
extinguish(next_position, b);
}
Position old_position = this.position;
this.position = next_position;
b.addEntityAtSquare(this, position);
b.clearCaseFrom(this, old_position);
return List.of(old_position, this.position);
}
private Position extinguish(Position p, Board<Square> b) {
b.getStates(p).getEntities().removeIf(element -> element instanceof Fire);
List<Entity> entities = b.getStates(p).getEntities();
for (Entity e : entities) {
if (e instanceof EmptyEntity) {
e.setAge(b.stepNumber() + 1);
}
}
return p;
}
@Override
public Position getPosition() {
return this.position;
}
@Override
public void setPosition(Position p) {
this.position = p;
}
@Override
public int getAge() {
return age;
}
@Override
public void setAge(int age) {
this.age =age;
}
@Override
public void incrementAge() {
this.age += 1;
}
@Override
public Color getViewColor() {
return this.viewColor;
}
}
......@@ -21,19 +21,22 @@ public class FireFighterScenario extends EntityScenario implements Board<Square>
private int initialFireCount;
private int initialFireFightersCount;
private int intialCloudCount;
public FireFighterScenario(int columns, int rows, int initialFireCount, int initialFireFightersCount) {
public FireFighterScenario(int columns, int rows, int initialFireCount, int initialFireFightersCount, int initialCloudCount) {
this.matrix = new Matrix<Square>(columns, rows);
this.initialFireCount = initialFireCount;
this.initialFireFightersCount = initialFireFightersCount;
this.intialCloudCount = initialCloudCount;
initScenario(matrix);
placeInitialActors(initialFireCount, initialFireFightersCount);
placeInitialActors(initialFireCount, initialFireFightersCount, initialCloudCount);
this.step = 0;
}
private void placeInitialActors(int initialFireCount, int initialFireFightersCount) {
private void placeInitialActors(int initialFireCount, int initialFireFightersCount, int initialCloudCount) {
int fireCount = 0;
int fireFighterCount = 0;
int cloudCount = 0;
int chance = 5; // Chance initiale en pourcentage
Random random = new Random();
List<Position> positions = new ArrayList<>();
......@@ -43,7 +46,7 @@ public class FireFighterScenario extends EntityScenario implements Board<Square>
}
}
while (fireCount < initialFireCount || fireFighterCount < initialFireFightersCount) {
while (fireCount < initialFireCount || fireFighterCount < initialFireFightersCount || cloudCount < intialCloudCount) {
Collections.shuffle(positions); // Mélange les positions pour un parcours aléatoire
for (Position pos : positions) {
......@@ -51,7 +54,7 @@ public class FireFighterScenario extends EntityScenario implements Board<Square>
if (fireCount < initialFireCount && random.nextInt(100) < chance) {
setSquare(new Square(pos, new Fire(pos, this, 1)));
fireCount++;
if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount) {
if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount && cloudCount == initialCloudCount) {
return;
}
continue;
......@@ -60,7 +63,15 @@ public class FireFighterScenario extends EntityScenario implements Board<Square>
if (fireFighterCount < initialFireFightersCount && random.nextInt(100) < chance) {
setSquare(new Square(pos, new FireFighter(pos, this, 1)));
fireFighterCount++;
if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount) {
if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount && cloudCount == initialCloudCount) {
return;
}
}
if (fireFighterCount < initialFireFightersCount && random.nextInt(100) < chance) {
setSquare(new Square(pos, new Cloud(pos, this, 1)));
cloudCount++;
if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount && cloudCount == initialCloudCount) {
return;
}
}
......@@ -187,7 +198,7 @@ public class FireFighterScenario extends EntityScenario implements Board<Square>
step = 0;
matrix.clear();
initScenario(matrix);
placeInitialActors(initialFireCount, initialFireFightersCount);
placeInitialActors(initialFireCount, initialFireFightersCount, intialCloudCount);
}
public int stepNumber() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment