Select Git revision
FireFighter.java
Forked from
COUETOUX Basile / FirefighterStarter
Source project has a limited visibility.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
FireFighter.java 4.41 KiB
package model;
import java.util.ArrayList;
import java.util.List;
import javafx.scene.paint.Color;
import util.Position;
import util.PositionUtil;
public class FireFighter implements Entity{
private int age;
private Position position;
private final Color viewColor = Color.BLUE;
public FireFighter(Position position, Board<Entity> b){
this.position = position;
this.age = 0;
}
public FireFighter(Position position, Board<Entity> b, int age){
this.position = position;
this.age = age;
}
public List<Position> nextTurn(Board<Entity> b) {
List<Position> positions = new ArrayList<>();
// Générer les positions adjacentes
List<Position> adjacentPositions = PositionUtil.generateAdjacentPositions(position, b);
// Vérifier s'il y a du feu dans une des positions adjacentes
boolean hasFire = adjacentPositions.stream()
.anyMatch(p -> b.getState(p) instanceof Fire);
if (hasFire) {
// Si du feu est trouvé, on éteint les feux adjacents
positions.addAll(extinguish(adjacentPositions, b));
} else {
// Chercher la position du feu le plus proche
Position nearestFirePos = b.getNearestEntity(position, Fire.class);
if (nearestFirePos != null && !nearestFirePos.equals(position)) {
// Trouver la meilleure position pour se rapprocher du feu
Position nextPos = getNextPositionTowards(position, nearestFirePos, b);
if (nextPos != null) {
// Mettre à jour la position du pompier
b.clearCase(position); // Vider l'ancienne case
positions.add(new Position(position.x(), position.y()));
this.position = nextPos;
b.setState(this, nextPos); // Mettre à jour la nouvelle case
positions.add(nextPos);
adjacentPositions = PositionUtil.generateAdjacentPositions(nextPos, b);
positions.addAll(extinguish(adjacentPositions, b));
}
// Aucun déplacement possible = le pompier reste sur place
}
}
return positions;
}
private List<Position> extinguish(List<Position> adjacentPositions, Board<Entity> b) {
List<Position> extinguishedPositions = new ArrayList<>();
for (Position p : adjacentPositions) {
if (b.getState(p) instanceof Fire) {
b.clearCase(p);
extinguishedPositions.add(p); // Ajouter la position où le feu a été éteint
}
}
return extinguishedPositions;