diff --git a/.gradle/8.10.2/executionHistory/executionHistory.bin b/.gradle/8.10.2/executionHistory/executionHistory.bin index c2c1a8d7c31fc61d3bc769c5b59b9c1b73bf8111..3d10d841a99272782ddf282c4b0b29cb55371420 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 747eec4f7100b3f5a1ba035749a032f07e14a96c..d462db45c4d7c86d8dede5dd9486e44dd8f78e98 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 7a1ddb364a2d65bf861ef355db3a9b7dd8a041dd..3e8d4326b4822a700794d3a64e23eb54f2571c57 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 7a739fb80125287ddcb20dca2b583a29cd2e4378..db77305cf79235e825e81164a24609e0e6a27510 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 6a8f1f0b0d267adfae143b2e5a4dea5df9582a81..edb634cebcfa9c75ef210f68711974592d3302de 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 0a67f955cb299cb61c8a86cdfd23471d339f7746..97aa507909944c5e6a8483e7ca506d18bff5e745 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 792688fb82fda3818c7c298bd6b450d1187332ce..03c0d8421f990ae962b0bc7ae603ecef67a88649 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 e2208ff57eb1732291ab47e26e4e73038fd3ede1..6a04f4e1dcb90af98351b81bb8c0a5fe71e3561a 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/Behavior.class b/build/classes/java/main/model/Behavior.class index c897b796de06d6cd168542456f55c6b6c5c870e3..d86121cbe423c6d1029c44d360bbf96c1d64988d 100644 Binary files a/build/classes/java/main/model/Behavior.class and b/build/classes/java/main/model/Behavior.class differ diff --git a/build/classes/java/main/model/Cloud.class b/build/classes/java/main/model/Cloud.class new file mode 100644 index 0000000000000000000000000000000000000000..156cea833bbe8aa84054ee652a14bcc4cb4dd6af Binary files /dev/null and b/build/classes/java/main/model/Cloud.class differ diff --git a/build/classes/java/main/model/CloudBehavior.class b/build/classes/java/main/model/CloudBehavior.class new file mode 100644 index 0000000000000000000000000000000000000000..1abcacc1dbe2ee98e7ace5ae399d9f2cc8a1f621 Binary files /dev/null and b/build/classes/java/main/model/CloudBehavior.class differ diff --git a/build/classes/java/main/model/FFBoard.class b/build/classes/java/main/model/FFBoard.class index f57c1a9057f799b0def008417b2bd77d2256259d..36e503aaff8943f07c8ce851dbb75ec7b49a47fd 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/FirefighterBehavior.class b/build/classes/java/main/model/FirefighterBehavior.class index 172fa9bf5ea653a0aab02f70a8f0018ef474b98d..4fe3de1c4aa61d2e8673433518ea2ca897113584 100644 Binary files a/build/classes/java/main/model/FirefighterBehavior.class and b/build/classes/java/main/model/FirefighterBehavior.class differ diff --git a/build/classes/java/main/model/Mountain.class b/build/classes/java/main/model/Mountain.class new file mode 100644 index 0000000000000000000000000000000000000000..d03d1d321fde0d670495882678f21db6b4ca2e15 Binary files /dev/null and b/build/classes/java/main/model/Mountain.class differ diff --git a/build/classes/java/main/model/NoBehavior.class b/build/classes/java/main/model/NoBehavior.class new file mode 100644 index 0000000000000000000000000000000000000000..e135fb71734fca1d064d5780df7d8300728f0d2e Binary files /dev/null and b/build/classes/java/main/model/NoBehavior.class differ diff --git a/build/classes/java/main/model/RemoverBehavior.class b/build/classes/java/main/model/RemoverBehavior.class new file mode 100644 index 0000000000000000000000000000000000000000..2e8e64a409aef234ab281df7163aa7559ce659e0 Binary files /dev/null and b/build/classes/java/main/model/RemoverBehavior.class differ diff --git a/build/classes/java/main/util/TargetStrategy.class b/build/classes/java/main/util/TargetStrategy.class new file mode 100644 index 0000000000000000000000000000000000000000..91ebbd6ca418ec914ccf852cf42b85aa1df23be1 Binary files /dev/null and b/build/classes/java/main/util/TargetStrategy.class differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Cloud.class.uniqueId0 b/build/tmp/compileJava/compileTransaction/stash-dir/Cloud.class.uniqueId0 new file mode 100644 index 0000000000000000000000000000000000000000..156cea833bbe8aa84054ee652a14bcc4cb4dd6af Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/Cloud.class.uniqueId0 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/CloudBehavior.class.uniqueId1 b/build/tmp/compileJava/compileTransaction/stash-dir/CloudBehavior.class.uniqueId1 new file mode 100644 index 0000000000000000000000000000000000000000..3ad38aa3bff7463d78172a67ea3690988776ca78 Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/CloudBehavior.class.uniqueId1 differ diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index ae916a368146158e57dab4511ee930cbb133e667..adfdf01ff14dd739f86daea19c6ec049490b0f9f 100644 Binary files a/build/tmp/compileJava/previous-compilation-data.bin and b/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/model(complex).png b/model(complex).png new file mode 100644 index 0000000000000000000000000000000000000000..e328c4a535f8f0dcaee76c2c38c934a55c35a55c Binary files /dev/null and b/model(complex).png differ diff --git a/model(simple).png b/model(simple).png new file mode 100644 index 0000000000000000000000000000000000000000..68f7e8dce0727b2d67d8dc89b4cfe366d4ac9201 Binary files /dev/null and b/model(simple).png differ diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java index b6813ffe3f958a814654f7c931fb4a9953438e15..ed7b402790efacbd667f72231d2da851095f4621 100644 --- a/src/main/java/controller/Controller.java +++ b/src/main/java/controller/Controller.java @@ -96,22 +96,14 @@ 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.CLOUD)){ - return ViewElement.CLOUD; - } - if (squareState.contains(ModelElement.MOUNTAIN)){ - return ViewElement.MOUNTAIN; + for (ModelElement element:ModelElement.values()) { + if (squareState.contains(element)){ + return ViewElement.values()[element.ordinal()]; + } } return ViewElement.EMPTY; } diff --git a/src/main/java/model/Behavior.java b/src/main/java/model/Behavior.java index d6e2a1b6031e3603656d741cb1ae53336351ec34..3e5c114d47d48d52f59228ea86b0ba1e53ca5068 100644 --- a/src/main/java/model/Behavior.java +++ b/src/main/java/model/Behavior.java @@ -3,10 +3,9 @@ package model; import util.Position; import java.util.List; +import java.util.Map; public interface Behavior { public List<Position> getNext(BoardData boardData); - public default Boolean isLegalMove(){ - return true; - } -} + public Map<Position,List<Position>> legalNeighbors(BoardData boardData); +} \ No newline at end of file diff --git a/src/main/java/model/CloudBehavior.java b/src/main/java/model/CloudBehavior.java index 5efbc14edcf77685b579eab99609ec17ff10fbd6..44636179318b1351c678d13f4b471b872cb109d1 100644 --- a/src/main/java/model/CloudBehavior.java +++ b/src/main/java/model/CloudBehavior.java @@ -6,12 +6,11 @@ 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 class CloudBehavior extends FFBehavior implements RemoverBehavior<ModelElement> { + private final ModelElement removedElement=ModelElement.FIRE; + private final Random random=new Random(); public CloudBehavior(ModelElement modelElement) { - this.element=modelElement; + super(ModelElement.CLOUD); } @Override diff --git a/src/main/java/model/FFBehavior.java b/src/main/java/model/FFBehavior.java index 90d3d7c8bf6a60b3c2d6b07d649ebe4f363dd39f..d8abbdf1c7949e25e89e243b03e2be34af33f0db 100644 --- a/src/main/java/model/FFBehavior.java +++ b/src/main/java/model/FFBehavior.java @@ -1,11 +1,24 @@ package model; +import util.Position; + import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; public abstract class FFBehavior implements Behavior { public ModelElement element; public FFBehavior(ModelElement element) { this.element = element; } -} + + @Override + public Map<Position, List<Position>> legalNeighbors(BoardData boardData) { + Map<Position,List<Position>> neighbors=new HashMap<>(); + for (Map.Entry<Position,List<Position>> entry: boardData.getNeighbors().entrySet()) { + neighbors.put(entry.getKey(),new ArrayList<Position>(List.copyOf(entry.getValue()))); + } + return neighbors; + } +} \ No newline at end of file diff --git a/src/main/java/model/FFBoard.java b/src/main/java/model/FFBoard.java index 261e4b08f9f281536ef683701f8f54b23f8f8ddb..5f143a5bab00577b83a0d40fabb4c8149337d157 100644 --- a/src/main/java/model/FFBoard.java +++ b/src/main/java/model/FFBoard.java @@ -45,10 +45,13 @@ public class FFBoard implements Board<List<ModelElement>> { 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++) + for (int index = 0; index < initialFirefighterCount; index++) boardData.getPositions().get(ModelElement.FIREFIGHTER.ordinal()).add(randomPosition()); + for (int index = 0; index < 10; index++) + boardData.getPositions().get(ModelElement.CLOUD.ordinal()).add(randomPosition()); + for (int index = 0; index < 50; index++) + boardData.getPositions().get(ModelElement.MOUNTAIN.ordinal()).add(randomPosition()); + } private Position randomPosition() { @@ -57,18 +60,12 @@ 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); + for (ModelElement e:ModelElement.values()) { + for (Position p : boardData.getPositions().get(e.ordinal())) + if (p.equals(position)) + result.add(e); + } return result; } @@ -83,10 +80,6 @@ public class FFBoard implements Board<List<ModelElement>> { } public List<Position> updateToNextGeneration() { - /*List<Position> modifiedPositions = updateFirefighters(); - modifiedPositions.addAll(updateFires()); - boardData.setStep(boardData.getStep()+1); - return modifiedPositions;*/ List<Position> modifiedPositions = FFUpdater.updateAll(boardData); boardData.setStep(boardData.getStep()+1); @@ -99,8 +92,8 @@ public class FFBoard implements Board<List<ModelElement>> { return boardData.getStep(); } - private List<Position> updateFirefighters() { - List<Position> modifiedPosition = new ArrayList<>();/* + /*private List<Position> updateFirefighters() { + List<Position> modifiedPosition = new ArrayList<>(); List<Position> firefighterPositions = boardData.getPositions().get(ModelElement.FIREFIGHTER.ordinal()); List<Position> firePositions = boardData.getPositions().get(ModelElement.FIRE.ordinal()); List<Position> firefighterNewPositions = new ArrayList<>(); @@ -118,9 +111,9 @@ public class FFBoard implements Board<List<ModelElement>> { extinguish(firePosition); modifiedPosition.addAll(neighborFirePositions); } - firefighterPositions = firefighterNewPositions;*/ + firefighterPositions = firefighterNewPositions; return modifiedPosition; - } + }*/ @Override public void reset() { @@ -130,7 +123,7 @@ public class FFBoard implements Board<List<ModelElement>> { @Override public void setState(List<ModelElement> state, Position position) { - for (ModelElement e:state) { + for (ModelElement e:ModelElement.values()) { boardData.getPositions().get(e.ordinal()).remove(position); } for (ModelElement e:state) { diff --git a/src/main/java/model/FFUpdater.java b/src/main/java/model/FFUpdater.java index 8710d56ade74658b18644eab181fd9cc4f95064f..7760f02d35b84da4b3c7ed50fac246352c8436d5 100644 --- a/src/main/java/model/FFUpdater.java +++ b/src/main/java/model/FFUpdater.java @@ -20,7 +20,6 @@ public class FFUpdater implements Updater { List<Position> modifiedList=new ArrayList<Position>(); for (int i = 0; i < ModelElement.values().length; i++) { modifiedList=this.elements[i].Update(boardData,modifiedList); - System.out.println(modifiedList.toString()); } return modifiedList; } diff --git a/src/main/java/model/FireBehavior.java b/src/main/java/model/FireBehavior.java index dce1e0e7072ab8ec097c6071130032c5ed2884c9..2fe93b5b4b149551abde263395926b9b430a790b 100644 --- a/src/main/java/model/FireBehavior.java +++ b/src/main/java/model/FireBehavior.java @@ -4,9 +4,10 @@ import util.Position; import java.util.ArrayList; import java.util.List; +import java.util.Map; -public class FireBehavior extends FFBehavior { - +public class FireBehavior extends FFBehavior implements TangibleBehavior<ModelElement> { + private List<ModelElement> obstacles=List.of(ModelElement.MOUNTAIN); public FireBehavior(ModelElement element) { super(element); @@ -18,7 +19,7 @@ public class FireBehavior extends FFBehavior { List<Position> newFirePositions = new ArrayList<>(); if (boardData.getStep() % 2 == 0) { for (Position fire : firePositions) { - for (Position neighbor:boardData.getNeighbors().get(fire)) { + for (Position neighbor:legalNeighbors(boardData).get(fire)) { if (!newFirePositions.contains(neighbor)) newFirePositions.add(neighbor); } @@ -26,4 +27,20 @@ public class FireBehavior extends FFBehavior { } return newFirePositions; } + + @Override + public List<ModelElement> getObstacles() { + return obstacles; + } + + @Override + public Map<Position, List<Position>> legalNeighbors(BoardData boardData) { + Map<Position,List<Position>> neigbors= super.legalNeighbors(boardData); + for (Map.Entry<Position,List<Position>> entry: neigbors.entrySet()) { + for (ModelElement e:getObstacles()) { + entry.getValue().removeAll(boardData.getPositions().get(e.ordinal())); + } + } + return neigbors; + } } diff --git a/src/main/java/model/FirefighterBehavior.java b/src/main/java/model/FirefighterBehavior.java index 1c99215c0ef9717afc719af171426f2d8fe2e2c3..ca3fe1a519dc11e899a0487fbdd801a280880886 100644 --- a/src/main/java/model/FirefighterBehavior.java +++ b/src/main/java/model/FirefighterBehavior.java @@ -3,12 +3,10 @@ package model; import util.Position; import util.TargetStrategy; -import java.util.ArrayList; -import java.util.List; -import java.util.ListIterator; +import java.util.*; public class FirefighterBehavior extends FFBehavior implements TangibleBehavior<ModelElement>,RemoverBehavior<ModelElement> { - List<ModelElement> obstacles=new ArrayList<>(List.of(ModelElement.MOUNTAIN)); + List<ModelElement> obstacles=List.of(ModelElement.MOUNTAIN); ModelElement removedElement=ModelElement.FIRE; TargetStrategy targetStrategy=new TargetStrategy(); @@ -22,8 +20,9 @@ public class FirefighterBehavior extends FFBehavior implements TangibleBehavior< List<Position> firefighterPositions = boardData.getPositions().get(element.ordinal()); List<Position> firePositions = new ArrayList<>(List.copyOf(boardData.getPositions().get(ModelElement.FIRE.ordinal()))); List<Position> firefighterNewPositions = new ArrayList<>(); + Map<Position,List<Position>> neigbours=legalNeighbors(boardData); for (Position firefighterPosition : firefighterPositions) { - Position newFirefighterPosition = targetStrategy.neighborClosestToFire(firefighterPosition,firePositions, boardData.getNeighbors()); + Position newFirefighterPosition = targetStrategy.neighborClosestToFire(firefighterPosition,firePositions, neigbours); firefighterNewPositions.add(newFirefighterPosition); firePositions.remove(newFirefighterPosition); firePositions.remove(boardData.getNeighbors().get(newFirefighterPosition)); @@ -40,10 +39,6 @@ public class FirefighterBehavior extends FFBehavior implements TangibleBehavior< return neighborFirePositions; } - @Override - public Boolean isLegalMove() { - return super.isLegalMove(); - } @Override public List<ModelElement> getObstacles() { @@ -56,6 +51,17 @@ public class FirefighterBehavior extends FFBehavior implements TangibleBehavior< firePositions.remove(p); } + @Override + public Map<Position, List<Position>> legalNeighbors(BoardData boardData) { + Map<Position,List<Position>> neigbours= Map.copyOf(super.legalNeighbors(boardData)); + for (Map.Entry<Position,List<Position>> entry: neigbours.entrySet()) { + for (ModelElement e:getObstacles()) { + entry.getValue().removeAll(boardData.getPositions().get(e.ordinal())); + } + } + return neigbours; + } + @Override public ModelElement getElementToRemove() { return removedElement; diff --git a/src/main/java/model/ModelElement.java b/src/main/java/model/ModelElement.java index cb200e5f0412f99ef80ab8f5ef5ecc280966565c..3b1ee918593447f552b5ef951020e1f0ac2c44da 100644 --- a/src/main/java/model/ModelElement.java +++ b/src/main/java/model/ModelElement.java @@ -3,6 +3,8 @@ package model; import java.lang.reflect.InvocationTargetException; public enum ModelElement { + + FIREFIGHTER(StandardFirefighter.class), FIRE(Fire.class), CLOUD(Cloud.class), diff --git a/src/main/java/model/RemoverBehavior.java b/src/main/java/model/RemoverBehavior.java index d148013dc74ebaf511fdab021964d5ce5d6a32a0..0c3e3c2a417138a5d67a3b9aee027a4dee92cb74 100644 --- a/src/main/java/model/RemoverBehavior.java +++ b/src/main/java/model/RemoverBehavior.java @@ -7,6 +7,5 @@ import java.util.List; public interface RemoverBehavior<E> extends Behavior { 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 82ef1e6430b91d818f264764e8bb3e074c99c36d..86855259ed4d067a3e93df17df02483770fb9c48 100644 --- a/src/main/java/model/StandardFirefighter.java +++ b/src/main/java/model/StandardFirefighter.java @@ -17,14 +17,6 @@ public class StandardFirefighter extends Element { @Override public List<Position> Update(BoardData boardData, List<Position> modifiedPositions) { - /* - List<Position> firefighterPositions = boardData.getPositions().get(ModelElement.FIREFIGHTER.ordinal()); - List<Position> firePositions = boardData.getPositions().get(ModelElement.FIRE.ordinal()); - modifiedList =behavior.getNext(boardData,modifiedList); - firePositions.removeAll(modifiedList); - firefighterPositions.removeAll(modifiedList); - firePositions.addAll(modifiedList); - return modifiedList;*/ List<Position> firefighterPositions = boardData.getPositions().get(type.ordinal()); List<Position> firefighterNewPositions = behavior.getNext(boardData); List<Position> neighborFirePositions = new ArrayList<>(); diff --git a/src/main/java/model/TangibleBehavior.java b/src/main/java/model/TangibleBehavior.java index 7abcfbf0906602690c21eb42a045ed7ae8d0a5ea..73aba905b5cf7a5bae2323b449ca7e01978a89cf 100644 --- a/src/main/java/model/TangibleBehavior.java +++ b/src/main/java/model/TangibleBehavior.java @@ -1,7 +1,10 @@ package model; +import util.Position; + import java.util.List; public interface TangibleBehavior<E> extends Behavior { public List<E> getObstacles(); + }