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

created IndustrialFireFighter (aka superFF)

parent 0b6499fe
No related branches found
No related tags found
No related merge requests found
Pipeline #41877 passed
Showing
with 168 additions and 31 deletions
File deleted
File added
No preview for this file type
package model.elementTokens;
public interface Chargable {
public int getCounter();
public void incrementCounter();
public void resetCounter();
public boolean isCharged();
}
package model.elementTokens;
public interface ChargeTarget {
public int getCounter();
public void incrementCounter();
public void resetCounter();
public boolean isCharged();
public interface ChargeTarget extends Chargable {
}
......@@ -38,6 +38,7 @@ public class FFBoard implements Board<List<ModelElement>> {
30,//mountains
5,//firefighter
2,//motorized firefighter
1,//motorized firefighter (AKA superman)
2,//clouds
10,//fires
......
......@@ -12,10 +12,9 @@ import java.util.Arrays;
public enum ModelElement {
FIRE(StandardFire.class),
SLOWFIRE(QuickFire.class),
FIREFIGHTER(StandardFireFighter.class),
MOTORIZEDFIREFIGHTER(MotorizedFireFighter.class),
INDUSTRIALFIREFIGHTER(IndustrialFireFighter.class),
CLOUD(Cloud.class),
MOUNTAIN(Mountain.class),
ROAD(Road.class),
......
......@@ -13,9 +13,8 @@ import util.Position;
import util.TargetStrategy;
import java.util.*;
public class FireFighterBehavior extends FFBehavior implements TangibleBehavior<ModelElement>, RemoverBehavior<ModelElement>, ChargerBehavior<ModelElement> {
public abstract 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){
......@@ -28,18 +27,7 @@ public class FireFighterBehavior extends FFBehavior implements TangibleBehavior<
}
return targets;
}
@Override
public List<Position> update(BoardData boardData,Element element) {
Position position=element.getPosition();
List<Position> targets=initializeTargets(boardData);
for (int i = 0; i<((FireFighter)element).speed; i++) {
position=ts.neighborClosestToFire(position,targets,allLegalNeighbors(boardData));
extinguish(boardData,position);
targets.remove(position);
targets.removeAll(boardData.getNeighbor(position));
}
return List.of(position);
}
@Override
public List<ModelElement> getObstacles() {
......
package model.firefighter.behaviors;
import model.BoardData;
import model.Element;
import model.elementTokens.Chargable;
import model.elementTokens.ChargeTarget;
import model.firefighter.ModelElement;
import model.firefighter.elements.Fire;
import model.firefighter.elements.FireFighter;
import model.firefighter.elements.IndustrialFireFighter;
import model.genericBehavior.ChargerBehavior;
import model.genericBehavior.RemoverBehavior;
import model.genericBehavior.TangibleBehavior;
import util.Position;
import util.TargetStrategy;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class IndustrialFireFighterBehavior extends FireFighterBehavior implements TangibleBehavior<ModelElement>, RemoverBehavior<ModelElement>, ChargerBehavior<ModelElement> {
private TargetStrategy ts=new TargetStrategy();
@Override
public List<Position> update(BoardData boardData,Element element) {
Position position=element.getPosition();
List<Position> targets=initializeTargets(boardData);
((Chargable)element).incrementCounter();
if (((Chargable)element).isCharged()){
((Chargable)element).resetCounter();
for (int i = 0; i<((FireFighter)element).speed; i++) {
position=ts.neighborClosestToFire(position,targets,allLegalNeighbors(boardData));
targets.remove(position);
targets.removeAll(boardData.getNeighbor(position));
}
for(Position p:legalNeighbors(boardData,position))
{
extinguish(boardData,p);
}
}
return List.of(position);
}
}
package model.firefighter.behaviors;
import model.BoardData;
import model.Element;
import model.elementTokens.ChargeTarget;
import model.firefighter.FFBehavior;
import model.firefighter.ModelElement;
import model.firefighter.elements.Fire;
import model.firefighter.elements.FireFighter;
import model.firefighter.elements.IndustrialFireFighter;
import model.genericBehavior.ChargerBehavior;
import model.genericBehavior.RemoverBehavior;
import model.genericBehavior.TangibleBehavior;
import util.Position;
import util.TargetStrategy;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class NormalFireFighterBehavior extends FireFighterBehavior implements TangibleBehavior<ModelElement>, RemoverBehavior<ModelElement>, ChargerBehavior<ModelElement> {
private TargetStrategy ts=new TargetStrategy();
@Override
public List<Position> update(BoardData boardData,Element element) {
Position position=element.getPosition();
List<Position> targets=initializeTargets(boardData);
for (int i = 0; i<((FireFighter)element).speed; i++) {
position=ts.neighborClosestToFire(position,targets,allLegalNeighbors(boardData));
extinguish(boardData,position);
targets.remove(position);
targets.removeAll(boardData.getNeighbor(position));
}
return List.of(position);
}
}
......@@ -3,7 +3,6 @@ package model.firefighter.elements;
import model.*;
import model.elementTokens.Printable;
import model.elementTokens.Updatable;
import model.firefighter.behaviors.FireFighterBehavior;
import model.firefighter.ModelElement;
import util.Position;
......@@ -14,7 +13,6 @@ public abstract class FireFighter implements Element, Updatable, Printable {
public int speed;
ModelElement type;
Position position;
static Behavior behavior=new FireFighterBehavior();
public FireFighter(int speed, ModelElement type, Position position) {
this.speed = speed;
......@@ -32,7 +30,7 @@ public ModelElement getType() {
@Override
public List<Position> updateSelf(BoardData boardData) {
List<Position> positions=behavior.update(boardData,this);
List<Position> positions=getBehavior().update(boardData,this);
List<Position> modifPositions=new ArrayList<>(positions);
modifPositions.add(this.getPosition());
for (Position p:positions) {
......@@ -43,8 +41,4 @@ public List<Position> updateSelf(BoardData boardData) {
return modifPositions;
}
@Override
public Behavior getBehavior() {
return behavior;
}
}
package model.firefighter.elements;
import model.Behavior;
import model.elementTokens.Chargable;
import model.elementTokens.ChargeTarget;
import model.firefighter.ModelElement;
import model.firefighter.behaviors.FireFighterBehavior;
import model.firefighter.behaviors.IndustrialFireFighterBehavior;
import util.Position;
public class IndustrialFireFighter extends FireFighter implements Chargable {
static Behavior behavior=new IndustrialFireFighterBehavior();
int counter,max=4;
public IndustrialFireFighter(Position position) {
super(5,ModelElement.INDUSTRIALFIREFIGHTER, position);
counter=0;
}
@Override
public Behavior getBehavior() {
return behavior;
}
public int getCounter() {
return counter;
}
public void incrementCounter() {
counter++;
}
public void resetCounter() {
counter=0;
}
public boolean isCharged() {
return counter==max;
}
}
......@@ -4,7 +4,7 @@ import model.elementTokens.Updatable;
import model.firefighter.ModelElement;
import util.Position;
public class MotorizedFireFighter extends FireFighter implements Updatable {
public class MotorizedFireFighter extends NormalFireFighter {
public MotorizedFireFighter(Position position) {
super(2, ModelElement.MOTORIZEDFIREFIGHTER, position);
}
......
package model.firefighter.elements;
import model.Behavior;
import model.firefighter.ModelElement;
import model.firefighter.behaviors.NormalFireFighterBehavior;
import util.Position;
public abstract class NormalFireFighter extends FireFighter {
static Behavior behavior=new NormalFireFighterBehavior();
public NormalFireFighter(int speed, ModelElement type, Position position) {
super(speed, type, position);
}
@Override
public Behavior getBehavior() {
return behavior;
}
}
......@@ -3,7 +3,7 @@ package model.firefighter.elements;
import model.firefighter.ModelElement;
import util.Position;
public class StandardFireFighter extends FireFighter{
public class StandardFireFighter extends NormalFireFighter{
public StandardFireFighter(Position position) {
super(1, ModelElement.FIREFIGHTER, position);
}
......
......@@ -13,7 +13,8 @@ public enum ViewElement {
ROCK(Color.GREEN, Rock.class),
MOUNTAIN(Color.gray(0.2), Mountain.class),
FIREFIGHTER(Color.LIGHTBLUE, StandardFireFighter.class),
MOTORIZEDFIREFIGHTER(Color.DARKBLUE, MotorizedFireFighter.class),
MOTORIZEDFIREFIGHTER(Color.BLUE, MotorizedFireFighter.class),
INDUSTRIALFIREFIGHTER(Color.DARKBLUE, IndustrialFireFighter.class),
CLOUD(Color.gray(0.8), Cloud.class),
FIRE(Color.RED, Fire.class,Fire.factory),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment