diff --git a/.gradle/8.10.2/executionHistory/executionHistory.bin b/.gradle/8.10.2/executionHistory/executionHistory.bin index fdb4eeffcc87945fbb049d92ca05c3c10cf3c6b5..c2c1a8d7c31fc61d3bc769c5b59b9c1b73bf8111 100644 Binary files a/.gradle/8.10.2/executionHistory/executionHistory.bin and b/.gradle/8.10.2/executionHistory/executionHistory.bin differ diff --git a/.gradle/8.10.2/executionHistory/executionHistory.lock b/.gradle/8.10.2/executionHistory/executionHistory.lock index 41422f306b17568d7e6c1767886c73e5320db41b..747eec4f7100b3f5a1ba035749a032f07e14a96c 100644 Binary files a/.gradle/8.10.2/executionHistory/executionHistory.lock and b/.gradle/8.10.2/executionHistory/executionHistory.lock differ diff --git a/.gradle/8.10.2/fileHashes/fileHashes.bin b/.gradle/8.10.2/fileHashes/fileHashes.bin index 5cb4b01e4eccee19eba6934f31434286f145f7db..7a1ddb364a2d65bf861ef355db3a9b7dd8a041dd 100644 Binary files a/.gradle/8.10.2/fileHashes/fileHashes.bin and b/.gradle/8.10.2/fileHashes/fileHashes.bin differ diff --git a/.gradle/8.10.2/fileHashes/fileHashes.lock b/.gradle/8.10.2/fileHashes/fileHashes.lock index 3f1209eba2d344f756b5adde7102e707598993e4..7a739fb80125287ddcb20dca2b583a29cd2e4378 100644 Binary files a/.gradle/8.10.2/fileHashes/fileHashes.lock and b/.gradle/8.10.2/fileHashes/fileHashes.lock differ diff --git a/.gradle/8.10.2/fileHashes/resourceHashesCache.bin b/.gradle/8.10.2/fileHashes/resourceHashesCache.bin index 953dd5ee6e969ca039b09b633dfe0194aca17e2a..6a8f1f0b0d267adfae143b2e5a4dea5df9582a81 100644 Binary files a/.gradle/8.10.2/fileHashes/resourceHashesCache.bin and b/.gradle/8.10.2/fileHashes/resourceHashesCache.bin differ diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index a1da752f5fdc61814a5539ca32ff72919cf99d6f..0a67f955cb299cb61c8a86cdfd23471d339f7746 100644 Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe index d6ceb38bef8eeb41ce802c1b34c2aa5040e8e41a..792688fb82fda3818c7c298bd6b450d1187332ce 100644 Binary files a/.gradle/file-system.probe and b/.gradle/file-system.probe differ diff --git a/build/classes/java/main/controller/Controller.class b/build/classes/java/main/controller/Controller.class index b7d3429c3ee350a8620694ba61082c3e446107d4..e2208ff57eb1732291ab47e26e4e73038fd3ede1 100644 Binary files a/build/classes/java/main/controller/Controller.class and b/build/classes/java/main/controller/Controller.class differ diff --git a/build/classes/java/main/model/FFBoard$1.class b/build/classes/java/main/model/FFBoard$1.class deleted file mode 100644 index c370b5a0d5e656ef32aeb7f5b8f0f1eb4645e26d..0000000000000000000000000000000000000000 Binary files a/build/classes/java/main/model/FFBoard$1.class and /dev/null differ diff --git a/build/classes/java/main/model/FFBoard.class b/build/classes/java/main/model/FFBoard.class index ad0c95d59c5e8630cc51db54bf13ac68b169b64b..f57c1a9057f799b0def008417b2bd77d2256259d 100644 Binary files a/build/classes/java/main/model/FFBoard.class and b/build/classes/java/main/model/FFBoard.class differ diff --git a/build/classes/java/main/model/FFBoardData.class b/build/classes/java/main/model/FFBoardData.class index 0e467a4e9bbef0cbba7e215aac57aade8f493bb8..9f22a0e72eb02bd57d31319f61a8793d6e2ce0e7 100644 Binary files a/build/classes/java/main/model/FFBoardData.class and b/build/classes/java/main/model/FFBoardData.class differ diff --git a/build/classes/java/main/model/Fire.class b/build/classes/java/main/model/Fire.class index 013b6855f81a190fd85e71dcb3b9222701c790dc..c09a1b0fcfff85d7fbaaed635319ab41158e29ce 100644 Binary files a/build/classes/java/main/model/Fire.class and b/build/classes/java/main/model/Fire.class differ diff --git a/build/classes/java/main/model/FireBehavior.class b/build/classes/java/main/model/FireBehavior.class index bf58961506ebf58088dd2398e73002e4285e75a9..71db65cf608bac9073edb2e09e133d8c847f47f4 100644 Binary files a/build/classes/java/main/model/FireBehavior.class and b/build/classes/java/main/model/FireBehavior.class differ diff --git a/build/classes/java/main/model/StandardFirefighter.class b/build/classes/java/main/model/StandardFirefighter.class index acffa8ef60c78e01c7c9e845a463aa2e532d1539..addabbd7a7c7656d19c29e0ed6e8fec3bcecfeb9 100644 Binary files a/build/classes/java/main/model/StandardFirefighter.class and b/build/classes/java/main/model/StandardFirefighter.class differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Controller.class.uniqueId3 b/build/tmp/compileJava/compileTransaction/stash-dir/Controller.class.uniqueId3 deleted file mode 100644 index cf00614109212f6eb89b53189568778874c810a0..0000000000000000000000000000000000000000 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/Controller.class.uniqueId3 and /dev/null differ diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index e8816291e0944805667e492410d9cc7959533c67..ae916a368146158e57dab4511ee930cbb133e667 100644 Binary files a/build/tmp/compileJava/previous-compilation-data.bin and b/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java index 03c50c60d4e216bea0130ece38c151a484eff585..b6813ffe3f958a814654f7c931fb4a9953438e15 100644 --- a/src/main/java/controller/Controller.java +++ b/src/main/java/controller/Controller.java @@ -25,7 +25,25 @@ import java.util.List; import static java.util.Objects.requireNonNull; public class Controller { + public static String toString(ViewElement[][] matrice) { + StringBuilder sb = new StringBuilder(); + + for (int i = 0; i < matrice.length; i++) { + sb.append("[ "); + for (int j = 0; j < matrice[i].length; j++) { + sb.append(matrice[i][j].toString()); + if (j < matrice[i].length - 1) { + sb.append(", "); // Ajouter une virgule entre les éléments + } + } + sb.append(" ]"); + if (i < matrice.length - 1) { + sb.append("\n"); // Sauter une ligne entre les lignes de la matrice + } + } + return sb.toString(); + } public static final int PERIOD_IN_MILLISECONDS = 50; @FXML public Button restartButton; @@ -78,15 +96,19 @@ public class Controller { for(int row = 0; row < rowCount; row++) viewElements[row][column] = getViewElement(board.getState(new Position(row, column))); grid.repaint(viewElements); + System.out.println(toString(viewElements)); updateGenerationLabel(board.stepNumber()); } private ViewElement getViewElement(List<ModelElement> squareState) { + if (squareState.contains(ModelElement.FIRE)){ + return ViewElement.FIRE; + } if(squareState.contains(ModelElement.FIREFIGHTER)){ return ViewElement.FIREFIGHTER; } - if (squareState.contains(ModelElement.FIRE)){ - return ViewElement.FIRE; + if(squareState.contains(ModelElement.CLOUD)){ + return ViewElement.CLOUD; } if (squareState.contains(ModelElement.MOUNTAIN)){ return ViewElement.MOUNTAIN; diff --git a/src/main/java/model/Behavior.java b/src/main/java/model/Behavior.java index 577e2690804681c61d8e20545a1b5d66604a52db..d6e2a1b6031e3603656d741cb1ae53336351ec34 100644 --- a/src/main/java/model/Behavior.java +++ b/src/main/java/model/Behavior.java @@ -5,7 +5,7 @@ import util.Position; import java.util.List; public interface Behavior { - public List<Position> getNext(BoardData boarddata,List<Position>positions); + public List<Position> getNext(BoardData boardData); public default Boolean isLegalMove(){ return true; } diff --git a/src/main/java/model/Cloud.java b/src/main/java/model/Cloud.java new file mode 100644 index 0000000000000000000000000000000000000000..4afaa3d824f4b8edfae955e4cafeb719655f2dee --- /dev/null +++ b/src/main/java/model/Cloud.java @@ -0,0 +1,28 @@ +package model; + +import util.Position; +import util.TargetStrategy; + +import java.util.ArrayList; +import java.util.List; + +public class Cloud extends Element { + + public Cloud() { + super(ModelElement.CLOUD, + new CloudBehavior(ModelElement.CLOUD)); + } + + @Override + public List<Position> Update(BoardData boardData, List<Position> modifiedPositions) { + List<Position> cloudPositions=boardData.getPositions().get(type.ordinal()); + List<Position> newCloudPositions=behavior.getNext(boardData); + modifiedPositions.removeAll(cloudPositions); + modifiedPositions.addAll(cloudPositions); + modifiedPositions.removeAll(newCloudPositions); + modifiedPositions.addAll(newCloudPositions); + cloudPositions.clear(); + cloudPositions.addAll(newCloudPositions); + return modifiedPositions; + } +} diff --git a/src/main/java/model/CloudBehavior.java b/src/main/java/model/CloudBehavior.java new file mode 100644 index 0000000000000000000000000000000000000000..5efbc14edcf77685b579eab99609ec17ff10fbd6 --- /dev/null +++ b/src/main/java/model/CloudBehavior.java @@ -0,0 +1,47 @@ +package model; + +import util.Position; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class CloudBehavior implements RemoverBehavior<ModelElement> { + private ModelElement element; + private ModelElement removedElement=ModelElement.FIRE; + private Random random=new Random(); + public CloudBehavior(ModelElement modelElement) { + this.element=modelElement; + } + + @Override + public List<Position> getNext(BoardData boardData) { + List<Position> cloudPositions=boardData.getPositions().get(element.ordinal()); + List<Position> newCloudPositions=new ArrayList<>(); + for (Position cloudPosition:cloudPositions) { + List<Position> newPossibleCloudPosition=boardData.getNeighbors().get(cloudPosition); + Position newCloudPosition= newPossibleCloudPosition.get(random.nextInt(newPossibleCloudPosition.size())); + newCloudPositions.add(newCloudPosition); + remove(boardData,newCloudPosition); + } + return newCloudPositions; + } + + + @Override + public ModelElement getElementToRemove() { + return removedElement; + } + + @Override + public void removePartial(BoardData boardData,Position p) { + List<Position> firePositions = boardData.getPositions().get(getElementToRemove().ordinal()); + firePositions.remove(p); + } + + @Override + public List<Position> remove(BoardData boardData, Position p) { + removePartial(boardData,p); + return List.of(p); + } +} diff --git a/src/main/java/model/FFBoard.java b/src/main/java/model/FFBoard.java index a8fb054fc1311f07aebdc64bfca0550ee81f1f88..261e4b08f9f281536ef683701f8f54b23f8f8ddb 100644 --- a/src/main/java/model/FFBoard.java +++ b/src/main/java/model/FFBoard.java @@ -18,7 +18,7 @@ public class FFBoard implements Board<List<ModelElement>> { private final Random randomGenerator = new Random(); public FFBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount) { - boardData=new FFBoardData(); + boardData=new FFBoardData(columnCount,rowCount); FFUpdater=new FFUpdater(); this.columnCount = columnCount; this.rowCount = rowCount; @@ -42,9 +42,11 @@ public class FFBoard implements Board<List<ModelElement>> { public void initializeElements() { boardData.initialize(); - + FFUpdater= new FFUpdater(); for (int index = 0; index < initialFireCount; index++) boardData.getPositions().get(ModelElement.FIRE.ordinal()).add(randomPosition()); + //for (int index = 0; index < initialFireCount; index++) + //boardData.getPositions().get(ModelElement.CLOUD.ordinal()).add(randomPosition()); for (int index = 0; index < initialFirefighterCount; index++) boardData.getPositions().get(ModelElement.FIREFIGHTER.ordinal()).add(randomPosition()); } @@ -56,11 +58,15 @@ public class FFBoard implements Board<List<ModelElement>> { @Override public List<ModelElement> getState(Position position) { List<Position> firefighterPositions=boardData.getPositions().get(ModelElement.FIREFIGHTER.ordinal()); + List<Position> cloudPositions=boardData.getPositions().get(ModelElement.CLOUD.ordinal()); List<Position> firePositions =boardData.getPositions().get(ModelElement.FIRE.ordinal()); List<ModelElement> result = new ArrayList<>(); for (Position firefighterPosition : firefighterPositions) if (firefighterPosition.equals(position)) result.add(ModelElement.FIREFIGHTER); + for (Position cloudPosition : cloudPositions) + if (cloudPosition.equals(position)) + result.add(ModelElement.CLOUD); if (firePositions.contains(position)) result.add(ModelElement.FIRE); return result; @@ -81,6 +87,7 @@ public class FFBoard implements Board<List<ModelElement>> { modifiedPositions.addAll(updateFires()); boardData.setStep(boardData.getStep()+1); return modifiedPositions;*/ + List<Position> modifiedPositions = FFUpdater.updateAll(boardData); boardData.setStep(boardData.getStep()+1); return modifiedPositions; @@ -117,24 +124,17 @@ public class FFBoard implements Board<List<ModelElement>> { @Override public void reset() { - boardData.setStep(0); initializeElements(); } @Override public void setState(List<ModelElement> state, Position position) { - List<Position> firefighterPositions = boardData.getPositions().get(ModelElement.FIREFIGHTER.ordinal()); - List<Position> firePositions = boardData.getPositions().get(ModelElement.FIRE.ordinal()); - firePositions.remove(position); - for (; ; ) { - if (!firefighterPositions.remove(position)) break; + for (ModelElement e:state) { + boardData.getPositions().get(e.ordinal()).remove(position); } - for (ModelElement element : state) { - switch (element) { - case FIRE -> firePositions.add(position); - case FIREFIGHTER -> firefighterPositions.add(position); - } + for (ModelElement e:state) { + boardData.getPositions().get(e.ordinal()).add(position); } } } \ No newline at end of file diff --git a/src/main/java/model/FFBoardData.java b/src/main/java/model/FFBoardData.java index ae71a9320db857a03409070c421e36a8ace4b31b..65684d49cd95c08eadbe7037ac7f17d7916da1c0 100644 --- a/src/main/java/model/FFBoardData.java +++ b/src/main/java/model/FFBoardData.java @@ -6,14 +6,31 @@ import java.util.*; public class FFBoardData implements BoardData{ private List<List<Position>> positions; - private final Map<Position, List<Position>> neighbors = new HashMap<Position, List<Position>>(); + private Map<Position, List<Position>> neighbors = new HashMap<Position, List<Position>>(); private int step; + private int columnCount,rowCount; - public FFBoardData() { + public FFBoardData(int columnCount, int rowCount) { + this.columnCount=columnCount; + this.rowCount=rowCount; initialize(); } public void initialize(){ step=0; + neighbors = new HashMap<Position, List<Position>>(); + Position[][] ps = new Position[rowCount][columnCount]; + for (int column = 0; column < columnCount; column++) + for (int row = 0; row < rowCount; row++) + ps[row][column] = new Position(row, column); + for (int column = 0; column < columnCount; column++) + for (int row = 0; row < rowCount; row++) { + List<Position> list = new ArrayList<>(); + if (row > 0) list.add(ps[row - 1][column]); + if (column > 0) list.add(ps[row][column - 1]); + if (row < rowCount - 1) list.add(ps[row + 1][column]); + if (column < columnCount - 1) list.add(ps[row][column + 1]); + getNeighbors().put(ps[row][column], list); + } positions = new ArrayList<>(); for (int i = 0; i < ModelElement.values().length; i++) { positions.add(new ArrayList<>()); diff --git a/src/main/java/model/Fire.java b/src/main/java/model/Fire.java index 065250b9fd2cefaec6e3bf038b5ee6d2aeac02b5..21a665d5bb23a7a9df308908c85aa0370e466a99 100644 --- a/src/main/java/model/Fire.java +++ b/src/main/java/model/Fire.java @@ -16,8 +16,10 @@ public class Fire extends Element{ public List<Position> Update(BoardData boardData, List<Position> modifPositions) { List<Position> firePositions = boardData.getPositions().get(this.type.ordinal()); List<Position> modifiedPositions = new ArrayList<Position>(modifPositions); - List<Position> newFirePositions = behavior.getNext(boardData,firePositions); + List<Position> newFirePositions = behavior.getNext(boardData); + firePositions.removeAll(newFirePositions); firePositions.addAll(newFirePositions); + modifiedPositions.removeAll(newFirePositions); modifiedPositions.addAll(newFirePositions); return modifiedPositions; } diff --git a/src/main/java/model/FireBehavior.java b/src/main/java/model/FireBehavior.java index c9a3c7240f0b3f0f5821d82a00f31fb8d4da4f0f..dce1e0e7072ab8ec097c6071130032c5ed2884c9 100644 --- a/src/main/java/model/FireBehavior.java +++ b/src/main/java/model/FireBehavior.java @@ -13,13 +13,15 @@ public class FireBehavior extends FFBehavior { } @Override - public List<Position> getNext(BoardData boardData, List<Position> positions) { + public List<Position> getNext(BoardData boardData) { List<Position> firePositions = boardData.getPositions().get(element.ordinal()); List<Position> newFirePositions = new ArrayList<>(); if (boardData.getStep() % 2 == 0) { for (Position fire : firePositions) { - boardData.getNeighbors().get(fire).removeAll(newFirePositions); - newFirePositions.addAll(boardData.getNeighbors().get(fire)); + for (Position neighbor:boardData.getNeighbors().get(fire)) { + if (!newFirePositions.contains(neighbor)) + newFirePositions.add(neighbor); + } } } return newFirePositions; diff --git a/src/main/java/model/FirefighterBehavior.java b/src/main/java/model/FirefighterBehavior.java index 966a8049ce949ca98435a665b093f4fd85e13362..1c99215c0ef9717afc719af171426f2d8fe2e2c3 100644 --- a/src/main/java/model/FirefighterBehavior.java +++ b/src/main/java/model/FirefighterBehavior.java @@ -8,7 +8,6 @@ import java.util.List; import java.util.ListIterator; public class FirefighterBehavior extends FFBehavior implements TangibleBehavior<ModelElement>,RemoverBehavior<ModelElement> { - ModelElement element; List<ModelElement> obstacles=new ArrayList<>(List.of(ModelElement.MOUNTAIN)); ModelElement removedElement=ModelElement.FIRE; TargetStrategy targetStrategy=new TargetStrategy(); @@ -19,27 +18,26 @@ public class FirefighterBehavior extends FFBehavior implements TangibleBehavior< @Override - public List<Position> getNext(BoardData boardData, List<Position> modifiedPositions) { - List<Position> modifiedPosition = new ArrayList<>(); + public List<Position> getNext(BoardData boardData) { List<Position> firefighterPositions = boardData.getPositions().get(element.ordinal()); - List<Position> firePositions = boardData.getPositions().get(getElementToRemove().ordinal()); + List<Position> firePositions = new ArrayList<>(List.copyOf(boardData.getPositions().get(ModelElement.FIRE.ordinal()))); List<Position> firefighterNewPositions = new ArrayList<>(); for (Position firefighterPosition : firefighterPositions) { - Position newFirefighterPosition = - targetStrategy.neighborClosestToFire(firefighterPosition, - firePositions, boardData.getNeighbors()); + Position newFirefighterPosition = targetStrategy.neighborClosestToFire(firefighterPosition,firePositions, boardData.getNeighbors()); firefighterNewPositions.add(newFirefighterPosition); - remove(boardData,newFirefighterPosition); - modifiedPosition.add(firefighterPosition); - modifiedPosition.add(newFirefighterPosition); - List<Position> neighborFirePositions = boardData.getNeighbors().get(newFirefighterPosition).stream() - .filter(firePositions::contains).toList(); - for (Position firePosition : neighborFirePositions) - remove(boardData,firePosition); - modifiedPosition.addAll(neighborFirePositions); + firePositions.remove(newFirefighterPosition); + firePositions.remove(boardData.getNeighbors().get(newFirefighterPosition)); } - firefighterPositions = firefighterNewPositions; - return modifiedPosition; + return firefighterNewPositions; + } + public List<Position> remove(BoardData boardData,Position p){ + List<Position> firePositions = boardData.getPositions().get(getElementToRemove().ordinal()); + List<Position> neighborFirePositions = boardData.getNeighbors().get(p).stream() + .filter(firePositions::contains).toList(); + removePartial(boardData,p); + for (Position firePosition : neighborFirePositions) + removePartial(boardData,firePosition); + return neighborFirePositions; } @Override @@ -53,7 +51,7 @@ public class FirefighterBehavior extends FFBehavior implements TangibleBehavior< } @Override - public void remove(BoardData boardData,Position p) { + public void removePartial(BoardData boardData,Position p) { List<Position> firePositions = boardData.getPositions().get(getElementToRemove().ordinal()); firePositions.remove(p); } diff --git a/src/main/java/model/ModelElement.java b/src/main/java/model/ModelElement.java index 6fa3031b0463f8c9f663ed8e8ac3d13eeac4cfdb..cb200e5f0412f99ef80ab8f5ef5ecc280966565c 100644 --- a/src/main/java/model/ModelElement.java +++ b/src/main/java/model/ModelElement.java @@ -5,6 +5,7 @@ import java.lang.reflect.InvocationTargetException; public enum ModelElement { FIREFIGHTER(StandardFirefighter.class), FIRE(Fire.class), + CLOUD(Cloud.class), MOUNTAIN(Mountain.class); public final Class<?> c; diff --git a/src/main/java/model/NoBehavior.java b/src/main/java/model/NoBehavior.java index 025014a74a8de024a1c01e9bead71fb264effed5..dcc3b7df06204aaea7439f0c9e8245013b64671e 100644 --- a/src/main/java/model/NoBehavior.java +++ b/src/main/java/model/NoBehavior.java @@ -12,8 +12,7 @@ public class NoBehavior extends FFBehavior { } @Override - public List<Position> getNext(BoardData boardData, List<Position> positions) { - return positions; + public List<Position> getNext(BoardData boardData) { + return null; } - } diff --git a/src/main/java/model/RemoverBehavior.java b/src/main/java/model/RemoverBehavior.java index bb5b87fd3ba270a185a49ed9b0fdbab9b78c9415..d148013dc74ebaf511fdab021964d5ce5d6a32a0 100644 --- a/src/main/java/model/RemoverBehavior.java +++ b/src/main/java/model/RemoverBehavior.java @@ -5,6 +5,8 @@ import util.Position; import java.util.List; public interface RemoverBehavior<E> extends Behavior { - public void remove(BoardData boardData,Position p); + public void removePartial(BoardData boardData,Position p); + public List<Position> remove(BoardData boardData,Position p); + public E getElementToRemove(); } diff --git a/src/main/java/model/StandardFirefighter.java b/src/main/java/model/StandardFirefighter.java index f60f5abe8265f82b97bcd75ac18d37b1abd6ea6b..82ef1e6430b91d818f264764e8bb3e074c99c36d 100644 --- a/src/main/java/model/StandardFirefighter.java +++ b/src/main/java/model/StandardFirefighter.java @@ -26,23 +26,19 @@ public class StandardFirefighter extends Element { firePositions.addAll(modifiedList); return modifiedList;*/ List<Position> firefighterPositions = boardData.getPositions().get(type.ordinal()); - List<Position> firePositions = boardData.getPositions().get(ModelElement.FIRE.ordinal()); - List<Position> firefighterNewPositions = new ArrayList<>(); - for (Position firefighterPosition : firefighterPositions) { - Position newFirefighterPosition = - targetStrategy.neighborClosestToFire(firefighterPosition, - firePositions, boardData.getNeighbors()); - firefighterNewPositions.add(newFirefighterPosition); - remove(boardData,newFirefighterPosition); - modifiedPositions.add(firefighterPosition); - modifiedPositions.add(newFirefighterPosition); - List<Position> neighborFirePositions = boardData.getNeighbors().get(newFirefighterPosition).stream() - .filter(firePositions::contains).toList(); - for (Position firePosition : neighborFirePositions) - remove(boardData,firePosition); - modifiedPositions.addAll(neighborFirePositions); + List<Position> firefighterNewPositions = behavior.getNext(boardData); + List<Position> neighborFirePositions = new ArrayList<>(); + + modifiedPositions.removeAll(firefighterPositions); + modifiedPositions.removeAll(firefighterNewPositions); + modifiedPositions.addAll(firefighterPositions); + modifiedPositions.addAll(firefighterNewPositions); + for (Position p :firefighterNewPositions) { + neighborFirePositions.addAll(((RemoverBehavior)behavior).remove(boardData,p)); } - firefighterPositions = firefighterNewPositions; + modifiedPositions.removeAll(neighborFirePositions); + modifiedPositions.addAll(neighborFirePositions); + boardData.getPositions().set(type.ordinal(),firefighterNewPositions); return modifiedPositions; } diff --git a/src/main/java/view/ViewElement.java b/src/main/java/view/ViewElement.java index d379d8029f87dc1c9a409f24f5f49092b9c146c7..4695ecd5fd6bcd79e72f68ebedcea869d944c5af 100644 --- a/src/main/java/view/ViewElement.java +++ b/src/main/java/view/ViewElement.java @@ -3,7 +3,7 @@ package view; import javafx.scene.paint.Color; public enum ViewElement { - FIREFIGHTER(Color.BLUE), FIRE(Color.RED),MOUNTAIN(Color.BROWN) , EMPTY(Color.WHITE); + FIREFIGHTER(Color.BLUE), FIRE(Color.RED),CLOUD(Color.GRAY) ,MOUNTAIN(Color.BROWN) , EMPTY(Color.WHITE); final Color color; ViewElement(Color color) { this.color = color;