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

Added ListGrid

parent b38672c1
No related branches found
No related tags found
No related merge requests found
...@@ -3,10 +3,17 @@ package model; ...@@ -3,10 +3,17 @@ package model;
import java.util.Iterator; import java.util.Iterator;
public abstract class AbstractGrid implements Grid { public abstract class AbstractGrid implements Grid {
protected final int numberOfRows; protected final int numberOfRows;
protected final int numberOfColumns; 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) { public AbstractGrid(int numberOfRows, int numberOfColumns) {
if(numberOfRows <= 0) if(numberOfRows <= 0)
throw new IllegalArgumentException("The number of rows must be positive and not equal to " + numberOfRows); throw new IllegalArgumentException("The number of rows must be positive and not equal to " + numberOfRows);
......
...@@ -2,14 +2,7 @@ package model; ...@@ -2,14 +2,7 @@ package model;
public class ArrayGrid extends AbstractGrid { public class ArrayGrid extends AbstractGrid {
private final Square[][] squares; 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) { public ArrayGrid(int numberOfRows, int numberOfColumns) {
super(numberOfRows, numberOfColumns); super(numberOfRows, numberOfColumns);
squares = new ArraySquare[getNumberOfRows()][getNumberOfColumns()]; squares = new ArraySquare[getNumberOfRows()][getNumberOfColumns()];
......
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);
}
}
...@@ -26,7 +26,7 @@ public class GridCanvas extends Canvas { ...@@ -26,7 +26,7 @@ public class GridCanvas extends Canvas {
this.numberOfRows = numberOfRows; this.numberOfRows = numberOfRows;
this.setWidth(tileWidth * numberOfColumns); this.setWidth(tileWidth * numberOfColumns);
this.setHeight(tileHeight * numberOfRows); this.setHeight(tileHeight * numberOfRows);
grid = new ArrayGrid(numberOfRows, numberOfColumns); grid = new ListGrid(numberOfRows, numberOfColumns);
graphicsContext = getGraphicsContext2D(); graphicsContext = getGraphicsContext2D();
} }
......
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment