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

CHANGED old Rock into Forest (wasn't the needed implementation but still interesting)

MADE new Rock acording to the needed criterias
parent b00e7660
No related branches found
No related tags found
No related merge requests found
Pipeline #41513 failed
Showing
with 173 additions and 53 deletions
File deleted
File deleted
No preview for this file type
package model;
public interface ChargeTarget {
public int getCounter();
public void incrementCounter();
public void resetCounter();
public boolean isCharged();
}
package model;
import util.Position;
import java.util.List;
public interface ChargerBehavior<E> extends Behavior {
public List<E> getChargeTarget();
public Boolean isCharged(ChargeTarget chargeTarget);
}
......@@ -9,7 +9,6 @@ import util.Position;
import java.util.*;
public class CloudBehavior extends FFBehavior implements RemoverBehavior<ModelElement> {
private final ModelElement removedElement=ModelElement.CLOUD;
private final Random random=new Random();
@Override
......
package model;
import util.Position;
import java.util.List;
public abstract class ElementManager {
ModelElement type;
List<ModelElement> obstacles;
public ElementManager(ModelElement type) {
this.type = type;
}
public abstract List<Position> Update(BoardData board, List<Position> modifiedList);
}
......@@ -33,11 +33,13 @@ public class FFBoard implements Board<List<ModelElement>> {
filler.fillBoard(boardData,new int[]{
5,//firefighter
2,//motorized firefighter
3,//clouds
10,//mountains
5,//roads
10,//rocks
10});//fires
2,//clouds
30,//mountains
10,//roads
20,//forests
10,//fires
10//rocks
});
}
private Position randomPosition() {
......
......@@ -82,7 +82,6 @@ public class FFBoardData implements BoardData{
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());
......
......@@ -7,8 +7,9 @@ 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>,ChargerBehavior<ModelElement> {
private List<ModelElement> obstacles=List.of(ModelElement.MOUNTAIN,ModelElement.ROAD);
private List<ModelElement> chargeTargets=List.of(ModelElement.ROCK);
@Override
public List<Position> update(BoardData boardData,Element element) {
......@@ -22,7 +23,7 @@ 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)) {
if (!isLegal(boardData,p)) neighbors.remove(p);
if (!isLegal(boardData,p) || !isCharger(boardData,p)) neighbors.remove(p);
}
return neighbors;
}
......@@ -40,10 +41,18 @@ public class FireBehavior extends FFBehavior implements TangibleBehavior<ModelE
public List<ModelElement> getObstacles() {
return obstacles;
}
private Boolean isCharger(BoardData boardData,Position position) {
for (Element e:boardData.getCell(position).Content) {
for (ModelElement c:getChargeTarget())
if(e.getType()==c){
((ChargeTarget)e).incrementCounter();
return false;
}
}
return true;
}
@Override
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())
......@@ -51,4 +60,14 @@ public class FireBehavior extends FFBehavior implements TangibleBehavior<ModelE
}
return true;
}
@Override
public List<ModelElement> getChargeTarget() {
return chargeTargets;
}
@Override
public Boolean isCharged(ChargeTarget chargeTarget) {
return chargeTarget.isCharged();
}
}
......@@ -9,11 +9,10 @@ import java.util.Map;
public class FireFactory implements ElementFactory{
static Map<ModelElement,ModelElement> fireDictionary=new HashMap<>();
static{
fireDictionary.put(ModelElement.ROCK,ModelElement.SLOWFIRE);
fireDictionary.put(ModelElement.FOREST,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();
}
......@@ -21,10 +20,9 @@ public class FireFactory implements ElementFactory{
}
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);
return new StandardFire(position);
}
}
......@@ -4,15 +4,15 @@ import util.Position;
import util.TargetStrategy;
import java.util.*;
public class FireFighterBehavior extends FFBehavior implements TangibleBehavior<ModelElement>,RemoverBehavior<ModelElement> {
public class FireFighterBehavior extends FFBehavior implements TangibleBehavior<ModelElement>,RemoverBehavior<ModelElement>,ChargerBehavior<ModelElement> {
private List<ModelElement> obstacles=List.of(ModelElement.MOUNTAIN);
private TargetStrategy ts=new TargetStrategy();
private List chargeTarget=List.of(ModelElement.ROCK);
List<Position> initializeTargets(BoardData boardData){
List<Position> targets=new ArrayList<>();
for (ModelElement me:ModelElement.values()) {
if (me.isInstanceOf(Fire.class)){
System.out.println("0");
for (Element e:boardData.getElements().get(me.ordinal())) {
targets.add(e.getPosition());
}}
......@@ -54,6 +54,8 @@ public class FireFighterBehavior extends FFBehavior implements TangibleBehavior<
for (Element e:c) {
if (e instanceof Fire){
boardData.removeElement(e);}
if (chargeTarget.contains(e.getType()))
((ChargeTarget)e).resetCounter();
}
}
}
......@@ -73,4 +75,14 @@ public class FireFighterBehavior extends FFBehavior implements TangibleBehavior<
}
return neighbors;
}
@Override
public List getChargeTarget() {
return chargeTarget;
}
@Override
public Boolean isCharged(ChargeTarget chargeTarget) {
return chargeTarget.isCharged();
}
}
package model;
import util.Position;
public class Forest extends Land implements Element {
//explanation : while reading the subject, I thought that any FIRE that was ON a ROCK took 4 turns instead of 2 (i changed slowfire into quickfire (1 turn) and did the forest);
public Forest(Position position) {
super(position);
type=ModelElement.FOREST;
}
}
......@@ -4,25 +4,24 @@ import util.Position;
import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;
import java.util.List;
public enum ModelElement {
FIRE(StandardFire.class),
SLOWFIRE(QuickFire.class),
FIREFIGHTER(StandardFireFighter.class),
MOTORIZEDFIREFIGHTER(MotorizedFireFighter.class),
FIRE(StandardFire.class),
SLOWFIRE(SlowFire.class),
CLOUD(Cloud.class),
MOUNTAIN(Mountain.class),
ROAD(Road.class),
FOREST(Forest.class),
ROCK(Rock.class);
public final Class<?> c;
ModelElement(Class<?>c) {
this.c =c;
System.out.println(c);
}
public boolean isUpdatable(){
Class<?> currentClass=c;
......
package model;
import util.Position;
public class QuickFire extends Fire implements Updatable{
public QuickFire(Position position) {
super(1, ModelElement.SLOWFIRE, position);
}
}
......@@ -2,9 +2,57 @@ package model;
import util.Position;
public class Rock extends Land implements Element {
import java.util.List;
public class Rock implements Element,ChargeTarget,Updatable,Printable {
Position position;
ModelElement type=ModelElement.ROCK;
static Behavior behavior=new RockBehavior();
int counter;
final int max=4;
public Rock(Position position) {
super(position);
type=ModelElement.ROCK;
this.position=position;
counter=0;
}
@Override
public int getCounter() {
return counter;
}
@Override
public void incrementCounter() {
if (counter!=max) counter++;
}
@Override
public void resetCounter() {
counter=0;
}
@Override
public boolean isCharged() {
return (counter==max);
}
@Override
public Position getPosition() {
return position;
}
@Override
public ModelElement getType() {
return type;
}
@Override
public Behavior getBehavior() {
return behavior;
}
@Override
public List<Position> updateSelf(BoardData boardData) {
getBehavior().update(boardData,this);
return null;
}
}
package model;
import util.Position;
import java.util.List;
import java.util.Map;
public class RockBehavior implements Behavior{
@Override
public List<Position> update(BoardData boardData, Element element) {
ChargeTarget chargeTarget= (ChargeTarget) element;
if (chargeTarget.isCharged()){
chargeTarget.resetCounter();
boardData.addElement(Fire.factory.getNewElement(boardData,element.getPosition()));
}
return null;
}
@Override
public List<Position> legalNeighbors(BoardData boardData, Position position) {
return null;
}
@Override
public Map<Position, List<Position>> allLegalNeighbors(BoardData boardData) {
return null;
}
}
package model;
import util.Position;
public class SlowFire extends Fire implements Updatable{
public SlowFire(Position position) {
super(4, ModelElement.SLOWFIRE, position);
}
}
......@@ -5,17 +5,18 @@ 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),
CLOUD(Color.GRAY, Cloud.class),
MOUNTAIN(Color.BROWN, Mountain.class),
ROAD(Color.BLACK, Road.class),
ROCK(Color.LIGHTYELLOW, Rock.class),
FOREST(Color.GREEN, Forest.class),
FIRE(Color.RED,Fire.class,Fire.factory),
ROCK(Color.DARKGOLDENROD, Rock.class),
EMPTY(Color.WHITE, null);
final Color color;
public final Class<?> c;
......@@ -32,7 +33,6 @@ public enum ViewElement {
}
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);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment