Skip to content
Snippets Groups Projects
Commit 1341cc13 authored by 1380's avatar 1380
Browse files

In order to implement the Visitor design pattern, we create various...

In order to implement the Visitor design pattern, we create various sub-packages, each one contains different classes and interfaces
parent 3c486887
No related branches found
No related tags found
No related merge requests found
Pipeline #23961 passed
Showing
with 285 additions and 7 deletions
...@@ -15,8 +15,8 @@ public class SimulatorApplication extends javafx.application.Application { ...@@ -15,8 +15,8 @@ public class SimulatorApplication extends javafx.application.Application {
private static final String APP_NAME = "Firefighter simulator"; private static final String APP_NAME = "Firefighter simulator";
private static final int ROW_COUNT = 20; private static final int ROW_COUNT = 20;
private static final int COLUMN_COUNT = 20; private static final int COLUMN_COUNT = 20;
private static final int SQUARE_WIDTH = 50; private static final int SQUARE_WIDTH = 30;
private static final int SQUARE_HEIGHT = 50; private static final int SQUARE_HEIGHT = 30;
public static final int INITIAL_FIRE_COUNT = 3; public static final int INITIAL_FIRE_COUNT = 3;
public static final int INITIAL_FIREFIGHTER_COUNT = 6; public static final int INITIAL_FIREFIGHTER_COUNT = 6;
......
package model;
import javafx.scene.paint.Color;
import model.Visitor.Visitor;
import util.Position;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
public interface BoardElement {
Color getColor();
void setColor(Color color);
Boolean accept(Visitor visitor);
void initialize(int initialElementCount, HashMap<Position, ArrayList<BoardElement>> elementPosition);
}
package model.ExtenguishFire;
public class Cloud {
}
package model.ExtenguishFire;
public class FireFighter {
}
package model.ExtenguishFire;
import model.BoardElement;
import util.Position;
import java.util.List;
public interface FireFighters extends BoardElement {
List<Position> updateFirefighters();
boolean accept();
}
package model.ExtenguishFire;
public class MotorizedFireFighter {
}
...@@ -6,14 +6,15 @@ import java.util.*; ...@@ -6,14 +6,15 @@ import java.util.*;
public class FirefighterBoard implements Board<List<ModelElement>> { public class FirefighterBoard implements Board<List<ModelElement>> {
private final int columnCount; static int columnCount;
private final int rowCount; static int rowCount;
private final int initialFireCount; private final int initialFireCount;
private final int initialFirefighterCount; private final int initialFirefighterCount;
protected HashMap<Position,ArrayList<BoardElement>> elementPosition;
private List<Position> firefighterPositions; private List<Position> firefighterPositions;
private Set<Position> firePositions; private Set<Position> firePositions;
private int step = 0; private int step = 0;
private final Random randomGenerator = new Random(); static Random randomGenerator = new Random();
public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount) { public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount) {
this.columnCount = columnCount; this.columnCount = columnCount;
...@@ -32,7 +33,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> { ...@@ -32,7 +33,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
firefighterPositions.add(randomPosition()); firefighterPositions.add(randomPosition());
} }
private Position randomPosition() { public static Position randomPosition() {
return new Position(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(columnCount)); return new Position(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(columnCount));
} }
......
package model.Flammable;
import javafx.scene.paint.Color;
import model.BoardElement;
import model.FirefighterBoard;
import model.Visitor.FireFinder;
import model.Visitor.Visitor;
import util.Position;
import java.util.*;
public class Fire implements Fires{
private Color color;
public Fire(){
}
public Fire(Color color){
this.color = color;
}
@Override
public Color getColor() {
return this.color;
}
@Override
public void setColor(Color color) {
this.color = color;
}
@Override
public Boolean accept(Visitor visitor){
return visitor.visit(this);
}
@Override
public void initialize(int initialFireCount, HashMap<Position, ArrayList<BoardElement>> elementPosition) {
FireFinder fireFinder=new FireFinder();
Position position = FirefighterBoard.randomPosition();
int index;
for ( index = 0; index < initialFireCount; index++) {
if(elementPosition.containsKey(position) ) {
for (BoardElement element : elementPosition.get(position)) {
if (!element.accept(fireFinder)) {
break;
}
}
if(index==-1){
elementPosition.get(position).add(new Fire());
}
}
else{
ArrayList<BoardElement> boardElements = new ArrayList<>();
boardElements.add(new Fire());
elementPosition.put(position,boardElements);
}
}
}
/*if(elementPosition.containsKey(position) && ){
continue;
}
else if(elementPosition.containsKey(position)){
elementPosition.get(position).add(fire);
}
else{
ArrayList<BoardElement> boardElements = new ArrayList<>();
boardElements.add(fire);
elementPosition.put(position,boardElements);
}
}
}*/
@Override
public List<Position> updateFires() {
return null;
}
}
package model.Flammable;
import javafx.scene.paint.Color;
import model.BoardElement;
import model.Visitor.Visitor;
import util.Position;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public interface Fires extends BoardElement{
void setColor(Color color);
Boolean accept(Visitor visitor);
void initialize(int initialFireCount, HashMap<Position, ArrayList<BoardElement>> elementPosition);
List<Position> updateFires();
}
package model.Obstacle;
public class Mountain {
}
package model.Obstacle;
import model.BoardElement;
import util.Position;
import java.util.List;
public interface Obstacles extends BoardElement {
boolean accept();
}
package model.Obstacle;
public class Road {
}
package model.Visitor;
import model.ExtenguishFire.FireFighter;
import model.ExtenguishFire.MotorizedFireFighter;
import model.Flammable.Fire;
import model.Obstacle.Mountain;
import model.Obstacle.Road;
public class CrossMountain implements Visitor {
@Override
public boolean visit(Fire fire) {
return false;
}
@Override
public boolean visit(FireFighter fireFighter) {
return false;
}
@Override
public boolean visit(MotorizedFireFighter motorizedFireFighter) {
return false;
}
@Override
public boolean visit(Mountain mountain) {
return false;
}
@Override
public boolean visit(Road road) {
return false;
}
}
package model.Visitor;
import model.ExtenguishFire.FireFighter;
import model.ExtenguishFire.MotorizedFireFighter;
import model.Flammable.Fire;
import model.Obstacle.Mountain;
import model.Obstacle.Road;
public class CrossRoad implements Visitor {
@Override
public boolean visit(Fire fire) {
return false;
}
@Override
public boolean visit(FireFighter fireFighter) {
return true;
}
@Override
public boolean visit(MotorizedFireFighter motorizedFireFighter) {
return true;
}
@Override
public boolean visit(Mountain mountain) {
return false;
}
@Override
public boolean visit(Road road) {
return false;
}
}
package model.Visitor;
import model.ExtenguishFire.FireFighter;
import model.ExtenguishFire.MotorizedFireFighter;
import model.Flammable.Fire;
import model.Obstacle.Mountain;
import model.Obstacle.Road;
public class FireFinder implements Visitor {
@Override
public boolean visit(Fire fire) {
return true;
}
@Override
public boolean visit(FireFighter fireFighter) {
return false;
}
@Override
public boolean visit(MotorizedFireFighter motorizedFireFighter) {
return false;
}
@Override
public boolean visit(Mountain mountain) {
return false;
}
@Override
public boolean visit(Road road) {
return false;
}
}
package model.Visitor;
import model.ExtenguishFire.FireFighter;
import model.ExtenguishFire.MotorizedFireFighter;
import model.Flammable.Fire;
import model.Flammable.Fires;
import model.Obstacle.Mountain;
import model.Obstacle.Road;
public interface Visitor {
boolean visit(Fire fire);
boolean visit(FireFighter fireFighter);
boolean visit(MotorizedFireFighter motorizedFireFighter);
boolean visit(Mountain mountain);
boolean visit(Road road);
}
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
mnemonicParsing="false" onAction="#pauseToggleButtonAction" prefHeight="24.0" mnemonicParsing="false" onAction="#pauseToggleButtonAction" prefHeight="24.0"
prefWidth="200.0" styleClass="button" text="Pause"/> prefWidth="200.0" styleClass="button" text="Pause"/>
</VBox> </VBox>
<FirefighterGrid fx:id="grid" width="1000.0" height="1000.0" <FirefighterGrid fx:id="grid" width="600.0" height="600.0"
xmlns="http://javafx.com/javafx" xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"> xmlns:fx="http://javafx.com/fxml">
</FirefighterGrid> </FirefighterGrid>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment