Skip to content
Snippets Groups Projects
Commit abe9b3ce authored by LATIOUI Abdelilah's avatar LATIOUI Abdelilah
Browse files

Implementation of Mountain.class and some changes

parent 6d7bbd8b
Branches
No related tags found
No related merge requests found
Pipeline #24886 passed
......@@ -17,7 +17,7 @@ import static model.GameBoard.elementPosition;
public class MotorizedFireFighter implements ExtinguishFire {
Color color;
private final Color color;
public MotorizedFireFighter(Color color){
this.color=color;
......
......@@ -33,13 +33,14 @@ public class Fire implements Flammable{
@Override
public void initialize() {
FireFinder fireFinder=new FireFinder();
CrossMountain crossMountain = new CrossMountain();
Position position = GameBoard.randomPosition();
boolean canInitialise;
if(GameBoard.elementPosition.containsKey(position)) {
for (;;) {
canInitialise=true;
for (BoardElement element : GameBoard.elementPosition.get(position)) {
if (element.accept(fireFinder)) {
if (element.accept(fireFinder) || element.accept(crossMountain)) {
canInitialise=false;
break;
}
......@@ -63,7 +64,7 @@ public class Fire implements Flammable{
GameBoard.elementPosition.put(position,boardElements);
}
@Override // TODO: 15/11/2023
@Override
public void update(GameBoard gameBoard , Position position,HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition) {
if(extinguishPosition.contains(position)){
return ;
......@@ -82,7 +83,7 @@ public class Fire implements Flammable{
continue;
if(GameBoard.elementPosition.containsKey(newPosition)) {
for(BoardElement boardElement : GameBoard.elementPosition.get(newPosition)){
if(boardElement.accept(new FireFinder()) && boardElement.accept(new CrossRoad()) && boardElement.accept(new CrossMountain())){
if(boardElement.accept(new FireFinder()) || boardElement.accept(new CrossRoad()) || boardElement.accept(new CrossMountain())){
break;
}
else if(!boardElement.accept( new FireFinder())&& !boardElement.accept(new CrossRoad()) && !boardElement.accept(new CrossMountain())){
......@@ -95,7 +96,6 @@ public class Fire implements Flammable{
ArrayList<BoardElement> boardElements = new ArrayList<>();
boardElements.add(this);
newElementPosition.put(newPosition,boardElements);
//System.out.println(GameBoard.elementPosition.get(position).get(0).getColor());
}
}
......
......@@ -10,5 +10,5 @@ import java.util.List;
public interface Flammable extends BoardElement{
void update(GameBoard gameBoard, Position position,HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition);
//void update(GameBoard gameBoard, Position position,HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition);
}
......@@ -16,6 +16,8 @@ public class GameBoard implements Board{
private int initialFirefighterCount;
private int initialCloudCount;
private int initialMotorizedFireFighterCount;
private int initialMountainCount;
private int step = 0;
static Random randomGenerator = new Random();
......@@ -25,18 +27,19 @@ public class GameBoard implements Board{
public static HashMap<Position, ArrayList<BoardElement>> elementPosition=new HashMap<>();
public GameBoard(int columnCount,int rowCount,int initialFireCount, int initialFirefighterCount,int initialCloudCount,int initialMotorizedFireFighterCount) {
public GameBoard(int columnCount,int rowCount,int initialFireCount, int initialFirefighterCount,int initialCloudCount,int initialMotorizedFireFighterCount,int initialMountainCount) {
this.columnCount = columnCount;
this.rowCount = rowCount;
this.initialFireCount = initialFireCount;
this.initialFirefighterCount = initialFirefighterCount;
this.initialCloudCount = initialCloudCount;
this.initialMotorizedFireFighterCount=initialMotorizedFireFighterCount;
this.initialMountainCount = initialMountainCount;
}
public void initializeElements(){
FireFirefightersBuilder fireFirefighterBuilder=new FireFirefightersBuilder();
fireFirefighterBuilder.Build(this.initialFireCount,this.initialFirefighterCount,this.initialCloudCount,this.initialMotorizedFireFighterCount);
fireFirefighterBuilder.Build(this.initialFireCount,this.initialFirefighterCount,this.initialCloudCount,this.initialMotorizedFireFighterCount,this.initialMountainCount);
}
public static Position randomPosition() {
......@@ -50,8 +53,8 @@ public class GameBoard implements Board{
for(BoardElement element : entry.getValue()){
if (!element.accept(new FireFinder())){
ExtinguishFire element1 = (ExtinguishFire) element;
element1.update(this,entry.getKey(),newElementPosition,extinguishPosition);
element.update(this,entry.getKey(),newElementPosition,extinguishPosition);
}
}
}
......
package model.Obstacle;
public class Mountain {
import javafx.scene.paint.Color;
import model.BoardElement;
import model.GameBoard;
import model.Visitor.FireFinder;
import model.Visitor.Visitor;
import util.Position;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import static model.GameBoard.elementPosition;
public class Mountain implements Obstacles{
private final Color color;
public Mountain(Color color){
this.color=color;
initialize();
}
@Override
public Color getColor() {
return color;
}
@Override
public Boolean accept(Visitor visitor) {
return visitor.visit(this);
}
@Override
public void initialize() {
Position position = GameBoard.randomPosition();
if (elementPosition.containsKey(position))
elementPosition.get(position).add(this);
else {
ArrayList<BoardElement> boardElements = new ArrayList<>();
boardElements.add(this);
elementPosition.put(position, boardElements);
}
}
@Override
public void update(GameBoard gameBoard, Position position, HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition) {
if(newElementPosition.containsKey(position))
newElementPosition.get(position).add(this);
else{
ArrayList<BoardElement> boardElements = new ArrayList<>();
boardElements.add(this);
newElementPosition.put(position,boardElements);
}
}
}
package model.Obstacle;
import model.BoardElement;
import model.GameBoard;
import util.Position;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public interface Obstacles extends BoardElement {
//void update(GameBoard gameBoard, Position position, HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition);
}
......@@ -6,42 +6,52 @@ import javafx.util.Pair;
import model.BoardElement;
import util.Position;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class FirefighterGrid extends Canvas implements Grid<model.BoardElement>{
private void paintElementAtPosition(model.BoardElement element, Position position) {
paintSquare(position.row(), position.column(), element.getColor());
private void paintElementAtPosition(ArrayList<BoardElement> elementsAtPosition, Position position) {
paintSquare(position.row(), position.column(), elementsAtPosition);
}
private void paintSquare(int row, int column, ArrayList<BoardElement> elementsAtPosition) {
double squareWidthDivide = squareWidth / elementsAtPosition.size();
double lineWidth = 2;
for (int i = 0; i < elementsAtPosition.size(); i++) {
BoardElement element = elementsAtPosition.get(i);
getGraphicsContext2D().setFill(element.getColor());
getGraphicsContext2D().fillRect(row * squareHeight, (column * squareWidth) + (i * squareWidthDivide), squareHeight, squareWidthDivide);
if(i!=0) {
getGraphicsContext2D().setFill(Color.WHITE);
getGraphicsContext2D().fillRect(row * squareHeight, (column * squareWidth) + ((i) * squareWidthDivide) - lineWidth / 2, squareHeight, lineWidth);
}
}
}
private int squareWidth;
private int squareHeight;
private int columnCount;
private int rowCount;
@Override
/*@Override
public void repaint(List<Pair<Position, model.BoardElement>> positionedElements) {
clear(positionedElements);
paint(positionedElements);
paintLines();
}
}*/
private void clear(List<Pair<Position, BoardElement>> positionedElements) {
for (Pair<Position, BoardElement> positionElement : positionedElements) {
Position position = positionElement.getKey();
clearSquare(position.row(), position.column());
}
}
private void paint(List<Pair<Position, BoardElement>> positionedElements) {
for(Pair<Position, BoardElement> pair : positionedElements){
paintElementAtPosition(pair.getValue(), pair.getKey());
}
}
@Override
public void repaint(model.BoardElement[][] elements) {
public void repaint(HashMap<Position, ArrayList<BoardElement>> elementPositionGrid) {
clear();
paint(elements);
paint(elementPositionGrid);
paintLines();
}
......@@ -49,10 +59,10 @@ public class FirefighterGrid extends Canvas implements Grid<model.BoardElement>{
getGraphicsContext2D().clearRect(0,0,getWidth(), getHeight());
}
private void paint(model.BoardElement[][] elements) {
private void paint(HashMap<Position, ArrayList<BoardElement>> elementPositionGrid) {
for(int column = 0; column < columnCount; column++)
for(int row = 0; row < rowCount; row++){
paintElementAtPosition(elements[row][column], new Position(row, column));
paintElementAtPosition(elementPositionGrid.get(new Position(row, column)),new Position(row,column));
}
}
......@@ -87,10 +97,7 @@ public class FirefighterGrid extends Canvas implements Grid<model.BoardElement>{
getGraphicsContext2D().strokeLine(0, row*squareHeight, getWidth(), row*squareHeight);
}
private void paintSquare(int row, int column, Color color){
getGraphicsContext2D().setFill(color);
getGraphicsContext2D().fillRect(row*squareHeight,column*squareWidth,squareHeight,squareWidth);
}
private void clearSquare(int row, int column){
getGraphicsContext2D().clearRect(row*squareHeight,column*squareWidth,squareHeight,squareWidth);
......
......@@ -4,6 +4,8 @@ import javafx.util.Pair;
import model.BoardElement;
import util.Position;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
......@@ -18,7 +20,7 @@ public interface Grid<E> {
*
* @param elements A list of pairs, each containing a position and the element to be displayed at that position.
*/
void repaint(List<Pair<Position, E>> elements);
// void repaint(List<Pair<Position, E>> elements);
/**
* Repaint the grid with a two-dimensional array of elements. The array's dimensions should match
......@@ -53,6 +55,6 @@ public interface Grid<E> {
*/
int rowCount();
void repaint(BoardElement[][] boardElements);
void repaint(HashMap<Position, ArrayList<BoardElement>> elementPositionGrid);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment