Skip to content
Snippets Groups Projects
Commit d102f9bf authored by aimennabi's avatar aimennabi
Browse files

tache 1

parent 435918d0
No related branches found
No related tags found
No related merge requests found
Showing
with 101 additions and 0 deletions
File added
File added
ff
\ No newline at end of file
File added
File added
File added
File added
File added
File added
File added
File added
File added
File added
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public abstract class AntiFire {
Set<Position> fires = new HashSet<>();
Grid grid;
int colCount, rowCount;
public abstract void activation();
public abstract Position activateFighter(Position position);
public abstract List<Position> next(Position position);
public abstract Position moveTowardFire(Position position);
public void extinguish(Position position){
fires.remove(position);
grid.paint(position.row, position.col);
}
public Position randomPosition() {
return new Position((int) (Math.random()*rowCount), (int) (Math.random()*colCount));
}
public record Position(int row, int col){
}
}
import java.util.List;
public class Clouds {
}
import java.util.*;
public class MotoFighter extends AntiFire {
List<Position> mfNewPositions;
List<Position> motofighter = new ArrayList<>();
@Override
public void activation() {
mfNewPositions = new ArrayList<>();
for(Position mF : motofighter){
Position newPosition = activateFighter(mF);
grid.paint(mF.row(), mF.row());
grid.paintMF(newPosition.row(), newPosition.col());
mfNewPositions.add(newPosition);
}
motofighter = mfNewPositions;
}
@Override
public Position activateFighter(Position position) {
Position randomPosition = moveTowardFire(position);
//next(position).get((int) (Math.random()*next(position).size()));
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()-2, position.col()));
if(position.col()>0) list.add(new Position(position.row(), position.col()-2));
if(position.row()<rowCount-1) list.add(new Position(position.row()+2, position.col()));
if(position.col()<colCount-1) list.add(new Position(position.row(), position.col()+2));
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;
}
}
public record Position(int row , int col) {
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment