diff --git a/src/main/java/model/EmptySquare.java b/src/main/java/model/EmptySquare.java index d0a73934b148c14e9d7a04e5071bf12451d6acc9..1d5749d61f6594f34d167fc1e00d5416816324c1 100644 --- a/src/main/java/model/EmptySquare.java +++ b/src/main/java/model/EmptySquare.java @@ -1,5 +1,8 @@ package model; +import java.util.ArrayList; +import java.util.List; + import javafx.scene.paint.Color; import util.Position; @@ -11,8 +14,8 @@ public class EmptySquare implements Entity{ this.position = p; } @Override - public void nextTurn(Board<Entity> board) { - return; + public List<Position> nextTurn(Board<Entity> board) { + return new ArrayList<Position>(); } @Override @@ -28,4 +31,13 @@ public class EmptySquare implements Entity{ public Color getViewColor(){ return this.viewColor; } + @Override + public int getAge() { + return -999; + } + + @Override + public void incrementAge() { + return; + } } diff --git a/src/main/java/model/Fire.java b/src/main/java/model/Fire.java index 7e54fc2b23057479b1f38f1a782d66e9b1b49501..43f7967f35ec964773b03c8839f3b66196e80bce 100644 --- a/src/main/java/model/Fire.java +++ b/src/main/java/model/Fire.java @@ -10,16 +10,29 @@ public class Fire implements Entity{ Board<Entity> b; private Position position; private final Color viewColor = Color.RED; + private int age; public Fire(Position position, Board<Entity> b){ + this.b = b; 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 - public void nextTurn(Board<Entity> board) { + public List<Position> nextTurn(Board<Entity> board) { + age = age +1; List<Position> positions = generateAdjacentPosition(); for(Position p : positions){ board.setState(new Fire(p, board), p); + if(!b.doesPositionExist(p)){ + positions.remove(p); + } } + return positions; } private List<Position> generateAdjacentPosition(){ @@ -49,4 +62,14 @@ public class Fire implements Entity{ public Color getViewColor(){ return this.viewColor; } + + @Override + public int getAge() { + return this.age; + } + + @Override + public void incrementAge() { + this.age = age + 1 ; + } } diff --git a/src/main/java/model/FireFighter.java b/src/main/java/model/FireFighter.java index 8a78412d32444566960bf3223c3e832ea5baa3fa..4088d8e69cd447a9de46c19d5cff06ac6393c461 100644 --- a/src/main/java/model/FireFighter.java +++ b/src/main/java/model/FireFighter.java @@ -1,8 +1,12 @@ package model; +import java.util.ArrayList; +import java.util.List; + import javafx.scene.paint.Color; import util.Position; public class FireFighter implements Entity{ + private int age; private Position position; private final Color viewColor = Color.BLUE; private Board<Entity> board; @@ -10,9 +14,19 @@ public class FireFighter implements Entity{ public FireFighter(Position position, Board<Entity> b){ this.position = position; 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 //Si un feu est à proximité : éteindre les feux à x + 1 y, x y+1, x+1 y-1, x-1 y+1 //Sinon @@ -34,5 +48,14 @@ public class FireFighter implements Entity{ return this.viewColor; } + @Override + public int getAge() { + return this.age; + } + @Override + public void incrementAge() { + this.age = age + 1 ; + } + } diff --git a/src/main/java/model/FireFighterScenario.java b/src/main/java/model/FireFighterScenario.java index 553307771917db0af9782065e429f4f44abe68de..c8df8095a524b1507681a843611b2e675b5f0608 100644 --- a/src/main/java/model/FireFighterScenario.java +++ b/src/main/java/model/FireFighterScenario.java @@ -40,7 +40,7 @@ private void placeInitialActors(int initialFireCount, int initialFireFightersCou for (Position pos : positions) { if (getState(pos) instanceof EmptySquare) { if (fireCount < initialFireCount && random.nextInt(100) < chance) { - setState(new Fire(pos, this), pos); + setState(new Fire(pos, this, 1), pos); fireCount++; if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount) { return; @@ -49,7 +49,7 @@ private void placeInitialActors(int initialFireCount, int initialFireFightersCou } if (fireFighterCount < initialFireFightersCount && random.nextInt(100) < chance) { - setState(new FireFighter(pos, this), pos); + setState(new FireFighter(pos, this,1), pos); fireFighterCount++; if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount) { return; @@ -76,7 +76,9 @@ private void placeInitialActors(int initialFireCount, int initialFireFightersCou if (!(getState(position) instanceof EmptySquare)) { return; } - matrix.set(position.x(), position.y(), state); + if(doesPositionExist(position)){ + matrix.set(position.x(), position.y(), state); + } } public void setState(Entity state, Position position, boolean replaceStates) { @@ -97,15 +99,16 @@ private void placeInitialActors(int initialFireCount, int initialFireFightersCou public List<Position> updateToNextGeneration() { ArrayList<Position> changedPositions = new ArrayList<>(); Iterator<Entity> iterator = matrix.iterator(); - while (iterator.hasNext()) { Entity e = iterator.next(); - Position p = new Position(e.getPosition().x(), e.getPosition().y()); - e.nextTurn(this); - - if (!e.getPosition().equals(p)) { - changedPositions.add(p); - } + if(e instanceof EmptySquare) continue; + System.out.println("found age : " + e.getAge() + " current age : " + step); + if(e.getAge() == 0) { + e.incrementAge(); + continue; + }; + List<Position> entityUpdatedPositions = e.nextTurn(this); + changedPositions.addAll(entityUpdatedPositions); } return changedPositions; } @@ -115,12 +118,17 @@ private void placeInitialActors(int initialFireCount, int initialFireFightersCou } public int stepNumber() { - this.step++; + this.step = step +1; return this.step; } @Override public boolean doesPositionExist(Position position) { - return matrix.validateIndexes(position); + return matrix.validateIndex(position); + } + + @Override + public int getStepNumber() { + return step; } } diff --git a/src/main/java/util/Matrix.java b/src/main/java/util/Matrix.java index 7d8f97f0c76bfe32264f89cde79a5a3bac5f7346..c68517f85a262934a8f8379069212f507684f134 100644 --- a/src/main/java/util/Matrix.java +++ b/src/main/java/util/Matrix.java @@ -26,12 +26,12 @@ public class Matrix<E> implements Iterable<E> { } public E get(int x, int y) { - validateIndexes(x, y); + validateIndex(x, y); return matrix.get(x).get(y); } public E set(int x, int y, E object) { - validateIndexes(x, y); + validateIndex(x, y); return matrix.get(x).set(y, object); } @@ -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) { throw new IndexOutOfBoundsException("Indices x: "+ x + " y: " + y + " hors limites pour la matrice."); } } - public boolean validateIndexes(Position position){ - return position.x() < 0 || position.x() >= rows || position.y() < 0 || position.y() >= columns; + public boolean validateIndex(Position position){ + return position.x() >= 0 && position.x() < rows && position.y() >= 0 && position.y() < columns; }