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

added variable (int)counter to Fire

added Rock (and SlowFire)
modified Controller and ViewElement to only see mother class
parent 5f57314d
No related branches found
No related tags found
No related merge requests found
Pipeline #41016 failed
Showing
with 80 additions and 41 deletions
File deleted
File deleted
File deleted
File deleted
File deleted
No preview for this file type
......@@ -101,8 +101,11 @@ public class Controller {
private ViewElement getViewElement(List<ModelElement> squareState) {
for (ModelElement element:ModelElement.values()) {
if (element.isPrintable())
if (squareState.contains(element)){
return ViewElement.values()[element.ordinal()];
for(ViewElement viewElement: ViewElement.values())
if (element.isInstanceOf(viewElement.c))
return viewElement;
}
}
return ViewElement.EMPTY;
......
......@@ -5,7 +5,7 @@ import util.Position;
import java.util.ArrayList;
import java.util.List;
public class Cloud implements Element,Updatable{
public class Cloud implements Element,Updatable,Printable{
ModelElement type;
Position position;
static Behavior behavior=new CloudBehavior();
......
......@@ -19,7 +19,7 @@ public class CloudBehavior extends FFBehavior implements RemoverBehavior<ModelEl
extinguish(boardData,position);
return List.of(position);
}
private void extinguish(BoardData boardData,Position position){
public void extinguish(BoardData boardData,Position position){
List<Position> l=new ArrayList<>(legalNeighbors(boardData,position));
l.add(position);
for (Position p:l) {
......
......@@ -5,9 +5,7 @@ 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){
Element e=modelElement.instanciate(position);
boardData.addElement(e);
return e;
return modelElement.instanciate(position);
}
}
......@@ -31,14 +31,14 @@ public class FFBoard implements Board<List<ModelElement>> {
FFUpdater= new FFUpdater();
for (int index = 0; index < initialFireCount; index++)
boardData.addElement(new StandardFire(randomPosition()));
for (int index = 0; index < initialFirefighterCount; index++)
/*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 < 50; index++)
boardData.addElement(new Road(randomPosition()));
boardData.addElement(new Cloud(randomPosition()));*/
for (int index = 0; index < 1000; index++)
boardData.addElement(new Rock(randomPosition()));
}
......@@ -66,7 +66,6 @@ public class FFBoard implements Board<List<ModelElement>> {
}
public List<Position> updateToNextGeneration() {
List<Position> modifiedPositions = FFUpdater.updateAll(boardData);
boardData.setStep(boardData.getStep()+1);
return modifiedPositions;
......
......@@ -48,7 +48,18 @@ public class FFBoardData implements BoardData{
public List<List<Element>> getElements() {
return elementList;
}
public Cell<Element> getCell(Position position){
return cells.get(position.column()).get(position.row());
}
@Override
public int getStep() {
return step;
}
@Override
public void setStep(int step) {
this.step=step;
}
public Map<Position, List<Position>> getNeighbors() {
return neighbors;
}
......@@ -68,16 +79,5 @@ public class FFBoardData implements BoardData{
elementList.get(element.getType().ordinal()).remove(element);
getCell(element.getPosition()).Content.remove(element);
}
public Cell<Element> getCell(Position position){
return cells.get(position.column()).get(position.row());
}
@Override
public int getStep() {
return step;
}
@Override
public void setStep(int step) {
this.step=step;
}
}
......@@ -18,8 +18,8 @@ public class FFUpdater implements Updater {
updatables.clear();
modifiedPositions=new ArrayList<Position>();
for (ModelElement modelElement: ModelElement.values()) {
System.out.println(modelElement+" "+modelElement.isUpdatabale());
if (modelElement.isUpdatabale())
System.out.println(modelElement+" "+modelElement.isUpdatable());
if (modelElement.isUpdatable())
for (Element e:boardData.getElements().get(modelElement.ordinal())) {
updatables.add((Updatable) e);
}
......
......@@ -7,18 +7,21 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Stream;
public abstract class Fire implements Element,Updatable{
public abstract class Fire implements Element,Updatable,Printable{
int counter;
int delay;
ModelElement type;
Position position;
static Behavior behavior=new FireBehavior();
Map<ModelElement,ModelElement> fireDictionary=new HashMap<>();
static Map<ModelElement,ModelElement> fireDictionary=new HashMap<>();
//.put(MAISON,FEUMAISON)
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
......@@ -29,15 +32,17 @@ public abstract class Fire implements Element,Updatable{
public ModelElement getType() {
return type;
}
private Fire getNewFireByType(BoardData boardData,Position position){
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));
......
......@@ -7,13 +7,13 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
public class FireBehavior extends FFBehavior /*implements TangibleBehavior<ModelElement>*/ {
public class FireBehavior extends FFBehavior implements TangibleBehavior<ModelElement> {
private List<ModelElement> obstacles=List.of(ModelElement.MOUNTAIN,ModelElement.ROAD);
@Override
public List<Position> update(BoardData boardData,Element element) {
List<Position> positions=new ArrayList<>();
if (boardData.getStep()%((Fire)element).delay==0){
if (((Fire)element).counter%((Fire)element).delay==0){
positions=legalNeighbors(boardData,element.getPosition());
}
return positions;
......@@ -24,7 +24,7 @@ public class FireBehavior extends FFBehavior /*implements TangibleBehavior<Model
for (Position p:boardData.getNeighbor(position)) {
for (Element e:boardData.getCell(p).Content) {
if (e instanceof Fire) neighbors.remove(p);
for(ModelElement o:obstacles)
for(ModelElement o:getObstacles())
if (e.getType()==o) neighbors.remove(p);
}
}
......@@ -39,6 +39,11 @@ public class FireBehavior extends FFBehavior /*implements TangibleBehavior<Model
}
return neighbors;
}
@Override
public List<ModelElement> getObstacles() {
return obstacles;
}
/*@Override
public List<Position> getNext(BoardData boardData) {
List<Position> firePositions = boardData.getPositions().get(element.ordinal());
......
......@@ -5,7 +5,7 @@ import util.Position;
import java.util.ArrayList;
import java.util.List;
public abstract class FireFighter implements Element,Updatable{
public abstract class FireFighter implements Element,Updatable,Printable{
int speed;
ModelElement type;
Position position;
......@@ -24,6 +24,7 @@ public Position getPosition() {
public ModelElement getType() {
return type;
}
@Override
public List<Position> updateSelf(BoardData boardData) {
List<Position> positions=behavior.update(boardData,this);
......
......@@ -4,14 +4,14 @@ import util.Position;
import util.TargetStrategy;
import java.util.*;
public class FireFighterBehavior extends FFBehavior implements TangibleBehavior<ModelElement> {
public class FireFighterBehavior extends FFBehavior implements TangibleBehavior<ModelElement>,RemoverBehavior<ModelElement> {
private List<ModelElement> obstacles=List.of(ModelElement.MOUNTAIN);
private TargetStrategy ts=new TargetStrategy();
List<Position> initializeTargets(BoardData boardData){
List<Position> targets=new ArrayList<>();
for (ModelElement me:ModelElement.values()) {
if (me.isFire()){
if (me.isInstanceOf(Fire.class)){
System.out.println("0");
for (Element e:boardData.getElements().get(me.ordinal())) {
targets.add(e.getPosition());
......
package model;
import util.Position;
public abstract class Land implements Element ,Printable{
Position position;
ModelElement type;
public Land(Position position) {
this.position = position;
}
@Override
public Position getPosition() {
return position;
}
@Override
public ModelElement getType() {
return type;
}
}
......@@ -12,9 +12,11 @@ public enum ModelElement {
FIREFIGHTER(StandardFireFighter.class),
MOTORIZEDFIREFIGHTER(MotorizedFireFighter.class),
FIRE(StandardFire.class),
SLOWFIRE(SlowFire.class),
CLOUD(Cloud.class),
MOUNTAIN(Mountain.class),
ROAD(Road.class);
ROAD(Road.class),
ROCK(Rock.class);
public final Class<?> c;
......@@ -22,9 +24,13 @@ public enum ModelElement {
this.c =c;
System.out.println(c);
}
public boolean isUpdatabale(){
List<Class<?>> Interfaces= Arrays.asList(c.getInterfaces());
return Interfaces.contains(Updatable.class);
public boolean isUpdatable(){
Class<?> currentClass=c;
while(!currentClass.equals(Object.class)){
if (Arrays.asList(currentClass.getInterfaces()).contains(Updatable.class)) return true;
currentClass=currentClass.getSuperclass();
}
return false;
}
public boolean isPrintable(){
Class<?> currentClass=c;
......@@ -34,11 +40,10 @@ public enum ModelElement {
}
return false;
}
public boolean isFire(){
public boolean isInstanceOf(Class<?> classe){
Class<?> currentClass=c;
while(!currentClass.equals(Object.class)){
System.out.println(currentClass+" "+currentClass.equals(Fire.class));
if (currentClass.equals(Fire.class)) return true;
if (currentClass.equals(classe)) return true;
currentClass=currentClass.getSuperclass();
}
return false;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment