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

Cloud

parent c7504db9
Branches
No related tags found
No related merge requests found
Pipeline #39149 passed
...@@ -46,7 +46,7 @@ public class SimulatorApplication extends javafx.application.Application { ...@@ -46,7 +46,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_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT, INITIAL_CLOUD_COUNT);
} }
private void showScene() { private void showScene() {
......
...@@ -122,9 +122,9 @@ public class Controller { ...@@ -122,9 +122,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 rowCount, int initialFireCount, int initialFirefighterCount, int initialcloudCount) {
grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight); grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight);
this.setModel(new FireFighterScenario(columnCount, rowCount, initialFireCount, initialFirefighterCount)); this.setModel(new FireFighterScenario(columnCount, rowCount, initialFireCount, initialFirefighterCount, initialcloudCount));
repaintGrid(); 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> ...@@ -21,19 +21,22 @@ public class FireFighterScenario extends EntityScenario implements Board<Square>
private int initialFireCount; private int initialFireCount;
private int initialFireFightersCount; 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.matrix = new Matrix<Square>(columns, rows);
this.initialFireCount = initialFireCount; this.initialFireCount = initialFireCount;
this.initialFireFightersCount = initialFireFightersCount; this.initialFireFightersCount = initialFireFightersCount;
this.intialCloudCount = initialCloudCount;
initScenario(matrix); initScenario(matrix);
placeInitialActors(initialFireCount, initialFireFightersCount); placeInitialActors(initialFireCount, initialFireFightersCount, initialCloudCount);
this.step = 0; this.step = 0;
} }
private void placeInitialActors(int initialFireCount, int initialFireFightersCount) { private void placeInitialActors(int initialFireCount, int initialFireFightersCount, int initialCloudCount) {
int fireCount = 0; int fireCount = 0;
int fireFighterCount = 0; int fireFighterCount = 0;
int cloudCount = 0;
int chance = 5; // Chance initiale en pourcentage int chance = 5; // Chance initiale en pourcentage
Random random = new Random(); Random random = new Random();
List<Position> positions = new ArrayList<>(); List<Position> positions = new ArrayList<>();
...@@ -43,7 +46,7 @@ public class FireFighterScenario extends EntityScenario implements Board<Square> ...@@ -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 Collections.shuffle(positions); // Mélange les positions pour un parcours aléatoire
for (Position pos : positions) { for (Position pos : positions) {
...@@ -51,7 +54,7 @@ public class FireFighterScenario extends EntityScenario implements Board<Square> ...@@ -51,7 +54,7 @@ public class FireFighterScenario extends EntityScenario implements Board<Square>
if (fireCount < initialFireCount && random.nextInt(100) < chance) { if (fireCount < initialFireCount && random.nextInt(100) < chance) {
setSquare(new Square(pos, new Fire(pos, this, 1))); setSquare(new Square(pos, new Fire(pos, this, 1)));
fireCount++; fireCount++;
if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount) { if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount && cloudCount == initialCloudCount) {
return; return;
} }
continue; continue;
...@@ -60,7 +63,15 @@ public class FireFighterScenario extends EntityScenario implements Board<Square> ...@@ -60,7 +63,15 @@ public class FireFighterScenario extends EntityScenario implements Board<Square>
if (fireFighterCount < initialFireFightersCount && random.nextInt(100) < chance) { if (fireFighterCount < initialFireFightersCount && random.nextInt(100) < chance) {
setSquare(new Square(pos, new FireFighter(pos, this, 1))); setSquare(new Square(pos, new FireFighter(pos, this, 1)));
fireFighterCount++; 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; return;
} }
} }
...@@ -187,7 +198,7 @@ public class FireFighterScenario extends EntityScenario implements Board<Square> ...@@ -187,7 +198,7 @@ public class FireFighterScenario extends EntityScenario implements Board<Square>
step = 0; step = 0;
matrix.clear(); matrix.clear();
initScenario(matrix); initScenario(matrix);
placeInitialActors(initialFireCount, initialFireFightersCount); placeInitialActors(initialFireCount, initialFireFightersCount, intialCloudCount);
} }
public int stepNumber() { public int stepNumber() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment