From 289d27f5ab07ceac3dd845e2f57a0994808c27f1 Mon Sep 17 00:00:00 2001 From: arnaudlabourel <arnaud.labourel@univ-amu.fr> Date: Tue, 9 Nov 2021 09:47:10 +0100 Subject: [PATCH] Added ListGrid --- src/main/java/model/AbstractGrid.java | 9 +++- src/main/java/model/ArrayGrid.java | 9 +--- src/main/java/model/ListGrid.java | 29 ++++++++++++ src/main/java/view/GridCanvas.java | 2 +- src/test/java/model/ListGridTest.java | 68 +++++++++++++++++++++++++++ 5 files changed, 107 insertions(+), 10 deletions(-) create mode 100644 src/main/java/model/ListGrid.java create mode 100644 src/test/java/model/ListGridTest.java diff --git a/src/main/java/model/AbstractGrid.java b/src/main/java/model/AbstractGrid.java index 0f468c9..90e5b54 100644 --- a/src/main/java/model/AbstractGrid.java +++ b/src/main/java/model/AbstractGrid.java @@ -3,10 +3,17 @@ package model; import java.util.Iterator; public abstract class AbstractGrid implements Grid { - protected final int numberOfRows; protected final int numberOfColumns; + /** + * Creates a new {@code Grid} instance given the number of rows and columns. + * + * @param numberOfRows the number of rows + * @param numberOfColumns the number of columns + * @throws IllegalArgumentException if {@code numberOfRows} or {@code numberOfColumns} are + * less than or equal to 0 + */ public AbstractGrid(int numberOfRows, int numberOfColumns) { if(numberOfRows <= 0) throw new IllegalArgumentException("The number of rows must be positive and not equal to " + numberOfRows); diff --git a/src/main/java/model/ArrayGrid.java b/src/main/java/model/ArrayGrid.java index 5c958ea..4139995 100644 --- a/src/main/java/model/ArrayGrid.java +++ b/src/main/java/model/ArrayGrid.java @@ -2,14 +2,7 @@ package model; public class ArrayGrid extends AbstractGrid { private final Square[][] squares; - /** - * Creates a new {@code Grid} instance given the number of rows and columns. - * - * @param numberOfRows the number of rows - * @param numberOfColumns the number of columns - * @throws IllegalArgumentException if {@code numberOfRows} or {@code numberOfColumns} are - * less than or equal to 0 - */ + public ArrayGrid(int numberOfRows, int numberOfColumns) { super(numberOfRows, numberOfColumns); squares = new ArraySquare[getNumberOfRows()][getNumberOfColumns()]; diff --git a/src/main/java/model/ListGrid.java b/src/main/java/model/ListGrid.java new file mode 100644 index 0000000..e9e9bdf --- /dev/null +++ b/src/main/java/model/ListGrid.java @@ -0,0 +1,29 @@ +package model; + +import java.util.ArrayList; +import java.util.List; + +public class ListGrid extends AbstractGrid{ + private final List<List<Square>> squares; + + public ListGrid(int numberOfRows, int numberOfColumns) { + super(numberOfRows, numberOfColumns); + squares = new ArrayList<>(); + initializeGrid(); + } + + @Override + protected void initializeSquares() { + for(int row = 0; row < getNumberOfRows(); row++){ + List<Square> squareRow = new ArrayList<>(); + for(int column = 0; column < getNumberOfColumns(); column++) + squareRow.add(new ArraySquare()); + squares.add(squareRow); + } + } + + @Override + public Square getSquare(int rowIndex, int columnIndex) { + return squares.get(rowIndex).get(columnIndex); + } +} diff --git a/src/main/java/view/GridCanvas.java b/src/main/java/view/GridCanvas.java index 914ac36..0ace2bf 100644 --- a/src/main/java/view/GridCanvas.java +++ b/src/main/java/view/GridCanvas.java @@ -26,7 +26,7 @@ public class GridCanvas extends Canvas { this.numberOfRows = numberOfRows; this.setWidth(tileWidth * numberOfColumns); this.setHeight(tileHeight * numberOfRows); - grid = new ArrayGrid(numberOfRows, numberOfColumns); + grid = new ListGrid(numberOfRows, numberOfColumns); graphicsContext = getGraphicsContext2D(); } diff --git a/src/test/java/model/ListGridTest.java b/src/test/java/model/ListGridTest.java new file mode 100644 index 0000000..f1ed4a8 --- /dev/null +++ b/src/test/java/model/ListGridTest.java @@ -0,0 +1,68 @@ +package model; + +import javafx.scene.paint.Color; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Iterator; + +import static org.assertj.core.api.Assertions.assertThat; + +public class ListGridTest { + Grid arrayGridThreeTimesFour; + @BeforeEach + void initializeGrid(){ + arrayGridThreeTimesFour = new ListGrid(3, 4); + } + + @Test + void testGetNumberOfRows(){ + assertThat(arrayGridThreeTimesFour.getNumberOfRows()).isEqualTo(3); + } + + @Test + void testGetNumberOfColumns(){ + assertThat(arrayGridThreeTimesFour.getNumberOfColumns()).isEqualTo(4); + } + + @Test + void testSquaresAreNotNull_afterConstruction(){ + for(int row = 0; row < arrayGridThreeTimesFour.getNumberOfRows(); row++) + for(int column = 0; column < arrayGridThreeTimesFour.getNumberOfColumns(); column++) + assertThat(arrayGridThreeTimesFour.getSquare(row,column)).isNotNull(); + } + + @Test + void testNeighbor(){ + Square square22 = arrayGridThreeTimesFour.getSquare(2,2); + assertThat(square22.getNeighbor(CardinalDirection.NORTH)) + .isEqualTo(arrayGridThreeTimesFour.getSquare(1, 2)); + assertThat(square22.getNeighbor(CardinalDirection.EAST)) + .isEqualTo(arrayGridThreeTimesFour.getSquare(2, 3)); + assertThat(square22.getNeighbor(CardinalDirection.SOUTH)) + .isEqualTo(EmptySquare.EMPTY_SQUARE); + assertThat(square22.getNeighbor(CardinalDirection.WEST)) + .isEqualTo(arrayGridThreeTimesFour.getSquare(2, 1)); + } + + @Test + void testFill(){ + Tile redTile = new UniformTile(new ColoredSide(Color.RED)); + arrayGridThreeTimesFour.fill(square -> redTile); + for(int row = 0; row < arrayGridThreeTimesFour.getNumberOfRows(); row++) + for(int column = 0; column < arrayGridThreeTimesFour.getNumberOfColumns(); column++) + assertThat(arrayGridThreeTimesFour.getSquare(row,column).getTile()).isEqualTo(redTile); + } + + @Test + void testIterator(){ + Iterator<Square> iterator = arrayGridThreeTimesFour.iterator(); + assertThat(iterator.hasNext()).isTrue(); + for(int row = 0; row < arrayGridThreeTimesFour.getNumberOfRows(); row++) { + for (int column = 0; column < arrayGridThreeTimesFour.getNumberOfColumns(); column++) { + assertThat(iterator.next()).isEqualTo(arrayGridThreeTimesFour.getSquare(row, column)); + } + } + assertThat(iterator.hasNext()).isFalse(); + } +} \ No newline at end of file -- GitLab