Skip to content
Snippets Groups Projects
Commit b38672c1 authored by LABOUREL Arnaud's avatar LABOUREL Arnaud
Browse files

Added AbstractGrid

parent 6c04e46e
Branches
No related tags found
No related merge requests found
package model;
import java.util.Iterator;
public abstract class AbstractGrid implements Grid {
protected final int numberOfRows;
protected final int numberOfColumns;
public AbstractGrid(int numberOfRows, int numberOfColumns) {
if(numberOfRows <= 0)
throw new IllegalArgumentException("The number of rows must be positive and not equal to " + numberOfRows);
if(numberOfColumns <= 0)
throw new IllegalArgumentException("The number of columns must be positive and not equal to " + numberOfColumns);
this.numberOfRows = numberOfRows;
this.numberOfColumns = numberOfColumns;
}
protected void initializeGrid() {
initializeSquares();
initializeNeighborhood();
}
protected abstract void initializeSquares();
private void initializeNeighborhood() {
for(int row = 0; row < getNumberOfRows(); row++)
for(int column = 0; column < getNumberOfColumns(); column++) {
for (CardinalDirection direction : CardinalDirection.values()){
int rowNeighbor = row + direction.deltaRow;
int columnNeighbor = column + direction.deltaColumn;
Square neighboringSquare =
containsCoordinates(rowNeighbor, columnNeighbor) ? getSquare(rowNeighbor, columnNeighbor) : EmptySquare.EMPTY_SQUARE;
getSquare(row, column).setNeighbor(neighboringSquare, direction);
}
}
}
private boolean containsCoordinates(int row, int column){
return 0 <= row && row < numberOfRows && 0 <= column && column < numberOfColumns;
}
/**
* Returns an iterator over Squares.
*
* @return an Iterator.
*/
@Override
public Iterator<Square> iterator() {
return new SquareGridIterator(this);
}
public int getNumberOfRows() {
return numberOfRows;
}
public int getNumberOfColumns() {
return numberOfColumns;
}
public void fill(TileGenerator tileGenerator){
for(Square square : this)
square.put(tileGenerator.nextTile(square));
}
}
package model;
import java.util.Iterator;
public class ArrayGrid implements Grid {
private final int numberOfRows;
private final int numberOfColumns;
public class ArrayGrid extends AbstractGrid {
private final Square[][] squares;
/**
* Creates a new {@code Grid} instance given the number of rows and columns.
......@@ -14,68 +11,19 @@ public class ArrayGrid implements Grid {
* less than or equal to 0
*/
public ArrayGrid(int numberOfRows, int numberOfColumns) {
if(numberOfRows <= 0)
throw new IllegalArgumentException("The number of rows must be positive and not equal to " + numberOfRows);
if(numberOfColumns <= 0)
throw new IllegalArgumentException("The number of columns must be positive and not equal to " + numberOfColumns);
this.numberOfRows = numberOfRows;
this.numberOfColumns = numberOfColumns;
super(numberOfRows, numberOfColumns);
squares = new ArraySquare[getNumberOfRows()][getNumberOfColumns()];
initializeGrid();
}
private void initializeGrid() {
initializeSquares();
initializeNeighborhood();
}
private void initializeSquares() {
@Override
protected void initializeSquares() {
for(int row = 0; row < getNumberOfRows(); row++)
for(int column = 0; column < getNumberOfColumns(); column++)
squares[row][column] = new ArraySquare();
}
private void initializeNeighborhood() {
for(int row = 0; row < getNumberOfRows(); row++)
for(int column = 0; column < getNumberOfColumns(); column++) {
for (CardinalDirection direction : CardinalDirection.values()){
int rowNeighbor = row + direction.deltaRow;
int columnNeighbor = column + direction.deltaColumn;
Square neighboringSquare =
containsCoordinates(rowNeighbor, columnNeighbor) ? getSquare(rowNeighbor, columnNeighbor) : EmptySquare.EMPTY_SQUARE;
getSquare(row, column).setNeighbor(neighboringSquare, direction);
}
}
}
private boolean containsCoordinates(int row, int column){
return 0 <= row && row < numberOfRows && 0 <= column && column < numberOfColumns;
}
/**
* Returns an iterator over Squares.
*
* @return an Iterator.
*/
@Override
public Iterator<Square> iterator() {
return new SquareGridIterator(this);
}
public Square getSquare(int rowIndex, int columnIndex) {
return squares[rowIndex][columnIndex];
}
public int getNumberOfRows() {
return numberOfRows;
}
public int getNumberOfColumns() {
return numberOfColumns;
}
public void fill(TileGenerator tileGenerator){
for(Square square : this)
square.put(tileGenerator.nextTile(square));
}
}
......@@ -5,9 +5,9 @@ import java.util.Iterator;
public class SquareGridIterator implements Iterator<Square> {
private int rowNext;
private int columnNext;
private final ArrayGrid grid;
private final Grid grid;
SquareGridIterator(ArrayGrid grid) {
SquareGridIterator(Grid grid) {
this.rowNext = 0;
this.columnNext = 0;
this.grid = grid;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment