Skip to content
Snippets Groups Projects
Commit 8215023e authored by BACHTARZI Imed eddine's avatar BACHTARZI Imed eddine
Browse files

cloud REWORKED

Mountain DONE
parent 5a1ac8c9
No related branches found
No related tags found
No related merge requests found
Pipeline #39516 failed
Showing with 81 additions and 67 deletions
model(complex).png

616 KiB

model(simple).png

562 KiB

...@@ -96,22 +96,14 @@ public class Controller { ...@@ -96,22 +96,14 @@ public class Controller {
for(int row = 0; row < rowCount; row++) for(int row = 0; row < rowCount; row++)
viewElements[row][column] = getViewElement(board.getState(new Position(row, column))); viewElements[row][column] = getViewElement(board.getState(new Position(row, column)));
grid.repaint(viewElements); grid.repaint(viewElements);
System.out.println(toString(viewElements));
updateGenerationLabel(board.stepNumber()); updateGenerationLabel(board.stepNumber());
} }
private ViewElement getViewElement(List<ModelElement> squareState) { private ViewElement getViewElement(List<ModelElement> squareState) {
if (squareState.contains(ModelElement.FIRE)){ for (ModelElement element:ModelElement.values()) {
return ViewElement.FIRE; if (squareState.contains(element)){
return ViewElement.values()[element.ordinal()];
} }
if(squareState.contains(ModelElement.FIREFIGHTER)){
return ViewElement.FIREFIGHTER;
}
if(squareState.contains(ModelElement.CLOUD)){
return ViewElement.CLOUD;
}
if (squareState.contains(ModelElement.MOUNTAIN)){
return ViewElement.MOUNTAIN;
} }
return ViewElement.EMPTY; return ViewElement.EMPTY;
} }
......
...@@ -3,10 +3,9 @@ package model; ...@@ -3,10 +3,9 @@ package model;
import util.Position; import util.Position;
import java.util.List; import java.util.List;
import java.util.Map;
public interface Behavior { public interface Behavior {
public List<Position> getNext(BoardData boardData); public List<Position> getNext(BoardData boardData);
public default Boolean isLegalMove(){ public Map<Position,List<Position>> legalNeighbors(BoardData boardData);
return true;
}
} }
\ No newline at end of file
...@@ -6,12 +6,11 @@ import java.util.ArrayList; ...@@ -6,12 +6,11 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
public class CloudBehavior implements RemoverBehavior<ModelElement> { public class CloudBehavior extends FFBehavior implements RemoverBehavior<ModelElement> {
private ModelElement element; private final ModelElement removedElement=ModelElement.FIRE;
private ModelElement removedElement=ModelElement.FIRE; private final Random random=new Random();
private Random random=new Random();
public CloudBehavior(ModelElement modelElement) { public CloudBehavior(ModelElement modelElement) {
this.element=modelElement; super(ModelElement.CLOUD);
} }
@Override @Override
......
package model; package model;
import util.Position;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
public abstract class FFBehavior implements Behavior { public abstract class FFBehavior implements Behavior {
public ModelElement element; public ModelElement element;
public FFBehavior(ModelElement element) { public FFBehavior(ModelElement element) {
this.element = 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
...@@ -45,10 +45,13 @@ public class FFBoard implements Board<List<ModelElement>> { ...@@ -45,10 +45,13 @@ public class FFBoard implements Board<List<ModelElement>> {
FFUpdater= new FFUpdater(); FFUpdater= new FFUpdater();
for (int index = 0; index < initialFireCount; index++) for (int index = 0; index < initialFireCount; index++)
boardData.getPositions().get(ModelElement.FIRE.ordinal()).add(randomPosition()); 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()); 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() { private Position randomPosition() {
...@@ -57,18 +60,12 @@ public class FFBoard implements Board<List<ModelElement>> { ...@@ -57,18 +60,12 @@ public class FFBoard implements Board<List<ModelElement>> {
@Override @Override
public List<ModelElement> getState(Position position) { 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<>(); List<ModelElement> result = new ArrayList<>();
for (Position firefighterPosition : firefighterPositions) for (ModelElement e:ModelElement.values()) {
if (firefighterPosition.equals(position)) for (Position p : boardData.getPositions().get(e.ordinal()))
result.add(ModelElement.FIREFIGHTER); if (p.equals(position))
for (Position cloudPosition : cloudPositions) result.add(e);
if (cloudPosition.equals(position)) }
result.add(ModelElement.CLOUD);
if (firePositions.contains(position))
result.add(ModelElement.FIRE);
return result; return result;
} }
...@@ -83,10 +80,6 @@ public class FFBoard implements Board<List<ModelElement>> { ...@@ -83,10 +80,6 @@ public class FFBoard implements Board<List<ModelElement>> {
} }
public List<Position> updateToNextGeneration() { public List<Position> updateToNextGeneration() {
/*List<Position> modifiedPositions = updateFirefighters();
modifiedPositions.addAll(updateFires());
boardData.setStep(boardData.getStep()+1);
return modifiedPositions;*/
List<Position> modifiedPositions = FFUpdater.updateAll(boardData); List<Position> modifiedPositions = FFUpdater.updateAll(boardData);
boardData.setStep(boardData.getStep()+1); boardData.setStep(boardData.getStep()+1);
...@@ -99,8 +92,8 @@ public class FFBoard implements Board<List<ModelElement>> { ...@@ -99,8 +92,8 @@ public class FFBoard implements Board<List<ModelElement>> {
return boardData.getStep(); return boardData.getStep();
} }
private List<Position> updateFirefighters() { /*private List<Position> updateFirefighters() {
List<Position> modifiedPosition = new ArrayList<>();/* List<Position> modifiedPosition = new ArrayList<>();
List<Position> firefighterPositions = boardData.getPositions().get(ModelElement.FIREFIGHTER.ordinal()); List<Position> firefighterPositions = boardData.getPositions().get(ModelElement.FIREFIGHTER.ordinal());
List<Position> firePositions = boardData.getPositions().get(ModelElement.FIRE.ordinal()); List<Position> firePositions = boardData.getPositions().get(ModelElement.FIRE.ordinal());
List<Position> firefighterNewPositions = new ArrayList<>(); List<Position> firefighterNewPositions = new ArrayList<>();
...@@ -118,9 +111,9 @@ public class FFBoard implements Board<List<ModelElement>> { ...@@ -118,9 +111,9 @@ public class FFBoard implements Board<List<ModelElement>> {
extinguish(firePosition); extinguish(firePosition);
modifiedPosition.addAll(neighborFirePositions); modifiedPosition.addAll(neighborFirePositions);
} }
firefighterPositions = firefighterNewPositions;*/ firefighterPositions = firefighterNewPositions;
return modifiedPosition; return modifiedPosition;
} }*/
@Override @Override
public void reset() { public void reset() {
...@@ -130,7 +123,7 @@ public class FFBoard implements Board<List<ModelElement>> { ...@@ -130,7 +123,7 @@ public class FFBoard implements Board<List<ModelElement>> {
@Override @Override
public void setState(List<ModelElement> state, Position position) { public void setState(List<ModelElement> state, Position position) {
for (ModelElement e:state) { for (ModelElement e:ModelElement.values()) {
boardData.getPositions().get(e.ordinal()).remove(position); boardData.getPositions().get(e.ordinal()).remove(position);
} }
for (ModelElement e:state) { for (ModelElement e:state) {
......
...@@ -20,7 +20,6 @@ public class FFUpdater implements Updater { ...@@ -20,7 +20,6 @@ public class FFUpdater implements Updater {
List<Position> modifiedList=new ArrayList<Position>(); List<Position> modifiedList=new ArrayList<Position>();
for (int i = 0; i < ModelElement.values().length; i++) { for (int i = 0; i < ModelElement.values().length; i++) {
modifiedList=this.elements[i].Update(boardData,modifiedList); modifiedList=this.elements[i].Update(boardData,modifiedList);
System.out.println(modifiedList.toString());
} }
return modifiedList; return modifiedList;
} }
......
...@@ -4,9 +4,10 @@ import util.Position; ...@@ -4,9 +4,10 @@ import util.Position;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; 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) { public FireBehavior(ModelElement element) {
super(element); super(element);
...@@ -18,7 +19,7 @@ public class FireBehavior extends FFBehavior { ...@@ -18,7 +19,7 @@ public class FireBehavior extends FFBehavior {
List<Position> newFirePositions = new ArrayList<>(); List<Position> newFirePositions = new ArrayList<>();
if (boardData.getStep() % 2 == 0) { if (boardData.getStep() % 2 == 0) {
for (Position fire : firePositions) { for (Position fire : firePositions) {
for (Position neighbor:boardData.getNeighbors().get(fire)) { for (Position neighbor:legalNeighbors(boardData).get(fire)) {
if (!newFirePositions.contains(neighbor)) if (!newFirePositions.contains(neighbor))
newFirePositions.add(neighbor); newFirePositions.add(neighbor);
} }
...@@ -26,4 +27,20 @@ public class FireBehavior extends FFBehavior { ...@@ -26,4 +27,20 @@ public class FireBehavior extends FFBehavior {
} }
return newFirePositions; 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;
}
} }
...@@ -3,12 +3,10 @@ package model; ...@@ -3,12 +3,10 @@ package model;
import util.Position; import util.Position;
import util.TargetStrategy; import util.TargetStrategy;
import java.util.ArrayList; import java.util.*;
import java.util.List;
import java.util.ListIterator;
public class FirefighterBehavior extends FFBehavior implements TangibleBehavior<ModelElement>,RemoverBehavior<ModelElement> { 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; ModelElement removedElement=ModelElement.FIRE;
TargetStrategy targetStrategy=new TargetStrategy(); TargetStrategy targetStrategy=new TargetStrategy();
...@@ -22,8 +20,9 @@ public class FirefighterBehavior extends FFBehavior implements TangibleBehavior< ...@@ -22,8 +20,9 @@ public class FirefighterBehavior extends FFBehavior implements TangibleBehavior<
List<Position> firefighterPositions = boardData.getPositions().get(element.ordinal()); List<Position> firefighterPositions = boardData.getPositions().get(element.ordinal());
List<Position> firePositions = new ArrayList<>(List.copyOf(boardData.getPositions().get(ModelElement.FIRE.ordinal()))); List<Position> firePositions = new ArrayList<>(List.copyOf(boardData.getPositions().get(ModelElement.FIRE.ordinal())));
List<Position> firefighterNewPositions = new ArrayList<>(); List<Position> firefighterNewPositions = new ArrayList<>();
Map<Position,List<Position>> neigbours=legalNeighbors(boardData);
for (Position firefighterPosition : firefighterPositions) { for (Position firefighterPosition : firefighterPositions) {
Position newFirefighterPosition = targetStrategy.neighborClosestToFire(firefighterPosition,firePositions, boardData.getNeighbors()); Position newFirefighterPosition = targetStrategy.neighborClosestToFire(firefighterPosition,firePositions, neigbours);
firefighterNewPositions.add(newFirefighterPosition); firefighterNewPositions.add(newFirefighterPosition);
firePositions.remove(newFirefighterPosition); firePositions.remove(newFirefighterPosition);
firePositions.remove(boardData.getNeighbors().get(newFirefighterPosition)); firePositions.remove(boardData.getNeighbors().get(newFirefighterPosition));
...@@ -40,10 +39,6 @@ public class FirefighterBehavior extends FFBehavior implements TangibleBehavior< ...@@ -40,10 +39,6 @@ public class FirefighterBehavior extends FFBehavior implements TangibleBehavior<
return neighborFirePositions; return neighborFirePositions;
} }
@Override
public Boolean isLegalMove() {
return super.isLegalMove();
}
@Override @Override
public List<ModelElement> getObstacles() { public List<ModelElement> getObstacles() {
...@@ -56,6 +51,17 @@ public class FirefighterBehavior extends FFBehavior implements TangibleBehavior< ...@@ -56,6 +51,17 @@ public class FirefighterBehavior extends FFBehavior implements TangibleBehavior<
firePositions.remove(p); 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 @Override
public ModelElement getElementToRemove() { public ModelElement getElementToRemove() {
return removedElement; return removedElement;
......
...@@ -3,6 +3,8 @@ package model; ...@@ -3,6 +3,8 @@ package model;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
public enum ModelElement { public enum ModelElement {
FIREFIGHTER(StandardFirefighter.class), FIREFIGHTER(StandardFirefighter.class),
FIRE(Fire.class), FIRE(Fire.class),
CLOUD(Cloud.class), CLOUD(Cloud.class),
......
...@@ -7,6 +7,5 @@ import java.util.List; ...@@ -7,6 +7,5 @@ import java.util.List;
public interface RemoverBehavior<E> extends Behavior { public interface RemoverBehavior<E> extends Behavior {
public void removePartial(BoardData boardData,Position p); public void removePartial(BoardData boardData,Position p);
public List<Position> remove(BoardData boardData,Position p); public List<Position> remove(BoardData boardData,Position p);
public E getElementToRemove(); public E getElementToRemove();
} }
...@@ -17,14 +17,6 @@ public class StandardFirefighter extends Element { ...@@ -17,14 +17,6 @@ public class StandardFirefighter extends Element {
@Override @Override
public List<Position> Update(BoardData boardData, List<Position> modifiedPositions) { 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> firefighterPositions = boardData.getPositions().get(type.ordinal());
List<Position> firefighterNewPositions = behavior.getNext(boardData); List<Position> firefighterNewPositions = behavior.getNext(boardData);
List<Position> neighborFirePositions = new ArrayList<>(); List<Position> neighborFirePositions = new ArrayList<>();
......
package model; package model;
import util.Position;
import java.util.List; import java.util.List;
public interface TangibleBehavior<E> extends Behavior { public interface TangibleBehavior<E> extends Behavior {
public List<E> getObstacles(); public List<E> getObstacles();
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment