diff --git a/src/main/java/controller/Simulation.java b/src/main/java/controller/Simulation.java index 8c33146524a2ac98ab455a906ffbfa086ecfb61c..0329744059b963e449f1cecea5a79df74ec602be 100644 --- a/src/main/java/controller/Simulation.java +++ b/src/main/java/controller/Simulation.java @@ -37,7 +37,7 @@ public interface Simulation extends Iterable<Coordinate> { * * @param coordinate The {@link Coordinate} to advance to the next state. */ - void next(Coordinate coordinate); + void cycleThrough(Coordinate coordinate); /** * Copies the state from the source {@link Coordinate} to the destination {@link Coordinate}. diff --git a/src/main/java/model/CellularAutomatonSimulation.java b/src/main/java/model/CellularAutomatonSimulation.java index 4f51254692cefda4e95edb8be3de494242c387da..2d5b286fb175708083eede60481e4f5c99ba34dd 100644 --- a/src/main/java/model/CellularAutomatonSimulation.java +++ b/src/main/java/model/CellularAutomatonSimulation.java @@ -42,14 +42,12 @@ public class CellularAutomatonSimulation<S extends State<S>> @Override public int numberOfColumns() { - //TODO: à compléter - return 0; + return this.automaton.numberOfColumns(); } @Override public int numberOfRows() { - //TODO: à compléter - return 0; + return this.automaton.numberOfRows(); } /** @@ -59,13 +57,18 @@ public class CellularAutomatonSimulation<S extends State<S>> * @return The cell at the specified coordinate. */ public Cell<S> at(Coordinate coordinate) { - //TODO: à compléter - return null; + return this.grid.get(coordinate); } @Override public void updateToNextGeneration() { - //TODO: à compléter, en utilisant nextGenerationMatrix() + Matrix<S> newStates = nextGenerationMatrix(); + for (Coordinate coordinate : this) { + S newState = newStates.at(coordinate).get(); + Cell<S> cell = this.at(coordinate); + cell.set(newState); + } + this.generationNumber.set(this.generationNumber.get() + 1); } /** Computes the {@link Matrix} of states obtained after a single step of updates @@ -74,23 +77,28 @@ public class CellularAutomatonSimulation<S extends State<S>> * @return the states of each cell after one generation */ private Matrix<S> nextGenerationMatrix() { - //TODO: à compléter - return null; + return new Matrix<>( + this.numberOfColumns(), + this.numberOfRows(), + new NextGenerationInitializer<>(this) + ); } @Override - public void next(Coordinate coordinate) { - //TODO: à compléter + public void cycleThrough(Coordinate coordinate) { + Cell<S> cell = this.at(coordinate); + S newState = cell.get().cycle(); + cell.set(newState); } @Override public void copy(Coordinate source, Coordinate destination) { - //TODO: à compléter + S state = this.at(source).get(); + this.at(destination).set(state); } @Override public Color getColor(Coordinate coordinate) { - //TODO: à compléter - return null; + return this.at(coordinate).get().getColor(); } @Override @@ -108,13 +116,19 @@ public class CellularAutomatonSimulation<S extends State<S>> @Override public void clear() { - //TODO: à compléter (penser à remettre le nombre de génération à 0) + for (Coordinate coordinate : this) { + this.at(coordinate).set(this.automaton.defaultState()); + } + this.generationNumber.set(0); } @Override public void reset() { - //TODO: à compléter (penser à remettre le nombre de génération à 0) + for (Coordinate coordinate : this) { + this.at(coordinate).set(this.automaton.randomState(this.generator)); + } + this.generationNumber.set(0); } @Override diff --git a/src/main/java/view/FillingMouseListener.java b/src/main/java/view/FillingMouseListener.java index a4946eb3188788e721932033b65154f418b8d41b..fcc519964f211c88b3a0a5d227ba1218d17fb403 100644 --- a/src/main/java/view/FillingMouseListener.java +++ b/src/main/java/view/FillingMouseListener.java @@ -29,7 +29,7 @@ public class FillingMouseListener implements MouseListener { @Override public void onMousePressed(MouseEvent event, Coordinate coordinate) { - this.matrix.getController().getSimulation().next(coordinate); + this.matrix.getController().getSimulation().cycleThrough(coordinate); this.matrix.setMouseListener( new FillingMouseListener(this.matrix, coordinate) ); diff --git a/src/main/java/view/WaitingMouseListener.java b/src/main/java/view/WaitingMouseListener.java index 68601debb4757abdd55450b8b6d58f16ff5e8ba3..8b48548d0b9e05f3befbf57169493c7fe11fc964 100644 --- a/src/main/java/view/WaitingMouseListener.java +++ b/src/main/java/view/WaitingMouseListener.java @@ -14,7 +14,7 @@ class WaitingMouseListener implements MouseListener { @Override public void onMousePressed(MouseEvent event, Coordinate coordinate) { - this.matrix.getController().getSimulation().next(coordinate); + this.matrix.getController().getSimulation().cycleThrough(coordinate); this.matrix.setMouseListener(new FillingMouseListener(this.matrix, coordinate)); } diff --git a/src/test/java/model/CellularAutomatonSimulationTest.java b/src/test/java/model/CellularAutomatonSimulationTest.java index 81c4eaca06a853af85fc445d56c4e9e22ae0b846..2c32450b9938160e48ba6a3731877ba88cde6ce3 100644 --- a/src/test/java/model/CellularAutomatonSimulationTest.java +++ b/src/test/java/model/CellularAutomatonSimulationTest.java @@ -78,7 +78,7 @@ class CellularAutomatonSimulationTest { Coordinate coordinate = Coordinate.of(1, 1); Cell<GameOfLifeState> cell = simulation.at(coordinate); GameOfLifeState oldState = cell.get(); - simulation.next(coordinate); + simulation.cycleThrough(coordinate); assertNotEquals(oldState, cell.get()); }