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

tache 1 a finir

parent d102f9bf
No related branches found
No related tags found
No related merge requests found
File added
No preview for this file type
No preview for this file type
import grid.Grid;
import javafx.application.Application; import javafx.application.Application;
import javafx.scene.Group; import javafx.scene.Group;
import javafx.scene.Scene; import javafx.scene.Scene;
......
import java.util.List;
public class Clouds {
}
package fightfire;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import grid.Grid;
public abstract class AntiFire { public abstract class AntiFire {
Set<Position> fires = new HashSet<>(); Set<Position> fires = new HashSet<>();
Grid grid; Grid grid;
int colCount, rowCount; int colCount, rowCount;
public abstract void initiali(int number);
public abstract void activation(); public abstract void activation();
public abstract Position activateFighter(Position position); public abstract Position activateFighter(Position position);
...@@ -17,7 +22,7 @@ public abstract class AntiFire { ...@@ -17,7 +22,7 @@ public abstract class AntiFire {
public void extinguish(Position position){ public void extinguish(Position position){
fires.remove(position); fires.remove(position);
grid.paint(position.row, position.col); grid.paint(position.row(), position.col());
} }
public Position randomPosition() { public Position randomPosition() {
return new Position((int) (Math.random()*rowCount), (int) (Math.random()*colCount)); return new Position((int) (Math.random()*rowCount), (int) (Math.random()*colCount));
......
package fightfire;
import fightfire.AntiFire;
import java.util.*;
public class Clouds extends AntiFire {
List<Position> ccNewPositions;
List<Position> clouds = new ArrayList<>();
@Override
public void initiali(int number) {
for(int index=0; index<number;index++)
clouds.add(randomPosition());
}
@Override
public void activation() {
ccNewPositions = new ArrayList<>();
for(Position cc : clouds){
Position newPosition = activateFighter(cc);
grid.paint(cc.row(), cc.row());
grid.paintMF(newPosition.row(), newPosition.col());
ccNewPositions.add(newPosition);
}
clouds = ccNewPositions;
}
@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()-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) {
return next(position).get((int) (Math.random()*next(position).size()));
}
}
package fightfire;
import fightfire.AntiFire;
import java.util.*;
public class FireFigher extends AntiFire {
List<Position>ffNewPositions= new ArrayList<>();
List<Position>firefighters=new ArrayList<>();
@Override
public void initiali(int number) {
for(int index=0; index<number;index++)
firefighters.add(randomPosition());
}
@Override
public void activation() {
ffNewPositions = new ArrayList<>();
for(Position ff : firefighters){
Position newPosition = activateFighter(ff);
grid.paint(ff.row(),ff.col());
grid.paintFF(newPosition.row(), newPosition.col());
ffNewPositions.add(newPosition);
}
}
@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()-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;
}
}
package fightfire;
import fightfire.AntiFire;
import java.util.*; import java.util.*;
public class MotoFighter extends AntiFire { public class MotoFighter extends AntiFire {
...@@ -5,6 +9,11 @@ public class MotoFighter extends AntiFire { ...@@ -5,6 +9,11 @@ public class MotoFighter extends AntiFire {
List<Position> motofighter = new ArrayList<>(); List<Position> motofighter = new ArrayList<>();
@Override
public void initiali(int number) {
for(int index=0; index<number;index++)
motofighter.add(randomPosition());
}
@Override @Override
public void activation() { public void activation() {
......
package grid;
import javafx.scene.canvas.Canvas; import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext; import javafx.scene.canvas.GraphicsContext;
import javafx.scene.input.MouseEvent; import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import model.Model;
public class Grid extends Canvas{ public class Grid extends Canvas{
int width, height, colCount, rowCount; int width;
Model model; int height;
public int colCount;
public int rowCount;
public Model model;
public Grid(int width, int height, int colCount, int rowCount) { public Grid(int width, int height, int colCount, int rowCount) {
...@@ -17,7 +23,7 @@ public class Grid extends Canvas{ ...@@ -17,7 +23,7 @@ public class Grid extends Canvas{
setFocusTraversable(true); setFocusTraversable(true);
setOnMousePressed(this::mousePressed); setOnMousePressed(this::mousePressed);
model = new Model(this); model = new Model(this);
model.initialisation(3,1,2,1); model.initialisation(3,1,2,2);
} }
public void restart(MouseEvent mouseEvent){ public void restart(MouseEvent mouseEvent){
...@@ -34,7 +40,7 @@ public class Grid extends Canvas{ ...@@ -34,7 +40,7 @@ public class Grid extends Canvas{
model.click((int)x*rowCount/height,(int)y*colCount/width);*/ model.click((int)x*rowCount/height,(int)y*colCount/width);*/
} }
void repaint(){ public void repaint(){
for(int col=0; col<colCount; col++) for(int col=0; col<colCount; col++)
getGraphicsContext2D().strokeLine(0, col*width/colCount,height, col*width/colCount); getGraphicsContext2D().strokeLine(0, col*width/colCount,height, col*width/colCount);
for(int row=0; row<rowCount;row++) for(int row=0; row<rowCount;row++)
...@@ -42,7 +48,7 @@ public class Grid extends Canvas{ ...@@ -42,7 +48,7 @@ public class Grid extends Canvas{
} }
void paint(int row, int col){ public void paint(int row, int col){
getGraphicsContext2D().setFill(Color.WHITE); getGraphicsContext2D().setFill(Color.WHITE);
getGraphicsContext2D().fillRect(row*height/rowCount,col*width/colCount,height/rowCount,width/colCount); getGraphicsContext2D().fillRect(row*height/rowCount,col*width/colCount,height/rowCount,width/colCount);
} }
......
package model;
import grid.Grid;
import position.Position;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Fire {
int step =0;
Grid grid;
int rowCount,colCount;
Set<Position> fires = new HashSet<>();
public void initiali(int fireNumber){
for(int index=0; index<fireNumber;index++)
fires.add(new Position((int) (Math.random()*rowCount), (int) (Math.random()*colCount)));}
public void activation() {
if(step%2==0){
List<Position> newFires = new ArrayList<>();
for(Position fire : fires){
newFires.addAll(activateFire(fire));
}
for(Position newFire : newFires)
grid.paintFire(newFire.row(), newFire.col());
fires.addAll(newFires);}
step++;
}
private List<Position> activateFire(Position position) {
return next(position);
}
private 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;
}
}
\ No newline at end of file
package model;
import fightfire.Clouds;
import fightfire.FireFigher;
import fightfire.MotoFighter;
import grid.Grid;
import model.Model;
import position.Position;
import java.util.*; import java.util.*;
...@@ -5,11 +15,13 @@ public class Model { ...@@ -5,11 +15,13 @@ public class Model {
Grid grid; Grid grid;
int colCount, rowCount; int colCount, rowCount;
MotoFighter motoFighter =new MotoFighter(); MotoFighter motoFighter =new MotoFighter();
List<Position>linefite=new ArrayList<>();
FireFigher fireFigher = new FireFigher();
Clouds clouds=new Clouds();
List<Position> firefighters = new ArrayList<>(); List<Position> firefighters = new ArrayList<>();
List<Position> clouds = new ArrayList<>(); Fire fires = new Fire();
Set<Position> fires = new HashSet<>();
List<Position> ffNewPositions; List<Position> ffNewPositions;
List<Position> cNewPositions; List<Position> cNewPositions;
...@@ -24,160 +36,175 @@ public class Model { ...@@ -24,160 +36,175 @@ public class Model {
public void initialisation(int fireNumber, int fireFighterNumber,int cloudNumber,int motoFighterNumber){ public void initialisation(int fireNumber, int fireFighterNumber,int cloudNumber,int motoFighterNumber){
for(int index=0; index<fireNumber;index++)
fires.add(randomPosition()); fires.initiali(fireNumber);
for(int index=0; index<fireFighterNumber;index++) fireFigher.initiali(fireFighterNumber);
clouds.initiali(cloudNumber);
motoFighter.initiali(motoFighterNumber);
/*for(int index=0; index<fireFighterNumber;index++)
firefighters.add(randomPosition()); firefighters.add(randomPosition());
for(int index=0; index<cloudNumber;index++) for(int index=0; index<cloudNumber;index++)
clouds.add(randomPosition()); clouds.add(randomPosition());*/
for(int index=0; index<motoFighterNumber;index++)
linefite.add(randomPosition());
motoFighter.motofighter.add(randomPosition().row());
}
private Position randomPosition() {
return new Position((int) (Math.random()*rowCount), (int) (Math.random()*colCount));
} }
/*private position.Position randomPosition() {
return new position.Position((int) (Math.random()*rowCount), (int) (Math.random()*colCount));
}*/
public void activation(){ public void activation(){
/*
ffNewPositions = new ArrayList<>(); ffNewPositions = new ArrayList<>();
for(Position ff : firefighters){ for(position.Position ff : firefighters){
Position newPosition = activateFirefighter(ff); position.Position newPosition = activateFirefighter(ff);
grid.paint(ff.row(),ff.col()); grid.paint(ff.row(),ff.col());
grid.paintFF(newPosition.row(), newPosition.col()); grid.paintFF(newPosition.row(), newPosition.col());
ffNewPositions.add(newPosition); ffNewPositions.add(newPosition);
} }
firefighters = ffNewPositions;
*/
fireFigher.activation();
cNewPositions = new ArrayList<>(); /* cNewPositions = new ArrayList<>();
for(Position cc : clouds){ for(position.Position cc : clouds){
Position newPosition = activeCloud(cc); position.Position newPosition = activeCloud(cc);
grid.paint(cc.row(),cc.col()); grid.paint(cc.row(),cc.col());
grid.paintCC(newPosition.row(), newPosition.col()); grid.paintCC(newPosition.row(), newPosition.col());
cNewPositions.add(newPosition); cNewPositions.add(newPosition);
} }
/* for(Position mF : motofighter){ clouds = cNewPositions;
Position newPosition = motoFighter.activateFighter(mF);
*/
clouds.activation();
/* for(position.Position mF : motofighter){
position.Position newPosition = motoFighter.activateFighter(mF);
grid.paint(mF.row,mF.col); grid.paint(mF.row,mF.col);
grid.paintMF(newPosition.row, newPosition.col); grid.paintMF(newPosition.row, newPosition.col);
mfNewPositions.add(newPosition); mfNewPositions.add(newPosition);
}*/ }*/
firefighters = ffNewPositions;
clouds = cNewPositions;
motoFighter.activation(); motoFighter.activation();
if(step%2==0){ /* if(step%2==0){
List<Position> newFires = new ArrayList<>(); List<position.Position> newFires = new ArrayList<>();
for(Position fire : fires){ for(position.Position fire : fires){
newFires.addAll(activateFire(fire)); newFires.addAll(activateFire(fire));
} }
for(Position newFire : newFires) for(position.Position newFire : newFires)
grid.paintFire(newFire.row(), newFire.col()); grid.paintFire(newFire.row(), newFire.col());
fires.addAll(newFires);} fires.addAll(newFires);}
step++; step++;8*/
fires.activation();
} }
private List<Position> activateFire(Position position) { /* private List<position.Position> activateFire(position.Position position) {
return next(position); return next(position);
} }*/
private Position activeCloud(Position position){ /* private position.Position activeCloud(position.Position position){
Position randomPosition=next(position).get((int) (Math.random()*next(position).size())); position.Position randomPosition=next(position).get((int) (Math.random()*next(position).size()));
List<Position> nextFires = next(randomPosition).stream().filter(fires::contains).toList(); List<position.Position> nextFires = next(randomPosition).stream().filter(fires::contains).toList();
extinguish(randomPosition); extinguish(randomPosition);
for (Position fire : nextFires) for (position.Position fire : nextFires)
extinguish(fire); extinguish(fire);
return randomPosition; return randomPosition;
} }*/
/* private Position activateMotofighter(Position position) { /* private position.Position activateMotofighter(position.Position position) {
Position randomPosition = tStepTowardFire(position); position.Position randomPosition = tStepTowardFire(position);
//next(position).get((int) (Math.random()*next(position).size())); //next(position).get((int) (Math.random()*next(position).size()));
List<Position> nextFires = next(randomPosition).stream().filter(fires::contains).toList(); List<position.Position> nextFires = next(randomPosition).stream().filter(fires::contains).toList();
extinguish(randomPosition); extinguish(randomPosition);
for (Position fire : nextFires) for (position.Position fire : nextFires)
extinguish(fire); extinguish(fire);
return randomPosition; return randomPosition;
}*/ }*/
private Position activateFirefighter(Position position) { /* private position.Position activateFirefighter(position.Position position) {
Position randomPosition = aStepTowardFire(position); position.Position randomPosition = aStepTowardFire(position);
//next(position).get((int) (Math.random()*next(position).size())); //next(position).get((int) (Math.random()*next(position).size()));
List<Position> nextFires = next(randomPosition).stream().filter(fires::contains).toList(); List<position.Position> nextFires = next(randomPosition).stream().filter(fires::contains).toList();
extinguish(randomPosition); extinguish(randomPosition);
for (Position fire : nextFires) for (position.Position fire : nextFires)
extinguish(fire); extinguish(fire);
return randomPosition; return randomPosition;
} }*/
private void extinguish(Position position) { /* private void extinguish(position.Position position) {
fires.remove(position); fires.remove(position);
grid.paint(position.row(), position.col()); grid.paint(position.row(), position.col());
} }*/
/*
private List<Position> next(Position position){ private List<position.Position> next(position.Position position){
List<Position> list = new ArrayList<>(); List<position.Position> list = new ArrayList<>();
if(position.row()>0) list.add(new Position(position.row()-1, position.col())); if(position.row()>0) list.add(new position.Position(position.row()-1, position.col()));
if(position.col()>0) list.add(new Position(position.row(), position.col()-1)); if(position.col()>0) list.add(new position.Position(position.row(), position.col()-1));
if(position.row()<rowCount-1) list.add(new Position(position.row()+1, position.col())); if(position.row()<rowCount-1) list.add(new position.Position(position.row()+1, position.col()));
if(position.col()<colCount-1) list.add(new Position(position.row(), position.col()+1)); if(position.col()<colCount-1) list.add(new position.Position(position.row(), position.col()+1));
return list; return list;
} }*/
/* private List<Position> nextTwo(Position position){ /* private List<position.Position> nextTwo(position.Position position){
List<Position> list = new ArrayList<>(); List<position.Position> list = new ArrayList<>();
if(position.row>0) list.add(new Position(position.row-2, position.col)); if(position.row>0) list.add(new position.Position(position.row-2, position.col));
if(position.col>0) list.add(new Position(position.row, position.col-2)); if(position.col>0) list.add(new position.Position(position.row, position.col-2));
if(position.row<rowCount-1) list.add(new Position(position.row+2, position.col)); if(position.row<rowCount-1) list.add(new position.Position(position.row+2, position.col));
if(position.col<colCount-1) list.add(new Position(position.row, position.col+2)); if(position.col<colCount-1) list.add(new position.Position(position.row, position.col+2));
return list; return list;
}*/ }*/
private Position aStepTowardFire(Position position){ /* private position.Position aStepTowardFire(position.Position position){
Queue<Position> toVisit = new LinkedList<>(); Queue<position.Position> toVisit = new LinkedList<>();
Set<Position> seen = new HashSet<>(); Set<position.Position> seen = new HashSet<>();
HashMap<Position,Position> firstMove = new HashMap<>(); HashMap<position.Position,position.Position> firstMove = new HashMap<>();
toVisit.addAll(next(position)); toVisit.addAll(next(position));
for(Position initialMove : toVisit) for(position.Position initialMove : toVisit)
firstMove.put(initialMove,initialMove); firstMove.put(initialMove,initialMove);
while(!toVisit.isEmpty()){ while(!toVisit.isEmpty()){
Position current = toVisit.poll(); position.Position current = toVisit.poll();
if(fires.contains(current)) if(fires.contains(current))
return firstMove.get(current); return firstMove.get(current);
for(Position adjacent : next(current)){ for(position.Position adjacent : next(current)){
if(seen.contains(adjacent)) continue; if(seen.contains(adjacent)) continue;
toVisit.add(adjacent); toVisit.add(adjacent);
seen.add(adjacent); seen.add(adjacent);
firstMove.put(adjacent, firstMove.get(current)); firstMove.put(adjacent, firstMove.get(current));
} }
} }
return position;
}
/* private Position tStepTowardFire(Position position){ }*/
Queue<Position> toVisit = new LinkedList<>();
Set<Position> seen = new HashSet<>(); /* private position.Position tStepTowardFire(position.Position position){
HashMap<Position,Position> firstMove = new HashMap<>(); Queue<position.Position> toVisit = new LinkedList<>();
Set<position.Position> seen = new HashSet<>();
HashMap<position.Position,position.Position> firstMove = new HashMap<>();
toVisit.addAll(nextTwo(position)); toVisit.addAll(nextTwo(position));
for(Position initialMove : toVisit) for(position.Position initialMove : toVisit)
firstMove.put(initialMove,initialMove); firstMove.put(initialMove,initialMove);
while(!toVisit.isEmpty()){ while(!toVisit.isEmpty()){
Position current = toVisit.poll(); position.Position current = toVisit.poll();
if(fires.contains(current)) if(fires.contains(current))
return firstMove.get(current); return firstMove.get(current);
for(Position adjacent : next(current)){ for(position.Position adjacent : next(current)){
if(seen.contains(adjacent)) continue; if(seen.contains(adjacent)) continue;
toVisit.add(adjacent); toVisit.add(adjacent);
seen.add(adjacent); seen.add(adjacent);
......
package position;
public record Position(int row , int col) { 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