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

Merge remote-tracking branch 'origin/main'

# Conflicts:
#	.gradle/8.4/checksums/checksums.lock
#	.gradle/8.4/checksums/md5-checksums.bin
#	.gradle/8.4/checksums/sha1-checksums.bin
#	.gradle/8.4/dependencies-accessors/dependencies-accessors.lock
#	.gradle/8.4/executionHistory/executionHistory.bin
#	.gradle/8.4/executionHistory/executionHistory.lock
#	.gradle/8.4/fileHashes/fileHashes.bin
#	.gradle/8.4/fileHashes/fileHashes.lock
#	.gradle/8.4/fileHashes/resourceHashesCache.bin
#	.gradle/buildOutputCleanup/buildOutputCleanup.lock
#	.gradle/buildOutputCleanup/cache.properties
#	.gradle/buildOutputCleanup/outputFiles.bin
#	build/classes/java/main/app/SimulatorApplication.class
#	build/classes/java/main/controller/Controller.class
#	build/classes/java/main/model/Board.class
#	build/classes/java/main/model/BoardElement.class
#	build/classes/java/main/model/EmptyElement.class
#	build/classes/java/main/model/ExtinguishFire/Cloud.class
#	build/classes/java/main/model/ExtinguishFire/ExtinguishFire.class
#	build/classes/java/main/model/ExtinguishFire/FireFighter.class
#	build/classes/java/main/model/Flammable/Fire.class
#	build/classes/java/main/model/Flammable/Flammable.class
#	build/classes/java/main/model/GameBoard.class
#	build/classes/java/main/model/Visitor/CrossMountain.class
#	build/classes/java/main/model/Visitor/CrossRoad.class
#	build/classes/java/main/model/Visitor/FireFinder.class
#	build/classes/java/main/model/Visitor/Visitor.class
#	build/classes/java/main/module-info.class
#	build/tmp/compileJava/compileTransaction/stash-dir/ExtinguishFire.class.uniqueId0
#	build/tmp/compileJava/previous-compilation-data.bin
parents 6265060b 4f09ba81
Branches
No related tags found
No related merge requests found
......@@ -3,6 +3,8 @@ package model.Flammable;
import javafx.scene.paint.Color;
import model.BoardElement;
import model.GameBoard;
import model.Visitor.CrossMountain;
import model.Visitor.CrossRoad;
import model.Visitor.FireFinder;
import model.Visitor.Visitor;
import util.Position;
......@@ -15,6 +17,7 @@ public class Fire implements Flammable{
public Fire(Color color){
this.color = color;
initialize();
}
@Override
......@@ -28,15 +31,14 @@ public class Fire implements Flammable{
}
@Override
public void initialize(int initialFireCount, HashMap<Position, ArrayList<BoardElement>> elementPosition) {
public void initialize() {
FireFinder fireFinder=new FireFinder();
Position position = GameBoard.randomPosition();
boolean canInitialise;
for (int index = 0; index < initialFireCount; index++) {
if(elementPosition.containsKey(position)) {
if(GameBoard.elementPosition.containsKey(position)) {
for (;;) {
canInitialise=true;
for (BoardElement element : elementPosition.get(position)) {
for (BoardElement element : GameBoard.elementPosition.get(position)) {
if (element.accept(fireFinder)) {
canInitialise=false;
break;
......@@ -46,43 +48,69 @@ public class Fire implements Flammable{
break;
}
position = GameBoard.randomPosition();
if(!elementPosition.containsKey(position))break;
if(!GameBoard.elementPosition.containsKey(position))break;
}
if(elementPosition.containsKey(position))
elementPosition.get(position).add(new Fire(Color.RED));
if(GameBoard.elementPosition.containsKey(position))
GameBoard.elementPosition.get(position).add(this);
else{
ArrayList<BoardElement> boardElements = new ArrayList<>();
boardElements.add(new Fire(Color.RED));
elementPosition.put(position,boardElements);
boardElements.add(this);
GameBoard.elementPosition.put(position,boardElements);
}
continue;
}
ArrayList<BoardElement> boardElements = new ArrayList<>();
boardElements.add(new Fire(Color.RED));
elementPosition.put(position,boardElements);
}
boardElements.add(this);
GameBoard.elementPosition.put(position,boardElements);
}
@Override
public List<Position> updateFlammable(GameBoard gameBoard) {
FireFinder fireFinder=new FireFinder();
List<Position> result = new ArrayList<>();
@Override // TODO: 15/11/2023
public void update(GameBoard gameBoard , Position position,HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition) {
if(extinguishPosition.contains(position)){
return ;
}
if (gameBoard.stepNumber() % 2 == 0) {
List<Position> newFirePositions = new ArrayList<>();
for (Map.Entry<Position, ArrayList<BoardElement>> entry : gameBoard.getElementPosition().entrySet()){
for(BoardElement element : entry.getValue()){
if (element.accept(fireFinder)){
newFirePositions.addAll(gameBoard.neighbors(entry.getKey()));
List<Position> newPositions = new ArrayList<>();
newPositions.addAll(gameBoard.neighbors(position));
if(newElementPosition.containsKey(position))
newElementPosition.get(position).add(this);
else {
newElementPosition.put(position,(new ArrayList<>()));
newElementPosition.get(position).add(this);
}
for(Position newPosition : newPositions){
if(extinguishPosition.contains(newPosition))
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())){
break;
}
else if(!boardElement.accept( new FireFinder())&& !boardElement.accept(new CrossRoad()) && !boardElement.accept(new CrossMountain())){
newElementPosition.get(newPosition).add(this);
}
}
}
for(Position position : newFirePositions){
gameBoard.getElementPosition().get(position).add(new Fire(Color.RED));
else{
ArrayList<BoardElement> boardElements = new ArrayList<>();
boardElements.add(this);
newElementPosition.put(newPosition,boardElements);
//System.out.println(GameBoard.elementPosition.get(position).get(0).getColor());
}
result.addAll(newFirePositions);
}
return result;
}
else{
if(newElementPosition.containsKey(position))
newElementPosition.get(position).add(this);
else {
newElementPosition.put(position,(new ArrayList<>()));
newElementPosition.get(position).add(this);
}
}
}
}
......@@ -10,7 +10,5 @@ import java.util.List;
public interface Flammable extends BoardElement{
void initialize(int initialFireCount, HashMap<Position, ArrayList<BoardElement>> elementPosition);
List<Position> updateFlammable(GameBoard gameBoard);
void update(GameBoard gameBoard, Position position,HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition);
}
package model;
import javafx.scene.paint.Color;
import model.ExtinguishFire.FireFighter;
import model.Flammable.Fire;
import model.Builder.FireFirefightersBuilder;
import model.Builder.GameManage;
import model.ExtinguishFire.ExtinguishFire;
import model.Flammable.Flammable;
import model.Visitor.FireFinder;
import util.Position;
import java.util.*;
public class GameBoard implements Board<List<BoardElement>>{
public class GameBoard implements Board{
static int columnCount;
static int rowCount;
private final int initialFireCount;
private final int initialFirefighterCount;
private int initialFireCount;
private int initialFirefighterCount;
private int initialCloudCount;
private int initialMotorizedFireFighterCount;
private int step = 0;
static Random randomGenerator = new Random();
private HashMap<Position, ArrayList<BoardElement>> elementPosition;
public HashMap<Position, ArrayList<BoardElement>> getElementPosition() {
return elementPosition;
}
public GameBoard(int columnCount,int rowCount,int initialFireCount, int initialFirefighterCount) {
public static HashMap<Position, ArrayList<BoardElement>> elementPosition=new HashMap<>();
public GameBoard(int columnCount,int rowCount,int initialFireCount, int initialFirefighterCount,int initialCloudCount,int initialMotorizedFireFighterCount) {
this.columnCount = columnCount;
this.rowCount = rowCount;
this.initialFireCount = initialFireCount;
this.initialFirefighterCount = initialFirefighterCount;
initializeElements();
this.initialCloudCount = initialCloudCount;
this.initialMotorizedFireFighterCount=initialMotorizedFireFighterCount;
}
public void initializeElements(){
elementPosition=new HashMap<>();
Fire fire=new Fire(Color.RED);
FireFighter fireFighter=new FireFighter(Color.BLUE);
fire.initialize(initialFireCount,elementPosition);
fireFighter.initialize(initialFirefighterCount,elementPosition);
FireFirefightersBuilder fireFirefighterBuilder=new FireFirefightersBuilder();
fireFirefighterBuilder.Build(this.initialFireCount,this.initialFirefighterCount,this.initialCloudCount,this.initialMotorizedFireFighterCount);
}
public static Position randomPosition() {
return new Position(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(columnCount));
}
@Override
public List<Position> updateToNextGeneration() {
List<Position> result = new FireFighter(Color.BLUE).updateFirefighters(this);
result.addAll(new Fire(Color.RED).updateFlammable(this));
public void updateToNextGeneration() {
HashMap<Position, ArrayList<BoardElement>> newElementPosition = new HashMap<>();
ArrayList<Position> extinguishPosition = new ArrayList<>();
for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPosition.entrySet()){
for(BoardElement element : entry.getValue()){
if (!element.accept(new FireFinder())){
ExtinguishFire element1 = (ExtinguishFire) element;
element1.update(this,entry.getKey(),newElementPosition,extinguishPosition);
}
}
}
for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPosition.entrySet()){
for(BoardElement element : entry.getValue()){
if (element.accept(new FireFinder())){
Flammable element1 = (Flammable) element;
element1.update(this,entry.getKey(),newElementPosition,extinguishPosition);
}
}
}
elementPosition.clear();
extinguishPosition.clear();
for (Map.Entry<Position, ArrayList<BoardElement>> entry : newElementPosition.entrySet()){
if(elementPosition.containsKey(entry.getKey())){
elementPosition.get(entry.getKey()).addAll(entry.getValue());
}else{
elementPosition.put(entry.getKey(),entry.getValue());
}
}
step++;
return result;
}
@Override
public List<BoardElement> getState(Position position) {
return elementPosition.get(position);
public Object getState(Position position) {
return null;
}
@Override
public void setState(List<BoardElement> state, Position position) {
for(int index = 0 ; index<elementPosition.get(position).size() ; index++){
elementPosition.get(position).remove(index);
public void setState(Object state, Position position) {
}
}
@Override
public int rowCount() {
......@@ -76,6 +103,7 @@ public class GameBoard implements Board<List<BoardElement>>{
@Override
public void reset() {
step = 0;
elementPosition.clear();
initializeElements();
}
......@@ -94,6 +122,7 @@ public class GameBoard implements Board<List<BoardElement>>{
}
public Position neighborClosestToFire(Position position) {
FireFinder fireFinder = new FireFinder();
Set<Position> firePositions = new HashSet<>();
Set<Position> seen = new HashSet<>();
......@@ -122,15 +151,22 @@ public class GameBoard implements Board<List<BoardElement>>{
return position;
}
public void extinguish(Position position) {
/*public void extinguish(Position position) {
FireFinder fireFinder = new FireFinder();
for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPosition.entrySet()){
for(BoardElement element : entry.getValue()){
if (element.accept(fireFinder)){
entry.getValue().remove(element);
HashMap<Position, ArrayList<BoardElement>> elementPositionCopie = new HashMap<>();
for (Map.Entry<Position, ArrayList<BoardElement>> entry : this.elementPosition.entrySet()){
elementPositionCopie.put(entry.getKey(),entry.getValue());
}
for (BoardElement boardElement : elementPositionCopie.get(position)){
if (boardElement.accept(fireFinder) && elementPosition.get(position).size()!=0){
this.elementPosition.get(position).remove(boardElement);
break;
}
if (boardElement.accept(fireFinder) && elementPosition.get(position).size()==0){
this.elementPosition.get(position).remove(boardElement);
this.elementPosition.remove(position);
}
}
}*/
}
package model.Visitor;
import model.ExtinguishFire.Cloud;
import model.ExtinguishFire.FireFighter;
import model.ExtinguishFire.MotorizedFireFighter;
import model.Flammable.Fire;
......@@ -16,7 +17,8 @@ public class CrossMountain implements Visitor {
public boolean visit(FireFighter fireFighter) {
return false;
}
@Override
public boolean visit(Cloud cloud) {return true;}
@Override
public boolean visit(MotorizedFireFighter motorizedFireFighter) {
return false;
......
package model.Visitor;
import model.ExtinguishFire.Cloud;
import model.ExtinguishFire.FireFighter;
import model.ExtinguishFire.MotorizedFireFighter;
import model.Flammable.Fire;
......@@ -17,11 +18,16 @@ public class CrossRoad implements Visitor {
return true;
}
@Override
public boolean visit(Cloud cloud) {return true;}
@Override
public boolean visit(MotorizedFireFighter motorizedFireFighter) {
return true;
}
@Override
public boolean visit(Mountain mountain) {
return false;
......@@ -29,6 +35,6 @@ public class CrossRoad implements Visitor {
@Override
public boolean visit(Road road) {
return false;
return true;
}
}
package model.Visitor;
import model.ExtinguishFire.FireFighter;
import model.ExtinguishFire.MotorizedFireFighter;
import model.Flammable.Fire;
import model.Obstacle.Mountain;
import model.Obstacle.Road;
public class FireFighterFinder implements Visitor{
public boolean visit(Fire fire) {
return false;
}
@Override
public boolean visit(FireFighter fireFighter) {
return true;
}
@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.ExtinguishFire.Cloud;
import model.ExtinguishFire.FireFighter;
import model.ExtinguishFire.MotorizedFireFighter;
import model.Flammable.Fire;
......@@ -17,6 +18,9 @@ public class FireFinder implements Visitor {
return false;
}
@Override
public boolean visit(Cloud cloud) {return false;}
@Override
public boolean visit(MotorizedFireFighter motorizedFireFighter) {
return false;
......
package model.Visitor;
import model.ExtinguishFire.Cloud;
import model.ExtinguishFire.FireFighter;
import model.ExtinguishFire.MotorizedFireFighter;
import model.Flammable.Fire;
......@@ -10,6 +11,7 @@ public interface Visitor {
boolean visit(Fire fire);
boolean visit(FireFighter fireFighter);
boolean visit(Cloud cloud);
boolean visit(MotorizedFireFighter motorizedFireFighter);
boolean visit(Mountain mountain);
boolean visit(Road road);
......
......@@ -20,8 +20,8 @@ public class FirefighterGrid extends Canvas implements Grid<model.BoardElement>{
@Override
public void repaint(List<Pair<Position, model.BoardElement>> positionedElements) {
//clear(positionedElements);
//paint(positionedElements);
clear(positionedElements);
paint(positionedElements);
paintLines();
}
......@@ -34,7 +34,7 @@ public class FirefighterGrid extends Canvas implements Grid<model.BoardElement>{
private void paint(List<Pair<Position, BoardElement>> positionedElements) {
for(Pair<Position, BoardElement> pair : positionedElements){
//paintElementAtPosition(pair.getValue(), pair.getKey());
paintElementAtPosition(pair.getValue(), pair.getKey());
}
}
......
......@@ -7,33 +7,33 @@ import java.util.List;
import static org.assertj.core.api.Assertions.*;
/*public class FirefighterBoardTest {
public class FirefighterBoardTest {/*
@Test
void testColumnCount(){
Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3);
Board board = new GameBoard(20, 10, 1, 3);
assertThat(board.columnCount()).isEqualTo(20);
}
@Test
void testRowCount(){
Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3);
Board<List board = new GameBoard(20, 10, 1, 3);
assertThat(board.rowCount()).isEqualTo(10);
}
@Test
void testStepNumber(){
Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3);
Board board = new GameBoard(20, 10, 1, 3);
for(int index = 0; index < 10; index++){
assertThat(board.stepNumber()).isEqualTo(index);
board.updateToNextGeneration();
}
assertThat(board.stepNumber()).isEqualTo(10);
}
@Test
/*@Test
void testGetState_afterSet(){
Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 0, 0);
Board<List<BoardElement>> board = new GameBoard(20, 10, 0, 0);
Position position = new Position(1,2);
assertThat(board.getState(position)).isEmpty();
board.setState(List.of(ModelElement.FIRE), position);
board.setState(List.of(BoardElement.FIRE), position);
assertThat(board.getState(position)).containsExactly(ModelElement.FIRE);
}
}*/
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment