Skip to content
Snippets Groups Projects
Commit f8fde7b0 authored by Yanis O's avatar Yanis O Committed by melizzzz
Browse files

Ajout de la propagation du feu

parent de9cc271
No related branches found
No related tags found
No related merge requests found
package model; package model;
import java.util.ArrayList;
import java.util.List;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import util.Position; import util.Position;
...@@ -11,8 +14,8 @@ public class EmptySquare implements Entity{ ...@@ -11,8 +14,8 @@ public class EmptySquare implements Entity{
this.position = p; this.position = p;
} }
@Override @Override
public void nextTurn(Board<Entity> board) { public List<Position> nextTurn(Board<Entity> board) {
return; return new ArrayList<Position>();
} }
@Override @Override
...@@ -28,4 +31,13 @@ public class EmptySquare implements Entity{ ...@@ -28,4 +31,13 @@ public class EmptySquare implements Entity{
public Color getViewColor(){ public Color getViewColor(){
return this.viewColor; return this.viewColor;
} }
@Override
public int getAge() {
return -999;
}
@Override
public void incrementAge() {
return;
}
} }
...@@ -10,16 +10,29 @@ public class Fire implements Entity{ ...@@ -10,16 +10,29 @@ public class Fire implements Entity{
Board<Entity> b; Board<Entity> b;
private Position position; private Position position;
private final Color viewColor = Color.RED; private final Color viewColor = Color.RED;
private int age;
public Fire(Position position, Board<Entity> b){ public Fire(Position position, Board<Entity> b){
this.b = b;
this.position = position; this.position = position;
this.age = 0;
}
public Fire(Position position, Board<Entity> b, int age){
this.b = b;
this.position = position;
this.age = age;
} }
@Override @Override
public void nextTurn(Board<Entity> board) { public List<Position> nextTurn(Board<Entity> board) {
age = age +1;
List<Position> positions = generateAdjacentPosition(); List<Position> positions = generateAdjacentPosition();
for(Position p : positions){ for(Position p : positions){
board.setState(new Fire(p, board), p); board.setState(new Fire(p, board), p);
if(!b.doesPositionExist(p)){
positions.remove(p);
}
} }
return positions;
} }
private List<Position> generateAdjacentPosition(){ private List<Position> generateAdjacentPosition(){
...@@ -49,4 +62,14 @@ public class Fire implements Entity{ ...@@ -49,4 +62,14 @@ public class Fire implements Entity{
public Color getViewColor(){ public Color getViewColor(){
return this.viewColor; return this.viewColor;
} }
@Override
public int getAge() {
return this.age;
}
@Override
public void incrementAge() {
this.age = age + 1 ;
}
} }
package model; package model;
import java.util.ArrayList;
import java.util.List;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import util.Position; import util.Position;
public class FireFighter implements Entity{ public class FireFighter implements Entity{
private int age;
private Position position; private Position position;
private final Color viewColor = Color.BLUE; private final Color viewColor = Color.BLUE;
private Board<Entity> board; private Board<Entity> board;
...@@ -10,9 +14,19 @@ public class FireFighter implements Entity{ ...@@ -10,9 +14,19 @@ public class FireFighter implements Entity{
public FireFighter(Position position, Board<Entity> b){ public FireFighter(Position position, Board<Entity> b){
this.position = position; this.position = position;
this.board = b; this.board = b;
this.age = 0;
}
public FireFighter(Position position, Board<Entity> b, int age){
this.position = position;
this.board = b;
this.age = age;
} }
public void nextTurn(Board<Entity> b){ public List<Position> nextTurn(Board<Entity> b){
age++;
List<Position> positions = new ArrayList<Position>();
positions.add(position);
return positions;
// Récupérer la position // Récupérer la position
//Si un feu est à proximité : éteindre les feux à x + 1 y, x y+1, x+1 y-1, x-1 y+1 //Si un feu est à proximité : éteindre les feux à x + 1 y, x y+1, x+1 y-1, x-1 y+1
//Sinon //Sinon
...@@ -34,5 +48,14 @@ public class FireFighter implements Entity{ ...@@ -34,5 +48,14 @@ public class FireFighter implements Entity{
return this.viewColor; return this.viewColor;
} }
@Override
public int getAge() {
return this.age;
}
@Override
public void incrementAge() {
this.age = age + 1 ;
}
} }
...@@ -40,7 +40,7 @@ private void placeInitialActors(int initialFireCount, int initialFireFightersCou ...@@ -40,7 +40,7 @@ private void placeInitialActors(int initialFireCount, int initialFireFightersCou
for (Position pos : positions) { for (Position pos : positions) {
if (getState(pos) instanceof EmptySquare) { if (getState(pos) instanceof EmptySquare) {
if (fireCount < initialFireCount && random.nextInt(100) < chance) { if (fireCount < initialFireCount && random.nextInt(100) < chance) {
setState(new Fire(pos, this), pos); setState(new Fire(pos, this, 1), pos);
fireCount++; fireCount++;
if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount) { if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount) {
return; return;
...@@ -49,7 +49,7 @@ private void placeInitialActors(int initialFireCount, int initialFireFightersCou ...@@ -49,7 +49,7 @@ private void placeInitialActors(int initialFireCount, int initialFireFightersCou
} }
if (fireFighterCount < initialFireFightersCount && random.nextInt(100) < chance) { if (fireFighterCount < initialFireFightersCount && random.nextInt(100) < chance) {
setState(new FireFighter(pos, this), pos); setState(new FireFighter(pos, this,1), pos);
fireFighterCount++; fireFighterCount++;
if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount) { if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount) {
return; return;
...@@ -76,8 +76,10 @@ private void placeInitialActors(int initialFireCount, int initialFireFightersCou ...@@ -76,8 +76,10 @@ private void placeInitialActors(int initialFireCount, int initialFireFightersCou
if (!(getState(position) instanceof EmptySquare)) { if (!(getState(position) instanceof EmptySquare)) {
return; return;
} }
if(doesPositionExist(position)){
matrix.set(position.x(), position.y(), state); matrix.set(position.x(), position.y(), state);
} }
}
public void setState(Entity state, Position position, boolean replaceStates) { public void setState(Entity state, Position position, boolean replaceStates) {
if (!(getState(position) instanceof EmptySquare) && !replaceStates) { if (!(getState(position) instanceof EmptySquare) && !replaceStates) {
...@@ -97,15 +99,16 @@ private void placeInitialActors(int initialFireCount, int initialFireFightersCou ...@@ -97,15 +99,16 @@ private void placeInitialActors(int initialFireCount, int initialFireFightersCou
public List<Position> updateToNextGeneration() { public List<Position> updateToNextGeneration() {
ArrayList<Position> changedPositions = new ArrayList<>(); ArrayList<Position> changedPositions = new ArrayList<>();
Iterator<Entity> iterator = matrix.iterator(); Iterator<Entity> iterator = matrix.iterator();
while (iterator.hasNext()) { while (iterator.hasNext()) {
Entity e = iterator.next(); Entity e = iterator.next();
Position p = new Position(e.getPosition().x(), e.getPosition().y()); if(e instanceof EmptySquare) continue;
e.nextTurn(this); System.out.println("found age : " + e.getAge() + " current age : " + step);
if(e.getAge() == 0) {
if (!e.getPosition().equals(p)) { e.incrementAge();
changedPositions.add(p); continue;
} };
List<Position> entityUpdatedPositions = e.nextTurn(this);
changedPositions.addAll(entityUpdatedPositions);
} }
return changedPositions; return changedPositions;
} }
...@@ -115,12 +118,17 @@ private void placeInitialActors(int initialFireCount, int initialFireFightersCou ...@@ -115,12 +118,17 @@ private void placeInitialActors(int initialFireCount, int initialFireFightersCou
} }
public int stepNumber() { public int stepNumber() {
this.step++; this.step = step +1;
return this.step; return this.step;
} }
@Override @Override
public boolean doesPositionExist(Position position) { public boolean doesPositionExist(Position position) {
return matrix.validateIndexes(position); return matrix.validateIndex(position);
}
@Override
public int getStepNumber() {
return step;
} }
} }
...@@ -26,12 +26,12 @@ public class Matrix<E> implements Iterable<E> { ...@@ -26,12 +26,12 @@ public class Matrix<E> implements Iterable<E> {
} }
public E get(int x, int y) { public E get(int x, int y) {
validateIndexes(x, y); validateIndex(x, y);
return matrix.get(x).get(y); return matrix.get(x).get(y);
} }
public E set(int x, int y, E object) { public E set(int x, int y, E object) {
validateIndexes(x, y); validateIndex(x, y);
return matrix.get(x).set(y, object); return matrix.get(x).set(y, object);
} }
...@@ -84,14 +84,14 @@ public class Matrix<E> implements Iterable<E> { ...@@ -84,14 +84,14 @@ public class Matrix<E> implements Iterable<E> {
} }
*/ */
private void validateIndexes(int x, int y) { private void validateIndex(int x, int y) {
if (x < 0 || x >= rows || y < 0 || y >= columns) { if (x < 0 || x >= rows || y < 0 || y >= columns) {
throw new IndexOutOfBoundsException("Indices x: "+ x + " y: " + y + " hors limites pour la matrice."); throw new IndexOutOfBoundsException("Indices x: "+ x + " y: " + y + " hors limites pour la matrice.");
} }
} }
public boolean validateIndexes(Position position){ public boolean validateIndex(Position position){
return position.x() < 0 || position.x() >= rows || position.y() < 0 || position.y() >= columns; return position.x() >= 0 && position.x() < rows && position.y() >= 0 && position.y() < columns;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment