diff --git a/src/main/java/model/AbstractGrid.java b/src/main/java/model/AbstractGrid.java index 0f468c9fc6d3b9d07d2c84d848ba8fa2d911005f..90e5b54bfcd8db8bfbf217e8b960ee71fafaa15e 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 5c958ea713c6900c1649cd84505ed69b78081e08..413999546a29c268876200133e9f7210c2c17974 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 0000000000000000000000000000000000000000..e9e9bdfd6c5eb2afddb2ae7315bb87f56be704e2 --- /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 914ac364ea2797f57839cff62a02bd1d1efaeb21..0ace2bf63d82631c8b7867870a2cd86459d99c61 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 0000000000000000000000000000000000000000..f1ed4a8da0d1284bc36e31705f4a9bb104328462 --- /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