diff --git a/src/main/java/model/CellularAutomatonSimulation.java b/src/main/java/model/CellularAutomatonSimulation.java index d08c7a4eb05750d514d2929720bba2c0beeeb694..302fe7dd4a22ce84189f9c1926b3477ad5e9c534 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 numberOfColumns(); } @Override public int numberOfRows() { - //TODO: à compléter - return 0; + return numberOfRows(); } /** @@ -59,7 +57,6 @@ 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; } diff --git a/src/main/java/model/NextGenerationInitializer.java b/src/main/java/model/NextGenerationInitializer.java index f9462bfbd6fe1b55ad7ee10ada452a78825b6a2e..2fc8e80249a7f4de40ef4de4ea89f5d006fd790a 100644 --- a/src/main/java/model/NextGenerationInitializer.java +++ b/src/main/java/model/NextGenerationInitializer.java @@ -4,6 +4,10 @@ import matrix.Coordinate; import matrix.MatrixInitializer; import matrix.ListMatrix; import controller.Simulation; +import model.automata.GameOfLifeState; + +import java.util.ArrayList; +import java.util.List; /** * An initializer for a {@link ListMatrix} of states, where each state is computed based on the value @@ -13,7 +17,8 @@ import controller.Simulation; */ public class NextGenerationInitializer<S extends State<S>> implements MatrixInitializer<S> { - //TODO: ajouter les propriétés nécessaires + CellularAutomatonSimulation<S> simulation; + /** Create a {@link MatrixInitializer} to compute the next generation in * a 2D cellular automaton. @@ -21,13 +26,17 @@ public class NextGenerationInitializer<S extends State<S>> implements MatrixInit * @param simulation the {@link Simulation} representing the cellular automaton. */ public NextGenerationInitializer(CellularAutomatonSimulation<S> simulation) { - //TODO: à compléter + this.simulation = simulation; } @Override public S initialValueAt(Coordinate coordinate) { - //TODO: à compléter - return null; + List<Coordinate> coordinates = coordinate.orthogonalNeighbours(); + List<S> states = new ArrayList<>(); + for (Coordinate c : coordinates) { + states.add(simulation.at(this.wrap(c)).get()); + } + return simulation.at(coordinate).get().update(states); } /** Computes the grid {@link Coordinate} for an arbitrary {@link Coordinate}, even outside @@ -39,10 +48,9 @@ public class NextGenerationInitializer<S extends State<S>> implements MatrixInit * @return a corresponding {@link Coordinate}, that is inside the grid. */ Coordinate wrap(Coordinate coordinate) { - //TODO: à compléter //Il faut recalculer les coordonnées x et y modulo les dimensions de la grille. //Pour le modulo, utiliser la fonction ci-dessous, qui s'assure que le résultat est positif. - return null; + return new Coordinate(modulo(coordinate.x(), simulation.numberOfColumns()), modulo(coordinate.y(), simulation.numberOfRows())); } /** The non-negative remainder of n divided by d.