diff --git a/.gradle/7.4/checksums/checksums.lock b/.gradle/7.4/checksums/checksums.lock index df54c1e0932a6aad9b35fe2f5781753d92dd27c2..7945266a5ab6080a184744726c20279bc02aff12 100644 Binary files a/.gradle/7.4/checksums/checksums.lock and b/.gradle/7.4/checksums/checksums.lock differ diff --git a/.gradle/7.4/checksums/md5-checksums.bin b/.gradle/7.4/checksums/md5-checksums.bin index 38740cef473d59e77cc7580e7c7e168c289010c2..9bbe785680011a2f8b23e87fc2121a38b13e522d 100644 Binary files a/.gradle/7.4/checksums/md5-checksums.bin and b/.gradle/7.4/checksums/md5-checksums.bin differ diff --git a/.gradle/7.4/checksums/sha1-checksums.bin b/.gradle/7.4/checksums/sha1-checksums.bin index 37d18a5f1d3ac5802ec2e11e6e2ee389d38eabe7..fea70b434ac82a5ac09a3066ba32ffa10504603f 100644 Binary files a/.gradle/7.4/checksums/sha1-checksums.bin and b/.gradle/7.4/checksums/sha1-checksums.bin differ diff --git a/.gradle/7.4/executionHistory/executionHistory.bin b/.gradle/7.4/executionHistory/executionHistory.bin index 8044f8db540d8ca16951815ac998f6158a86ba9c..379c05b56bf4592bad402191032e6a449f6f8730 100644 Binary files a/.gradle/7.4/executionHistory/executionHistory.bin and b/.gradle/7.4/executionHistory/executionHistory.bin differ diff --git a/.gradle/7.4/executionHistory/executionHistory.lock b/.gradle/7.4/executionHistory/executionHistory.lock index e57456dc4f9a187338a1af68d935fbf5cffe29da..80e8955e82d390b14df82ea4edcc8a752d441d75 100644 Binary files a/.gradle/7.4/executionHistory/executionHistory.lock and b/.gradle/7.4/executionHistory/executionHistory.lock differ diff --git a/.gradle/7.4/fileHashes/fileHashes.bin b/.gradle/7.4/fileHashes/fileHashes.bin index ac4d206fd6144671088bac4e8af72f9d24c99d8f..142907fc41e849b439843292be0e751c757d5320 100644 Binary files a/.gradle/7.4/fileHashes/fileHashes.bin and b/.gradle/7.4/fileHashes/fileHashes.bin differ diff --git a/.gradle/7.4/fileHashes/fileHashes.lock b/.gradle/7.4/fileHashes/fileHashes.lock index f382ced7e8f10e14ccd723be3c74dae1c97aa72b..377c088269107b126a7bee13fb74d2242b021620 100644 Binary files a/.gradle/7.4/fileHashes/fileHashes.lock and b/.gradle/7.4/fileHashes/fileHashes.lock differ diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index f7492f18c6ecf67db5af3279f7c8498953313f0a..4ec51350aa97f62b3460115e0baef1fe9e4bf6f6 100644 Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin index 22247e075c97d900294472751d70aa6810330c43..326d448f40e8f55068815749a26d8cf43687b3be 100644 Binary files a/.gradle/buildOutputCleanup/outputFiles.bin and b/.gradle/buildOutputCleanup/outputFiles.bin differ diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 659bf43190d1afbfe1907e2e5e2bd75ad761dfb3..fcb19bf381b237a36abc9a8ced69fdc6c5bcad7e 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="CompilerConfiguration"> - <bytecodeTargetLevel target="16" /> + <bytecodeTargetLevel target="18" /> </component> </project> \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index ba1ec5c7e20c12eb5b893684698eab151c4a8803..611e7c8ad7b91e576987485e8678b0fdad4193ae 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> + <component name="GradleMigrationSettings" migrationVersion="1" /> <component name="GradleSettings"> <option name="linkedExternalProjectsSettings"> <GradleProjectSettings> diff --git a/.idea/misc.xml b/.idea/misc.xml index 3db7abf849bb2eb6f6e84f40abd01c1aba9033b5..9cf8f20b616152fc0d31b04e72fa4895e7e92e02 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -4,7 +4,7 @@ <component name="FrameworkDetectionExcludesConfiguration"> <file type="web" url="file://$PROJECT_DIR$" /> </component> - <component name="ProjectRootManager" version="2" languageLevel="JDK_16" default="true" project-jdk-name="corretto-16" project-jdk-type="JavaSDK"> + <component name="ProjectRootManager" version="2" languageLevel="JDK_18" default="true" project-jdk-name="corretto-16" project-jdk-type="JavaSDK"> <output url="file://$PROJECT_DIR$/out" /> </component> </project> \ No newline at end of file diff --git a/src/main/java/Grid.java b/src/main/java/Grid.java index 23fb50d23d9ba0dd308def943a81d8fe898d40a9..0c522287853ee33182d1cc47f62c268bd1eb1b36 100644 --- a/src/main/java/Grid.java +++ b/src/main/java/Grid.java @@ -17,12 +17,12 @@ public class Grid extends Canvas{ setFocusTraversable(true); setOnMousePressed(this::mousePressed); model = new Model(this); - model.initialisation(3,8); + model.initialisation(3,1,2,1); } public void restart(MouseEvent mouseEvent){ model = new Model(this); - model.initialisation(3,6); + model.initialisation(3,6,0,2); getGraphicsContext2D().clearRect(0,0,width,height); repaint(); } @@ -51,6 +51,17 @@ public class Grid extends Canvas{ getGraphicsContext2D().setFill(Color.BLUE); getGraphicsContext2D().fillRect(row*height/rowCount,col*width/colCount,height/rowCount,width/colCount); } + public void paintCC(int row ,int col){ + getGraphicsContext2D().setFill(Color.GREEN); + getGraphicsContext2D().fillRect(row*height/rowCount,col*width/colCount,height/rowCount,width/colCount); + + } + + public void paintMF(int row ,int col){ + getGraphicsContext2D().setFill(Color.BLACK); + getGraphicsContext2D().fillRect(row*height/rowCount,col*width/colCount,height/rowCount,width/colCount); + + } public void paintFire(int row, int col) { getGraphicsContext2D().setFill(Color.RED); diff --git a/src/main/java/Model.java b/src/main/java/Model.java index f23d0d13c6a3e847962201dc7c72fd5dedc0a249..52d20ea9b762f37e32f3aefafae70ba3c222be84 100644 --- a/src/main/java/Model.java +++ b/src/main/java/Model.java @@ -1,12 +1,19 @@ import java.util.*; -public class Model { +public class Model { Grid grid; int colCount, rowCount; + MotoFighter motoFighter = new MotoFighter(); + List<Position>linefite=new ArrayList<>(); + List<Position> firefighters = new ArrayList<>(); + List<Position> clouds = new ArrayList<>(); Set<Position> fires = new HashSet<>(); List<Position> ffNewPositions; + List<Position> cNewPositions; + + int step = 0; public Model(Grid grid) { @@ -16,11 +23,16 @@ public class Model { } - public void initialisation(int fireNumber, int fireFighterNumber){ + public void initialisation(int fireNumber, int fireFighterNumber,int cloudNumber,int motoFighterNumber){ for(int index=0; index<fireNumber;index++) fires.add(randomPosition()); for(int index=0; index<fireFighterNumber;index++) firefighters.add(randomPosition()); + for(int index=0; index<cloudNumber;index++) + clouds.add(randomPosition()); + for(int index=0; index<motoFighterNumber;index++) + linefite.add(randomPosition()); + motoFighter.motofighter.add(randomPosition().row()); } private Position randomPosition() { @@ -28,22 +40,47 @@ public class Model { } + public void activation(){ ffNewPositions = new ArrayList<>(); for(Position ff : firefighters){ Position newPosition = activateFirefighter(ff); - grid.paint(ff.row,ff.col); - grid.paintFF(newPosition.row, newPosition.col); + grid.paint(ff.row(),ff.col()); + grid.paintFF(newPosition.row(), newPosition.col()); ffNewPositions.add(newPosition); } + + cNewPositions = new ArrayList<>(); + + for(Position cc : clouds){ + Position newPosition = activeCloud(cc); + grid.paint(cc.row(),cc.col()); + grid.paintCC(newPosition.row(), newPosition.col()); + cNewPositions.add(newPosition); + } + + /* for(Position mF : motofighter){ + Position newPosition = motoFighter.activateFighter(mF); + grid.paint(mF.row,mF.col); + grid.paintMF(newPosition.row, newPosition.col); + mfNewPositions.add(newPosition); + }*/ + firefighters = ffNewPositions; + + clouds = cNewPositions; + + motoFighter.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); + grid.paintFire(newFire.row(), newFire.col()); fires.addAll(newFires);} step++; @@ -54,6 +91,26 @@ public class Model { return next(position); } + private Position activeCloud(Position position){ + Position randomPosition=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; + + } + + /* private Position activateMotofighter(Position position) { + Position randomPosition = tStepTowardFire(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; + }*/ + private Position activateFirefighter(Position position) { @@ -68,17 +125,25 @@ public class Model { private void extinguish(Position position) { fires.remove(position); - grid.paint(position.row, position.col); + grid.paint(position.row(), position.col()); } 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)); + 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; } + /* private List<Position> nextTwo(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; + }*/ private Position aStepTowardFire(Position position){ Queue<Position> toVisit = new LinkedList<>(); @@ -101,5 +166,26 @@ public class Model { return position; } - public record Position(int row, int col){} + /* private Position tStepTowardFire(Position position){ + Queue<Position> toVisit = new LinkedList<>(); + Set<Position> seen = new HashSet<>(); + HashMap<Position,Position> firstMove = new HashMap<>(); + toVisit.addAll(nextTwo(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; + }*/ + + } \ No newline at end of file