Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • ImprovedMouseInteraction
  • correction_video
  • going_further
  • main
  • ModifGUI
  • final2023
  • template
7 results

Target

Select target project
  • s20026898/tp-6
  • boukenze.b/jeu-de-la-vie-tp-3
  • b22015696/game-of-life-template
  • s23026062/sahin-game-of-life-template
  • m22023183/game-of-life-MALEK
  • z23012739/game-of-life-template
  • p23021107/poussardin-malo-game-of-life-template
  • o21225801/game-of-life-template
  • alaboure/game-fo-life-template
  • t22007439/game-of-life-toullec
  • b23021750/game-of-life
  • c22029830/game-of-life-template-rafi
  • b23025683/game-of-life-template-tp-6
  • gnaves/game-of-life-template
  • a22025223/game-of-life-template-cristel
  • f22024692/game-of-life-template-paolo-mathis-erwan
  • t21233923/game-fo-life-template
  • h21231335/game-fo-life-template
  • l22023519/game-of-life-template-salma
  • p23020787/game-of-life-template
  • b21232450/game-of-life-template
  • s22031458/game-of-life
  • n21223697/tp-4-ngom
  • a22027291/game-of-life-of-salim
  • k22029508/tp-4
  • s19033421/game-of-life-template
  • b21229750/jeu-de-la-vie-tp-3
  • saddem.r/game-of-life-template
  • l3_s3_infoamu/s3/programmation-2/game-fo-life-template
29 results
Select Git revision
  • ImprovedMouseInteraction
  • correction_video
  • going_further
  • main
  • ModifGUI
  • final2023
  • template
7 results
Show changes
Commits on Source (4)
Showing
with 230 additions and 218 deletions
...@@ -4,7 +4,7 @@ plugins { ...@@ -4,7 +4,7 @@ plugins {
} }
javafx { javafx {
version = "20" version = "22"
modules = [ 'javafx.controls', 'javafx.fxml' ] modules = [ 'javafx.controls', 'javafx.fxml' ]
} }
......
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
package controller; package controller;
import datastruct.Coordinate; import matrix.Coordinate;
import javafx.animation.Animation; import javafx.animation.Animation;
import javafx.animation.KeyFrame; import javafx.animation.KeyFrame;
import javafx.animation.Timeline; import javafx.animation.Timeline;
...@@ -11,7 +11,6 @@ import javafx.scene.control.Label; ...@@ -11,7 +11,6 @@ import javafx.scene.control.Label;
import javafx.scene.control.ToggleButton; import javafx.scene.control.ToggleButton;
import javafx.scene.control.ToggleGroup; import javafx.scene.control.ToggleGroup;
import javafx.util.Duration; import javafx.util.Duration;
import model.CellularAutomatonSimulation;
import view.MatrixPane; import view.MatrixPane;
import static java.util.Objects.requireNonNull; import static java.util.Objects.requireNonNull;
......
package controller; package controller;
import datastruct.Coordinate; import matrix.Coordinate;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import model.OnChangeListener; import model.OnChangeListener;
......
package datastruct;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* Represents a matrix, a rectangular array, with generic values in each cell.
*
* @param <T> The type of values stored in the matrix cells.
*/
public class Matrix<T> implements Iterable<T> {
private final List<List<T>> matrix;
private final int width;
private final int height;
/**
* Creates a new {@link Matrix} with the specified width, height, and an initializer to set
* values.
*
* @param width The width of the {@link Matrix}.
* @param height The height of the {@link Matrix}.
* @param initializer A matrix initializer to set values in the {@link Matrix}.
*/
public Matrix(int width, int height, MatrixInitializer<T> initializer) {
this.width = width;
this.height = height;
this.matrix = new ArrayList<>();
this.initializeWith(initializer);
}
/**
* Creates a new {@link Matrix} with the specified width, height, and initial value for all
* cells.
*
* @param width The width of the {@link Matrix}.
* @param height The height of the {@link Matrix}.
* @param initialValue The initial value to set in all cells of the {@link Matrix}.
*/
public Matrix(int width, int height, T initialValue) {
this(width, height, new ConstantMatrixInitializer<>(initialValue));
}
private void initializeWith(MatrixInitializer<T> initializer) {
for (int x = 0; x < width; x++) {
List<T> row = new ArrayList<>();
this.matrix.add(row);
for (int y = 0; y < height; y++) {
row.add(initializer.initialValueAt(Coordinate.of(x, y)));
}
}
}
/**
* Returns the width of the {@link Matrix}.
*
* @return The width of the {@link Matrix}.
*/
public int width() {
return width;
}
/**
* Returns the height of the {@link Matrix}.
*
* @return The height of the {@link Matrix}.
*/
public int height() {
return height;
}
/**
* Gets the value at the specified coordinates (x, y) in the {@link Matrix}.
*
* @param x The x-coordinate.
* @param y The y-coordinate.
* @return The value at the specified coordinates.
*/
public T get(int x, int y) {
return this.matrix.get(x).get(y);
}
/**
* Gets the value at the specified {@link Coordinate} in the {@link Matrix}.
*
* @param coordinate The {@link Coordinate}.
* @return The value at the specified {@link Coordinate}.
*/
public T get(Coordinate coordinate) {
return this.get(coordinate.x(), coordinate.y());
}
/**
* Sets the value at the specified coordinates (x, y) in the {@link Matrix}.
*
* @param x The x-coordinate.
* @param y The y-coordinate.
* @param value The value to set at the specified coordinates.
*/
public void set(int x, int y, T value) {
this.matrix.get(x).set(y, value);
}
/**
* Sets the value at the specified {@link Coordinate} in the {@link Matrix}.
*
* @param coordinate The {@link Coordinate}.
* @param value The value to set at the specified {@link Coordinate}.
*/
public void set(Coordinate coordinate, T value) {
this.set(coordinate.x(), coordinate.y(), value);
}
/**
* Returns an {@link Iterator} that allows iterating over the elements in the {@link Matrix} in
* row-major order.
*
* @return An {@link Iterator} for the {@link Matrix}.
*/
public Iterator<T> iterator() {
Iterator<Coordinate> coordIterator = this.coordinatesIterator();
return new MatrixIterator<>(this, coordIterator);
}
/**
* Returns an {@link Iterable} that provides access to the {@link Coordinate}s of the
* {@link Matrix} in row-major order. This means that a {@code for} loop on a {@link Matrix}
* will loop over the coordinates of the {@link Matrix}.
*
* @return An {@link Iterable} for the {@link Coordinate}s of the {@link Matrix}.
*/
public Iterable<Coordinate> coordinates() {
return this::coordinatesIterator;
}
/**
* Returns an {@link Iterator} that allows iterating over the {@link Coordinate}s in the
* {@link Matrix} in row-major order.
*
* @return An {@link Iterator} for the {@link Matrix}.
*/
private Iterator<Coordinate> coordinatesIterator() {
return new CoordinateIterator(this.width, this.height);
}
/**
* Returns a lens for accessing and modifying the value at the specified coordinates (x, y) in
* the {@link Matrix}.
*
* @param x The x-coordinate.
* @param y The y-coordinate.
* @return A lens for the specified coordinates.
*/
public Lens<T> at(int x, int y) {
return new Lens<T>() {
@Override
public T get() {
return Matrix.this.get(x, y);
}
@Override
public void set(T value) {
Matrix.this.set(x, y, value);
}
};
}
/**
* Returns a lens for accessing and modifying the value at the specified coordinate in the
* {@link Matrix}.
*
* @param coordinate The {@link Coordinate}.
* @return A lens for the specified {@link Coordinate}.
*/
public Lens<T> at(Coordinate coordinate) {
return this.at(coordinate.x(), coordinate.y());
}
}
package datastruct; package matrix;
public class ConstantMatrixInitializer<T> implements MatrixInitializer<T> { public class ConstantMatrixInitializer<T> implements MatrixInitializer<T> {
private final T constant; // TODO: add instance variables
public ConstantMatrixInitializer(T constant) { public ConstantMatrixInitializer(T constant) {
this.constant = constant; // TODO
} }
@Override @Override
public T initialValueAt(Coordinate coordinate) { public T initialValueAt(Coordinate coordinate) {
return constant; // TODO
return null;
} }
} }
package datastruct; package matrix;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
...@@ -62,7 +61,15 @@ public record Coordinate(int x, int y) { ...@@ -62,7 +61,15 @@ public record Coordinate(int x, int y) {
/** /**
* Computes and returns a list of orthogonal (adjacent in horizontal or vertical direction) neighbors. * Computes and returns a list of orthogonal (adjacent in horizontal or vertical direction) neighbors.
* * | | | |
* ---------
* | |X| |
* ---------
* |X|O|X|
* ---------
* | |X| |
* ---------
* | | | |
* @return A list of orthogonal neighboring {@link Coordinate}s. * @return A list of orthogonal neighboring {@link Coordinate}s.
*/ */
public List<Coordinate> orthogonalNeighbours() { public List<Coordinate> orthogonalNeighbours() {
...@@ -72,6 +79,15 @@ public record Coordinate(int x, int y) { ...@@ -72,6 +79,15 @@ public record Coordinate(int x, int y) {
/** /**
* Computes and returns a list of diagonal (adjacent in diagonal direction) neighbors. * Computes and returns a list of diagonal (adjacent in diagonal direction) neighbors.
* | | | |
* ---------
* |X| |X|
* ---------
* | |O| |
* ---------
* |X| |X|
* ---------
* | | | |
* *
* @return A list of diagonal neighboring {@link Coordinate}s. * @return A list of diagonal neighboring {@link Coordinate}s.
*/ */
...@@ -82,6 +98,15 @@ public record Coordinate(int x, int y) { ...@@ -82,6 +98,15 @@ public record Coordinate(int x, int y) {
/** /**
* Computes and returns a list of all orthogonal and diagonal neighbors. * Computes and returns a list of all orthogonal and diagonal neighbors.
* * | | | |
* * ---------
* * |X|X|X|
* * ---------
* * |X|O|X|
* * ---------
* * |X|X|X|
* * ---------
* * | | | |
* *
* @return A list of all neighboring {@link Coordinate}s. * @return A list of all neighboring {@link Coordinate}s.
*/ */
...@@ -94,4 +119,12 @@ public record Coordinate(int x, int y) { ...@@ -94,4 +119,12 @@ public record Coordinate(int x, int y) {
public String toString() { public String toString() {
return "(" + this.x + "," + this.y + ")"; return "(" + this.x + "," + this.y + ")";
} }
public Coordinate minus(Coordinate corner) {
return new Coordinate(this.x - corner.x, this.y - corner.y);
}
public Coordinate plus(Coordinate corner) {
return new Coordinate(this.x + corner.x, this.y + corner.y);
}
} }
\ No newline at end of file
package datastruct; package matrix;
import java.util.Iterator; import java.util.Iterator;
import java.util.NoSuchElementException; import java.util.NoSuchElementException;
......
package matrix;
import java.util.List;
/**
* Represents a matrix, a rectangular array, with generic values in each cell.
*
* @param <T> The type of values stored in the matrix cells.
*/
public class ListMatrix<T> implements Matrix<T> {
private final List<List<T>> matrix;
private final int width;
private final int height;
/**
* Creates a new {@link ListMatrix} with the specified width, height, and an initializer to set
* values.
*
* @param width The width of the {@link ListMatrix}.
* @param height The height of the {@link ListMatrix}.
* @param initializer A matrix initializer to set values in the {@link ListMatrix}.
*/
public ListMatrix(int width, int height, MatrixInitializer<T> initializer) {
// TODO
this.width = 0;
this.height = 0;
this.matrix = null;
this.initializeWith(initializer); // fills the matrix using initializer
}
public ListMatrix(int width, int height, T constant) {
this(width, height, new ConstantMatrixInitializer<>(constant));
}
private void initializeWith(MatrixInitializer<T> initializer) {
// TODO initialize each cell of the matrix, with a value determined by initializer
}
public int width() {
// TODO
return 0;
}
public int height() {
// TODO
return 0;
}
@Override
public T get(int x, int y) {
// TODO
return null;
}
@Override
public void set(int x, int y, T newValue) {
// TODO
}
}
package matrix;
import java.util.Iterator;
public interface Matrix<T> extends Iterable<T> {
/**
* Returns the width of the {@link Matrix}.
*
* @return The width of the {@link Matrix}.
*/
int width();
/**
* Returns the height of the {@link Matrix}.
*
* @return The height of the {@link Matrix}.
*/
int height();
/**
* Returns the value at the specified coordinates (x, y) in
* the {@link Matrix}.
*
* @param x The x-coordinate.
* @param y The y-coordinate.
* @return The content of the matrix at the coordinates (x,y).
*/
T get(int x, int y);
/**
* Returns the value at the specified coordinates (x, y) in
* the {@link Matrix}.
*
* @param coordinate The coordinates (x,y).
* @return The content of the matrix at the coordinates (x,y).
*/
default T get(Coordinate coordinate) {
return this.get(coordinate.x(), coordinate.y());
}
/**
* Changes the value at the specified coordinates (x,y) in the {@link Matrix}
*
* @param x the x-coordinate
* @param y the y-coordinate
* @param newValue the value to assign to coordinates (x,y).
*/
void set(int x, int y, T newValue);
/**
* Changes the value at the specified coordinates (x,y) in the {@link Matrix}
*
* @param coordinate The coordinates (x,y)
* @param newValue the value to assign to coordinates (x,y).
*/
default void set(Coordinate coordinate, T newValue) {
this.set(coordinate.x(), coordinate.y(), newValue);
}
default Matrix<T> subMatrix(Coordinate corner, int width, int height){
return null ;
}
/**
* Returns an {@link Iterable} that provides access to the {@link Coordinate}s of the
* {@link Matrix} in row-major order. This means that a {@code for} loop on a {@link Matrix}
* will loop over the coordinates of the {@link Matrix}.
*
* @return An {@link Iterable} for the {@link Coordinate}s of the {@link Matrix}.
*/
default Iterable<Coordinate> coordinates() {
return () -> new CoordinateIterator(this.width(), this.height());
}
/**
* Returns an {@link Iterator} that allows iterating over the elements in the {@link Matrix} in
* row-major order.
*
* @return An {@link Iterator} for the {@link Matrix}.
*/
default Iterator<T> iterator() {
Iterator<Coordinate> coords =
new CoordinateIterator(this.width(),this.height());
return new MatrixIterator<>(this, coords);
}
}
package datastruct; package matrix;
/** /**
* An interface for initializing a {@link Matrix} by providing initial values for each cell. * An interface for initializing a {@link ListMatrix} by providing initial values for each cell.
* *
* @param <T> The type of values to initialize the {@link Matrix} with. * @param <T> The type of values to initialize the {@link ListMatrix} with.
*/ */
public interface MatrixInitializer<T> { public interface MatrixInitializer<T> {
/** /**
* Returns the initial value to be set in a {@link Matrix} cell at the specified * Returns the initial value to be set in a {@link ListMatrix} cell at the specified
* {@link Coordinate}. * {@link Coordinate}.
* *
* @param coordinate The {@link Coordinate} at which to set the initial value. * @param coordinate The {@link Coordinate} at which to set the initial value.
......
package datastruct; package matrix;
import java.util.Iterator; import java.util.Iterator;
import java.util.NoSuchElementException; import java.util.NoSuchElementException;
......
package model; package model;
import datastruct.Lens;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
......
package model; package model;
import controller.Simulation; import controller.Simulation;
import datastruct.Coordinate; import matrix.Coordinate;
import datastruct.Matrix; import matrix.ListMatrix;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import java.util.Iterator; import java.util.Iterator;
...@@ -18,7 +18,7 @@ import java.util.Random; ...@@ -18,7 +18,7 @@ import java.util.Random;
public class CellularAutomatonSimulation<S extends State<S>> public class CellularAutomatonSimulation<S extends State<S>>
implements Simulation { implements Simulation {
private final Matrix<Cell<S>> grid; private final ListMatrix<Cell<S>> grid;
private final Cell<Integer> generationNumber = new Cell<>(0); private final Cell<Integer> generationNumber = new Cell<>(0);
private final CellularAutomaton<S> automaton; private final CellularAutomaton<S> automaton;
private final Random generator; private final Random generator;
...@@ -31,7 +31,7 @@ public class CellularAutomatonSimulation<S extends State<S>> ...@@ -31,7 +31,7 @@ public class CellularAutomatonSimulation<S extends State<S>>
*/ */
public CellularAutomatonSimulation(CellularAutomaton<S> automaton, Random generator) { public CellularAutomatonSimulation(CellularAutomaton<S> automaton, Random generator) {
this.automaton = automaton; this.automaton = automaton;
this.grid = new Matrix<>( this.grid = new ListMatrix<>(
automaton.numberOfColumns(), automaton.numberOfColumns(),
automaton.numberOfRows(), automaton.numberOfRows(),
new ConstantCellInitializer<>(automaton.defaultState()) new ConstantCellInitializer<>(automaton.defaultState())
...@@ -68,12 +68,12 @@ public class CellularAutomatonSimulation<S extends State<S>> ...@@ -68,12 +68,12 @@ public class CellularAutomatonSimulation<S extends State<S>>
//TODO: à compléter, en utilisant nextGenerationMatrix() //TODO: à compléter, en utilisant nextGenerationMatrix()
} }
/** Computes the {@link Matrix} of states obtained after a single step of updates /** Computes the {@link ListMatrix} of states obtained after a single step of updates
* of the simulation. * of the simulation.
* *
* @return the states of each cell after one generation * @return the states of each cell after one generation
*/ */
private Matrix<S> nextGenerationMatrix() { private ListMatrix<S> nextGenerationMatrix() {
//TODO: à compléter //TODO: à compléter
return null; return null;
} }
......
package model; package model;
import datastruct.Coordinate; import matrix.Coordinate;
import datastruct.Matrix; import matrix.ListMatrix;
import datastruct.MatrixInitializer; import matrix.MatrixInitializer;
/** /**
* An initializer for {@link Matrix} of {@link Cell}s, where each cell is initialized to the * An initializer for {@link ListMatrix} of {@link Cell}s, where each cell is initialized to the
* same value. * same value.
* *
* @param <T> the type of content of each cell * @param <T> the type of content of each cell
......
package datastruct; package model;
/** /**
* A lens interface representing a view into a mutable state. * A lens interface representing a view into a mutable state.
......
package model; package model;
import datastruct.Coordinate; import matrix.Coordinate;
import datastruct.MatrixInitializer; import matrix.MatrixInitializer;
import datastruct.Matrix; import matrix.ListMatrix;
import controller.Simulation; import controller.Simulation;
import java.util.ArrayList;
import java.util.List;
/** /**
* An initializer for a {@link Matrix} of states, where each state is computed based on the value * An initializer for a {@link ListMatrix} of states, where each state is computed based on the value
* of its neighbours in a {@link Simulation} of a cellular automaton. * of its neighbours in a {@link Simulation} of a cellular automaton.
* *
* @param <S> the type of states in the simulation. * @param <S> the type of states in the simulation.
......
package view; package view;
import datastruct.Coordinate; import matrix.Coordinate;
import javafx.scene.input.MouseEvent; import javafx.scene.input.MouseEvent;
public class FillingMouseListener implements MouseListener { public class FillingMouseListener implements MouseListener {
......
package view; package view;
import controller.Controller; import controller.Controller;
import datastruct.Coordinate; import matrix.Coordinate;
import javafx.scene.input.MouseDragEvent; import javafx.scene.input.MouseDragEvent;
import javafx.scene.input.MouseEvent; import javafx.scene.input.MouseEvent;
import javafx.scene.layout.GridPane; import javafx.scene.layout.GridPane;
......
package view; package view;
import datastruct.Coordinate; import matrix.Coordinate;
import javafx.scene.input.MouseEvent; import javafx.scene.input.MouseEvent;
interface MouseListener { interface MouseListener {
......