Select Git revision
FireFighters.java
Forked from
COUETOUX Basile / FirefighterStarter
Source project has a limited visibility.
-
ABDELMOUDJIB Mohammed el amine authoredABDELMOUDJIB Mohammed el amine authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
FireFighters.java 2.44 KiB
package Fighters;
import Activation.Activation;
import Fighters.AntiFire;
import Position.Position;
import javax.swing.*;
import java.util.*;
public class FireFighters extends AntiFire implements Activation {
int colCount, rowCount;
List<Position> firefighters = new ArrayList<>();
Set<Position> fires = new HashSet<>();
List<Position> ffNewPositions;
@Override
public Position activateFight(Position position) {
Position randomPosition = moveTowardFire(position);
List<Position> nextFires = next(randomPosition).stream().filter(fires::contains).toList();
extinguish(randomPosition);
for (Position fire : nextFires)
extinguish(fire);
return randomPosition;
}
@Override
public List<Position> next(Position position) {
List<Position> list = new ArrayList<>();
if(position.row()>0) list.add(new Position(position.row()-1, position.col()));
if(position.col()>0) list.add(new Position(position.row(), position.col()-1));
if(position.row()<rowCount-1) list.add(new Position(position.row()+1, position.col()));
if(position.col()<colCount-1) list.add(new Position(position.row(), position.col()+1));
return list;
}
@Override
public Position moveTowardFire(Position position) {
Queue<Position> toVisit = new LinkedList<>();
Set<Position> seen = new HashSet<>();
HashMap<Position,Position> firstMove = new HashMap<>();
toVisit.addAll(next(position));
for(Position initialMove : toVisit)
firstMove.put(initialMove,initialMove);
while(!toVisit.isEmpty()){
Position current = toVisit.poll();
if(fires.contains(current))
return firstMove.get(current);
for(Position adjacent : next(current)){
if(seen.contains(adjacent)) continue;
toVisit.add(adjacent);
seen.add(adjacent);
firstMove.put(adjacent, firstMove.get(current));
}
}
return position;
}
@Override
public void activation() {
ffNewPositions = new ArrayList<>();
for(Position ff : firefighters){
Position newPosition = activateFight(ff);
grid.paint(ff.row(),ff.col());
grid.paintFF(newPosition.row(), newPosition.col());
ffNewPositions.add(newPosition);
}
firefighters = ffNewPositions;
}
}