diff --git a/src/main/java/model/GridIterator.java b/src/main/java/model/GridIterator.java index ac9ecb53037ba681e9442082d5b4d7b9979fc19c..6cee9e4a8c9a85051f43eda0b2fcdc5db3951466 100644 --- a/src/main/java/model/GridIterator.java +++ b/src/main/java/model/GridIterator.java @@ -2,12 +2,12 @@ package model; import java.util.Iterator; -public class GridIterator implements Iterator<Tile> { +public class GridIterator implements Iterator<Square> { private int rowIndex; private int columnIndex; - private final TileGrid grid; + private final SquareGrid grid; - GridIterator(TileGrid grid) { + GridIterator(SquareGrid grid) { this.rowIndex = 0; this.columnIndex = 0; this.grid = grid; @@ -19,8 +19,8 @@ public class GridIterator implements Iterator<Tile> { } @Override - public Tile next() { - final Tile result = grid.getTile(rowIndex, columnIndex); + public Square next() { + final Square result = grid.getSquare(rowIndex, columnIndex); columnIndex = (columnIndex +1) % grid.getNumberOfColumns(); if(columnIndex == 0){ rowIndex++; diff --git a/src/main/java/model/Square.java b/src/main/java/model/Square.java new file mode 100644 index 0000000000000000000000000000000000000000..dffd14701b816c475276ac6fac95a103ef2df95d --- /dev/null +++ b/src/main/java/model/Square.java @@ -0,0 +1,30 @@ +package model; + +import java.util.NoSuchElementException; +import java.util.Optional; + +public class Square { + private Optional<Tile> optionalTile; + + private Square(Optional<Tile> tile) { + this.optionalTile = tile; + } + + public Square(){ + this(Optional.empty()); + } + + public Square(Tile tile){ + this(Optional.of(tile)); + } + + public Tile getTile(){ + if(!optionalTile.isPresent()) + throw new NoSuchElementException(); + return optionalTile.get(); + } + + public void add(Tile tile) { + optionalTile = Optional.of(tile); + } +} diff --git a/src/main/java/model/TileGrid.java b/src/main/java/model/SquareGrid.java similarity index 60% rename from src/main/java/model/TileGrid.java rename to src/main/java/model/SquareGrid.java index f8da2aac26796d890407a5a6f01b5cd0eac2821f..2dcc25467beac882e3e68163e0e696497097c501 100644 --- a/src/main/java/model/TileGrid.java +++ b/src/main/java/model/SquareGrid.java @@ -6,10 +6,10 @@ import java.util.Iterator; import java.util.List; import java.util.Random; -public class TileGrid implements Iterable<Tile> { +public class SquareGrid implements Iterable<Square> { private final int numberOfRows; private final int numberOfColumns; - private final Tile[][] tiles; + private final Square[][] squares; /** * Creates a new {@code Grid} instance given the number of rows and columns. @@ -19,14 +19,18 @@ public class TileGrid implements Iterable<Tile> { * @throws IllegalArgumentException if {@code numberOfRows} or {@code numberOfColumns} are * less than or equal to 0 */ - public TileGrid(int numberOfRows, int numberOfColumns) { + public SquareGrid(int numberOfRows, int numberOfColumns) { this.numberOfRows = numberOfRows; this.numberOfColumns = numberOfColumns; - this.tiles = allocateMatrix(); + this.squares = allocateMatrix(); } - private Tile[][] allocateMatrix() { - return new Tile[getNumberOfRows()][getNumberOfColumns()]; + private Square[][] allocateMatrix() { + Square[][] matrix = new Square[getNumberOfRows()][getNumberOfColumns()]; + for(int row = 0; row < getNumberOfRows(); row++) + for(int column = 0; column < getNumberOfRows(); column++) + matrix[row][column] = new Square(); + return matrix; } @@ -36,14 +40,17 @@ public class TileGrid implements Iterable<Tile> { * @return an Iterator. */ @Override - public Iterator<Tile> iterator() { + public Iterator<Square> iterator() { return new GridIterator(this); } public Tile getTile(int rowIndex, int columnIndex) { - return tiles[rowIndex][columnIndex]; + return getSquare(rowIndex,columnIndex).getTile(); } + public Square getSquare(int rowIndex, int columnIndex) { + return squares[rowIndex][columnIndex]; + } public int getNumberOfRows() { return numberOfRows; } @@ -54,9 +61,7 @@ public class TileGrid implements Iterable<Tile> { public void fillWithRandomTiles(List<Color> colors, Random randomGenerator){ RandomTileGenerator randomTileGenerator = new RandomTileGenerator(colors, randomGenerator); - for(int row = 0; row < numberOfRows; row++) - for(int column = 0; column < numberOfColumns; column++){ - tiles[row][column] = randomTileGenerator.nextTile(); - } + for(Square square : this) + square.add(randomTileGenerator.nextTile()); } } diff --git a/src/main/java/model/TileGame.java b/src/main/java/model/TileGame.java index 68aeb8a30f93a33482c7b23c19cc02e78da35b46..b893dc20b57ec25021ea269a4dc53956a75bd01e 100644 --- a/src/main/java/model/TileGame.java +++ b/src/main/java/model/TileGame.java @@ -6,17 +6,17 @@ import java.util.List; import java.util.Random; public class TileGame { - private final TileGrid tileGrid; + private final SquareGrid tileGrid; - public TileGame(TileGrid tileGrid) { + public TileGame(SquareGrid tileGrid) { this.tileGrid = tileGrid; tileGrid.fillWithRandomTiles(List.of(Color.BLUE, Color.WHITE, Color.BLACK, Color.RED), new Random()); } public TileGame() { - this(new TileGrid(10, 10)); + this(new SquareGrid(10, 10)); } - public TileGrid getTileGrid() { + public SquareGrid getTileGrid() { return tileGrid; } } diff --git a/src/main/java/view/GridTileCanvas.java b/src/main/java/view/GridTileCanvas.java index c93b6af6c7fbc69fd5f72da42b1db961da43648a..cfc9b8c1636a4009cbc61329e73b1b354daa33cc 100644 --- a/src/main/java/view/GridTileCanvas.java +++ b/src/main/java/view/GridTileCanvas.java @@ -5,8 +5,10 @@ import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.paint.Color; import model.CardinalDirection; +import model.Square; +import model.SquareGrid; import model.Tile; -import model.TileGrid; + import java.util.List; import java.util.Random; @@ -27,12 +29,12 @@ public class GridTileCanvas extends Canvas { this.numberOfRows = numberOfRows; this.setWidth(tileWidth * numberOfColumns); this.setHeight(tileHeight * numberOfRows); - TileGrid tileGrid = new TileGrid(numberOfRows, numberOfColumns); + SquareGrid tileGrid = new SquareGrid(numberOfRows, numberOfColumns); tileGrid.fillWithRandomTiles(List.of(Color.BLUE, Color.GREEN, Color.BLACK, Color.RED), new Random()); drawGridTile(tileGrid); } - public void drawGridTile(TileGrid tileGrid){ + public void drawGridTile(SquareGrid tileGrid){ for(int row = 0; row < tileGrid.getNumberOfRows(); row++) for(int column = 0; column < tileGrid.getNumberOfColumns(); column++){ drawTile(tileGrid.getTile(row, column), column, row); diff --git a/src/main/resources/view/GridCanvas.fxml b/src/main/resources/view/GridCanvas.fxml index f546bb16ca4b331ecb264bfbb10e46fcfea616c9..8e97434a7547f677fe53d3f1460f6033a35d2cbe 100644 --- a/src/main/resources/view/GridCanvas.fxml +++ b/src/main/resources/view/GridCanvas.fxml @@ -14,10 +14,10 @@ xmlns:fx="http://javafx.com/fxml" fx:id="GridTileCanvas"> <tileHeight> - <Double fx:value="5"/> + <Double fx:value="10"/> </tileHeight> <tileWidth> - <Double fx:value="5"/> + <Double fx:value="10"/> </tileWidth> <numberOfColumns> <Integer fx:value="100"/>