diff --git a/.gradle/8.10.2/executionHistory/executionHistory.bin b/.gradle/8.10.2/executionHistory/executionHistory.bin index cf5a960ec7f7900010aea5be45e24718226af6e2..f6264f83d26b9805dd698461c9d850c5885e0876 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 f5e032ebd2785801b772397c831686017a8244f6..ea447a5c4ad764b00e95092aa5b3df0a48803d12 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 c148c1bc29cdedc846b72a678f760346fa875247..885ac781984bacc0a039b609b3999b6becef5489 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 f1ae7c3e5b7a9eb9afc3412e20c7cf3dec627541..4e33d30c25f2393247a13632145ba2582b44b3f9 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 14b6a2674e4806a02c0138c38bdae8b4aff3b145..887d9133bceb30ddce1ed7881efde9664b04bd65 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 99d6f908f0717a5a58f2fdbb18137440bea75e64..9ea26fd05e8268051b9ef9db3e21df482cf83307 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 140230ec6b331e08f23b455dfe2ec91081f6cea2..ef0277adcabaa569125da33fe27b05b0df4d0427 100644 Binary files a/.gradle/file-system.probe and b/.gradle/file-system.probe differ diff --git a/build/classes/java/main/model/BoardData.class b/build/classes/java/main/model/BoardData.class index 1473192238ebff191ff33a083801c7c099c24bc6..07eb07f10a711f6f8ef0f19cf60c4172975d4ba7 100644 Binary files a/build/classes/java/main/model/BoardData.class and b/build/classes/java/main/model/BoardData.class differ diff --git a/build/classes/java/main/model/Cloud.class b/build/classes/java/main/model/Cloud.class index 06e95edf3b33b161168864be8ffffba74857967f..8abe5c73fad43333b2acc6717f97fb586a2837cf 100644 Binary files a/build/classes/java/main/model/Cloud.class and b/build/classes/java/main/model/Cloud.class differ diff --git a/build/classes/java/main/model/Element.class b/build/classes/java/main/model/Element.class index 86796ebda7b006c90771da8c76c0f4b5e8ec76c5..8e2eb1350365848b15dcaf78c2b55cde5c7ddfb1 100644 Binary files a/build/classes/java/main/model/Element.class and b/build/classes/java/main/model/Element.class differ diff --git a/build/classes/java/main/model/ElementFactory.class b/build/classes/java/main/model/ElementFactory.class index 1b7fa6bcc30af5a9bcdb5ceb5a1fbb1348f69532..1bd421ef615c9e45a152c2d4978560b948f63951 100644 Binary files a/build/classes/java/main/model/ElementFactory.class and b/build/classes/java/main/model/ElementFactory.class differ diff --git a/build/classes/java/main/model/FFBoard.class b/build/classes/java/main/model/FFBoard.class index 0f2a7b7e07aa8a014a7734a4fdc2d26a98d31397..88e8dad177692b2b612535247661c3c9569e5824 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 91b496a7e3f5a2c2f110a80343fd16e16ddb31a9..4483f542bcd15ccbb57cf01f6a013a227d435dcd 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/FFUpdater.class b/build/classes/java/main/model/FFUpdater.class index cb3fcfe29e1991cf939f4dbdd623cb7555b7e7e3..3e585d7404d70b661e216810cc914f7a9c8d105b 100644 Binary files a/build/classes/java/main/model/FFUpdater.class and b/build/classes/java/main/model/FFUpdater.class differ diff --git a/build/classes/java/main/model/FFboardFiller.class b/build/classes/java/main/model/FFboardFiller.class new file mode 100644 index 0000000000000000000000000000000000000000..823516ccceb333663f42a9f493b95ff07bf5d14e Binary files /dev/null and b/build/classes/java/main/model/FFboardFiller.class differ diff --git a/build/classes/java/main/model/Fire.class b/build/classes/java/main/model/Fire.class index adc931bcb0f5300d061e968519e0c2d97c2a4676..360986a08a7cb0be7450bcd306c3e8e7a6573fd0 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 86c2daaaf647a93a3f70c5472da3ed461ca3810b..319534dc2c14b6a6c143d71d7a0211911b945a3b 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/FireFactory.class b/build/classes/java/main/model/FireFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..815e81bb9b9ce8b3b04724e69b9468342e16ba1c Binary files /dev/null and b/build/classes/java/main/model/FireFactory.class differ diff --git a/build/classes/java/main/model/FireFighter.class b/build/classes/java/main/model/FireFighter.class index 58f6f0535b52686f36a7fb60fddc8df9a1077855..1e2297e2ca73c58649903e7346f5ad3fa4f6f0b8 100644 Binary files a/build/classes/java/main/model/FireFighter.class and b/build/classes/java/main/model/FireFighter.class differ diff --git a/build/classes/java/main/model/FirefighterBehavior.class b/build/classes/java/main/model/FirefighterBehavior.class index da533f51f0f2dbfa4e9c02edd044965785859d50..704bf8be9a867e3fc60307903f234a7a3fffa56d 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/Land.class b/build/classes/java/main/model/Land.class new file mode 100644 index 0000000000000000000000000000000000000000..cc196ad2cb290b7506aebcb8074e7378df7e0631 Binary files /dev/null and b/build/classes/java/main/model/Land.class differ diff --git a/build/classes/java/main/model/TangibleBehavior.class b/build/classes/java/main/model/TangibleBehavior.class index 073a9b1484d16129dace3fae3e881f17e3cfa1a1..02e1e1bca2906667c62dbe82da8609e9e78ddf6a 100644 Binary files a/build/classes/java/main/model/TangibleBehavior.class and b/build/classes/java/main/model/TangibleBehavior.class differ diff --git a/build/classes/java/main/model/ZoneDependent.class b/build/classes/java/main/model/ZoneDependent.class new file mode 100644 index 0000000000000000000000000000000000000000..2aae31c665e51fc937c9336a7923a3127d04148b Binary files /dev/null and b/build/classes/java/main/model/ZoneDependent.class differ diff --git a/build/classes/java/main/view/ViewElement.class b/build/classes/java/main/view/ViewElement.class index 4fb4b9ad28e188f1cc2416bd319836c60f879e8c..1e3f14e9413c7d72ffe3178a764deb88ed309051 100644 Binary files a/build/classes/java/main/view/ViewElement.class and b/build/classes/java/main/view/ViewElement.class 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..b82fcd18821403a9d9289b8aa19200fd231f8b71 Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/CloudBehavior.class.uniqueId1 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Fire.class.uniqueId7 b/build/tmp/compileJava/compileTransaction/stash-dir/Fire.class.uniqueId7 new file mode 100644 index 0000000000000000000000000000000000000000..360986a08a7cb0be7450bcd306c3e8e7a6573fd0 Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/Fire.class.uniqueId7 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/FireFighterBehavior.class.uniqueId8 b/build/tmp/compileJava/compileTransaction/stash-dir/FireFighterBehavior.class.uniqueId8 new file mode 100644 index 0000000000000000000000000000000000000000..704bf8be9a867e3fc60307903f234a7a3fffa56d Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/FireFighterBehavior.class.uniqueId8 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/SlowFire.class.uniqueId0 b/build/tmp/compileJava/compileTransaction/stash-dir/SlowFire.class.uniqueId0 new file mode 100644 index 0000000000000000000000000000000000000000..c463e9921eec27a20924cec99609498cd217f76f Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/SlowFire.class.uniqueId0 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/StandardFire.class.uniqueId6 b/build/tmp/compileJava/compileTransaction/stash-dir/StandardFire.class.uniqueId6 new file mode 100644 index 0000000000000000000000000000000000000000..81358e7c16260b8d1d77d2d7a0650163f6d5df8f Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/StandardFire.class.uniqueId6 differ diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index 858a4f8e11dd2f5778dcd1d3339b95b6e58ad5f2..72404e03bcab8bf54fc8e2fe55f9219b328d7448 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/model/BoardData.java b/src/main/java/model/BoardData.java index 480058ee90beae0af405d2dc67304f322a856282..2cad06371a2db77d49df8292fcb06e1b96f55d4a 100644 --- a/src/main/java/model/BoardData.java +++ b/src/main/java/model/BoardData.java @@ -8,12 +8,13 @@ import java.util.Map; public interface BoardData { public List<List<Element>> getElements(); public Cell<Element> getCell(Position position); - public void addElement(Element element); + public Boolean addElement(Element element); public void removeElement(Element element); public Map<Position, List<Position>> getNeighbors(); public List<Position> getNeighbor(Position position); public int getStep(); public void setStep(int step); public void initialize(); - + public int getColumnCount(); + public int getRowCount(); } diff --git a/src/main/java/model/Cloud.java b/src/main/java/model/Cloud.java index cbc141be22a3a3c0df53a946243dd91f6c843518..1e8f9bf631a687eabcb32bc2c546bc4c9901d2fc 100644 --- a/src/main/java/model/Cloud.java +++ b/src/main/java/model/Cloud.java @@ -22,7 +22,13 @@ public Position getPosition() { public ModelElement getType() { return type; } -@Override + + @Override + public Behavior getBehavior() { + return behavior; + } + + @Override public List<Position> updateSelf(BoardData boardData) { List<Position> positions=behavior.update(boardData,this); List<Position> modifPositions=new ArrayList<>(positions); diff --git a/src/main/java/model/Element.java b/src/main/java/model/Element.java index c07f6c105fc11219a9ab81b930f2ae0e80e86977..014f446ae0ca7a4e62c824edf8762d06286c1a8c 100644 --- a/src/main/java/model/Element.java +++ b/src/main/java/model/Element.java @@ -5,5 +5,6 @@ import util.Position; public interface Element { Position getPosition(); ModelElement getType(); + Behavior getBehavior(); } diff --git a/src/main/java/model/ElementFactory.java b/src/main/java/model/ElementFactory.java index 0447cc41ce5c14f11773df2f205d22027a757d92..b634d40630f74e226692a8f747864100195917a6 100644 --- a/src/main/java/model/ElementFactory.java +++ b/src/main/java/model/ElementFactory.java @@ -2,10 +2,11 @@ package model; import util.Position; -public class ElementFactory { - //this is using the factoryMethod design pattern (I'm writing this it just in case ) - public static Element createElement(BoardData boardData,ModelElement modelElement, Position position){ - return modelElement.instanciate(position); - } +import java.util.List; +import java.util.Map; + +public interface ElementFactory { + public ModelElement getNewType(BoardData boardData, Position position); + public Element getNewElement(BoardData boardData, Position position); } diff --git a/src/main/java/model/FFBoard.java b/src/main/java/model/FFBoard.java index bf5baf0217f8b05d18f7a291e964952eb86d1c8a..6134a3dac511a0578ae1d283cbc694b45eaac9bb 100644 --- a/src/main/java/model/FFBoard.java +++ b/src/main/java/model/FFBoard.java @@ -29,17 +29,15 @@ public class FFBoard implements Board<List<ModelElement>> { public void initializeElements() { boardData.initialize(); FFUpdater= new FFUpdater(); - for (int index = 0; index < initialFireCount; index++) - boardData.addElement(new StandardFire(randomPosition())); - /*for (int index = 0; index < initialFirefighterCount; index++) - boardData.addElement(new StandardFireFighter(randomPosition())); - for (int index = 0; index < 2; index++) - boardData.addElement(new MotorizedFireFighter(randomPosition())); - for (int index = 0; index < 10; index++) - boardData.addElement(new Cloud(randomPosition()));*/ - for (int index = 0; index < 1000; index++) - boardData.addElement(new Rock(randomPosition())); - + FFboardFiller filler=new FFboardFiller(); + filler.fillBoard(boardData,new int[]{ + 5,//firefighter + 2,//motorized firefighter + 3,//clouds + 10,//mountains + 5,//roads + 10,//rocks + 10});//fires } private Position randomPosition() { diff --git a/src/main/java/model/FFBoardData.java b/src/main/java/model/FFBoardData.java index 6b21770128f75b952b0303d8464c18df2397857c..37a3fbf12d7d0d26b641effb109758e9e3f1e3ed 100644 --- a/src/main/java/model/FFBoardData.java +++ b/src/main/java/model/FFBoardData.java @@ -9,7 +9,7 @@ public class FFBoardData implements BoardData{ private List<List<Element>> elementList; private Map<Position, List<Position>> neighbors = new HashMap<Position, List<Position>>(); private int step; - private int columnCount,rowCount; + public int columnCount,rowCount; private List<List<Cell<Element>>> cells; public FFBoardData(int columnCount, int rowCount) { this.columnCount=columnCount; @@ -43,6 +43,16 @@ public class FFBoardData implements BoardData{ } } + @Override + public int getColumnCount() { + return columnCount; + } + + @Override + public int getRowCount() { + return rowCount; + } + @Override public List<List<Element>> getElements() { @@ -66,13 +76,17 @@ public class FFBoardData implements BoardData{ public List<Position> getNeighbor(Position position) { return neighbors.get(position); } - public void addElement(Element element){ - if(element!=null) - { - elementList.get(element.getType().ordinal()).add(element); - getCell(element.getPosition()).Content.add(element); - FFUpdater.modifiedPositions.add(element.getPosition()); - } + public Boolean addElement(Element element){ + if(element==null){ return false;} + if (element.getBehavior()!=null) + if (element.getBehavior() instanceof TangibleBehavior<?>) + if (!((TangibleBehavior)element.getBehavior()).isLegal(this,element.getPosition())) + return false; + System.out.println(element.getType()); + elementList.get(element.getType().ordinal()).add(element); + getCell(element.getPosition()).Content.add(element); + FFUpdater.modifiedPositions.add(element.getPosition()); + return true; } public void removeElement(Element element){ FFUpdater.modifiedPositions.add(element.getPosition()); diff --git a/src/main/java/model/FFUpdater.java b/src/main/java/model/FFUpdater.java index 26f5d4cd426950ea704ac44920dc59ed389a11cd..f3f8ab4600de709c4cbdaf1311fdb20e16437716 100644 --- a/src/main/java/model/FFUpdater.java +++ b/src/main/java/model/FFUpdater.java @@ -18,7 +18,6 @@ public class FFUpdater implements Updater { updatables.clear(); modifiedPositions=new ArrayList<Position>(); for (ModelElement modelElement: ModelElement.values()) { - System.out.println(modelElement+" "+modelElement.isUpdatable()); if (modelElement.isUpdatable()) for (Element e:boardData.getElements().get(modelElement.ordinal())) { updatables.add((Updatable) e); diff --git a/src/main/java/model/FFboardFiller.java b/src/main/java/model/FFboardFiller.java new file mode 100644 index 0000000000000000000000000000000000000000..b552d3bb177f5062ceef7c6aab289c750892b090 --- /dev/null +++ b/src/main/java/model/FFboardFiller.java @@ -0,0 +1,25 @@ +package model; + +import util.Position; +import view.ViewElement; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Modifier; +import java.util.Random; + +public class FFboardFiller { + Random random=new Random(); + public void fillBoard(BoardData boardData,int[] counter){ + for(ViewElement ve:ViewElement.values()){ + if (ve!=ViewElement.EMPTY) + while(counter[ve.ordinal()]>0) { + Element element; + do { + Position p=new Position(random.nextInt(boardData.getRowCount()), random.nextInt(boardData.getColumnCount())); + element= ve.instanciate(boardData,p); + }while (!boardData.addElement(element)); + counter[ve.ordinal()]--; + } + } + } +} diff --git a/src/main/java/model/Fire.java b/src/main/java/model/Fire.java index 9e9cf5d78d876be75943a741830196fbd5ba01dd..c83de9d9fd0345fb764dbd7c1d47199cd9da251c 100644 --- a/src/main/java/model/Fire.java +++ b/src/main/java/model/Fire.java @@ -7,22 +7,20 @@ import java.util.List; import java.util.Map; import java.util.stream.Stream; -public abstract class Fire implements Element,Updatable,Printable{ +public abstract class Fire implements Element,Updatable,Printable,ZoneDependent{ int counter; int delay; ModelElement type; Position position; static Behavior behavior=new FireBehavior(); - static Map<ModelElement,ModelElement> fireDictionary=new HashMap<>(); - //.put(MAISON,FEUMAISON) + public static FireFactory factory=new FireFactory(); public Fire(int delay, ModelElement type, Position position) { this.counter=0; this.delay = delay; this.type = type; this.position = position; - fireDictionary.put(ModelElement.ROCK,ModelElement.SLOWFIRE); - fireDictionary.put(ModelElement.MOUNTAIN,null); + } @Override public Position getPosition() { @@ -32,21 +30,24 @@ public abstract class Fire implements Element,Updatable,Printable{ public ModelElement getType() { return type; } - public static Fire getNewFireByType(BoardData boardData, Position position){ - List<ModelElement> s = boardData.getCell(position).Content.stream().map(x -> x.getType()).toList(); - for(Map.Entry<ModelElement,ModelElement> entry: fireDictionary.entrySet()){ - System.out.println(entry.toString()+" "+s.contains(entry.getKey())+" "+entry.getValue()); - if (s.contains(entry.getKey())) return (Fire) entry.getValue().instanciate(position); - } - return new StandardFire(position); - } + @Override public List<Position> updateSelf(BoardData boardData) { counter++; List<Position> positions=behavior.update(boardData,this); for (Position p:positions) { - boardData.addElement(getNewFireByType(boardData,p)); + boardData.addElement(getFactory().getNewElement(boardData,p)); } return positions; } + + @Override + public ElementFactory getFactory() { + return factory; + } + + @Override + public Behavior getBehavior() { + return behavior; + } } diff --git a/src/main/java/model/FireBehavior.java b/src/main/java/model/FireBehavior.java index a321873b1098480bb3aec961c4a7abb3b2a5b8be..c75a0d372cfe4e1ccf4b514ee23392c47a3cd33f 100644 --- a/src/main/java/model/FireBehavior.java +++ b/src/main/java/model/FireBehavior.java @@ -22,12 +22,8 @@ public class FireBehavior extends FFBehavior implements TangibleBehavior<ModelE public List<Position> legalNeighbors(BoardData boardData,Position position) { List<Position> neighbors=new ArrayList<>(boardData.getNeighbor(position)); for (Position p:boardData.getNeighbor(position)) { - for (Element e:boardData.getCell(p).Content) { - if (e instanceof Fire) neighbors.remove(p); - for(ModelElement o:getObstacles()) - if (e.getType()==o) neighbors.remove(p); + if (!isLegal(boardData,p)) neighbors.remove(p); } - } return neighbors; } @Override @@ -40,38 +36,19 @@ public class FireBehavior extends FFBehavior implements TangibleBehavior<ModelE return neighbors; } - @Override - public List<ModelElement> getObstacles() { - return obstacles; - } - /*@Override - 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) { - for (Position neighbor:legalNeighbors(boardData).get(fire)) { - if (!newFirePositions.contains(neighbor)) - newFirePositions.add(neighbor); - } - } - } - 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())); - } + public Boolean isLegal(BoardData boardData,Position position) { + System.out.println("is legal"); + for (Element e:boardData.getCell(position).Content) { + if (e instanceof Fire) return false; + for(ModelElement o:getObstacles()) + if (e.getType()==o) return false; } - return neigbors; - }*/ + return true; + } } diff --git a/src/main/java/model/FireFactory.java b/src/main/java/model/FireFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..cb54c47dfd98d7cf62978866bfb51da82f68531c --- /dev/null +++ b/src/main/java/model/FireFactory.java @@ -0,0 +1,30 @@ +package model; + +import util.Position; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class FireFactory implements ElementFactory{ + static Map<ModelElement,ModelElement> fireDictionary=new HashMap<>(); + static{ + fireDictionary.put(ModelElement.ROCK,ModelElement.SLOWFIRE); + } + public ModelElement getNewType(BoardData boardData, Position position){ + List<ModelElement> s = boardData.getCell(position).Content.stream().map(x -> x.getType()).toList(); + System.out.println("getnewtype"); + for(Map.Entry<ModelElement,ModelElement> entry: fireDictionary.entrySet()){ + if (s.contains(entry.getKey())) return entry.getValue(); + } + return ModelElement.FIRE; + } + public Element getNewElement(BoardData boardData, Position position){ + List<ModelElement> s = boardData.getCell(position).Content.stream().map(x -> x.getType()).toList(); + System.out.println("getnewtype"); + for(Map.Entry<ModelElement,ModelElement> entry: fireDictionary.entrySet()){ + if (s.contains(entry.getKey())) return entry.getValue().instanciate(position); + } + return new StandardFireFighter(position); + } +} diff --git a/src/main/java/model/FireFighter.java b/src/main/java/model/FireFighter.java index dbebf1bfba19a73422e634a4f56e56ee13fecd35..c3db79510b5bd5a41c2c71ae9194d23fc93301b6 100644 --- a/src/main/java/model/FireFighter.java +++ b/src/main/java/model/FireFighter.java @@ -37,4 +37,9 @@ public List<Position> updateSelf(BoardData boardData) { } return modifPositions; } + + @Override + public Behavior getBehavior() { + return behavior; + } } diff --git a/src/main/java/model/FireFighterBehavior.java b/src/main/java/model/FireFighterBehavior.java index d6b517acc4983dcd670246cca0f13b59f8c017dc..f1cb00d20460593fd8cf37ebf55ac4dd64a99649 100644 --- a/src/main/java/model/FireFighterBehavior.java +++ b/src/main/java/model/FireFighterBehavior.java @@ -37,6 +37,15 @@ public class FireFighterBehavior extends FFBehavior implements TangibleBehavior< return obstacles; } + @Override + public Boolean isLegal(BoardData boardData, Position position) { + for (Element e:boardData.getCell(position).Content) { + for(ModelElement o:getObstacles()) + if (e.getType()==o) return false; + } + return true; + } + public void extinguish(BoardData boardData, Position position){ List<Position> l=new ArrayList<>(legalNeighbors(boardData,position)); l.add(position); @@ -52,11 +61,8 @@ public class FireFighterBehavior extends FFBehavior implements TangibleBehavior< public List<Position> legalNeighbors(BoardData boardData,Position position) { List<Position> neighbors=new ArrayList<>(boardData.getNeighbor(position)); for (Position p:boardData.getNeighbor(position)) { - for (Element e:boardData.getCell(p).Content) { - for(ModelElement o:getObstacles()) - if (e.getType()==o) neighbors.remove(p); + if (!isLegal(boardData,p)) neighbors.remove(p); } - } return neighbors; } @Override diff --git a/src/main/java/model/Land.java b/src/main/java/model/Land.java index 07fb949a101c756a24b5064df125baa27b4bd799..0bc0183fd3937bdee7abce53ea620b0bc595b725 100644 --- a/src/main/java/model/Land.java +++ b/src/main/java/model/Land.java @@ -20,4 +20,8 @@ public abstract class Land implements Element ,Printable{ return type; } + @Override + public Behavior getBehavior() { + return null; + } } diff --git a/src/main/java/model/TangibleBehavior.java b/src/main/java/model/TangibleBehavior.java index 9ca6669215ee1edabd510b27591e8ac4ec02b94e..8aaa13c3f58d34411a364d3289508851437ac5bf 100644 --- a/src/main/java/model/TangibleBehavior.java +++ b/src/main/java/model/TangibleBehavior.java @@ -6,4 +6,5 @@ import java.util.List; public interface TangibleBehavior<E> extends Behavior { public List<E> getObstacles(); + public Boolean isLegal(BoardData boardData,Position position); } diff --git a/src/main/java/model/ZoneDependent.java b/src/main/java/model/ZoneDependent.java new file mode 100644 index 0000000000000000000000000000000000000000..19e501e1a244edf9b8f555d6e3848ef9dac643c4 --- /dev/null +++ b/src/main/java/model/ZoneDependent.java @@ -0,0 +1,10 @@ +package model; + +import util.Position; + +import java.util.List; +import java.util.Map; + +public interface ZoneDependent { + public ElementFactory getFactory(); +} diff --git a/src/main/java/view/ViewElement.java b/src/main/java/view/ViewElement.java index a070081c774f71adb7e63157061cdd6f6ee06cc2..b5c4762b1fccda9b52b6eff6390d6cbb1df7f5fe 100644 --- a/src/main/java/view/ViewElement.java +++ b/src/main/java/view/ViewElement.java @@ -2,13 +2,54 @@ package view; import javafx.scene.paint.Color; import model.*; +import util.Position; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; public enum ViewElement { - FIREFIGHTER(Color.BLUE, StandardFireFighter.class), MOTORIZEDFIREFIGHTER(Color.DARKBLUE, MotorizedFireFighter.class), FIRE(Color.RED,Fire.class),CLOUD(Color.GRAY, Cloud.class) ,MOUNTAIN(Color.BROWN, Mountain.class),ROAD(Color.BLACK, Road.class),ROCK(Color.LIGHTYELLOW, Rock.class), EMPTY(Color.WHITE, null); + FIREFIGHTER(Color.BLUE, StandardFireFighter.class), + MOTORIZEDFIREFIGHTER(Color.DARKBLUE, MotorizedFireFighter.class), + CLOUD(Color.GRAY, Cloud.class) , + MOUNTAIN(Color.BROWN, Mountain.class), + ROAD(Color.BLACK, Road.class), + ROCK(Color.LIGHTYELLOW, Rock.class), + FIRE(Color.RED,Fire.class,Fire.factory), + EMPTY(Color.WHITE, null); final Color color; public final Class<?> c; + final ElementFactory elementFactory; ViewElement(Color color, Class<?> c) { this.color = color; this.c = c; + this.elementFactory=null; + } + ViewElement(Color color, Class<?> c,ElementFactory elementFactory) { + this.color = color; + this.c = c; + this.elementFactory=elementFactory; + } + public Element instanciate(BoardData boardData,Position position){ + Element element; + Class<?>[] arg2=new Class[]{BoardData.class,Position.class}; + Class<?>[] arg1=new Class[]{Position.class}; + if (elementFactory!=null) { + element=elementFactory.getNewElement(boardData,position); + } + else { + try { + element=(Element)this.c.getDeclaredConstructor(arg1).newInstance(position); + } catch (InstantiationException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } catch (InvocationTargetException e) { + throw new RuntimeException(e); + } catch (NoSuchMethodException e) { + throw new RuntimeException(e); + } + } + return element; } }