diff --git a/Grid.java b/Grid.java index 939e05fd8e4207e92eb7ffaedebfcd6d4d0f6d0b..7d3d88e936c9c0a62cb4f3a3c85ccfcb2f2ca504 100644 --- a/Grid.java +++ b/Grid.java @@ -1,7 +1,4 @@ -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; -import java.util.Random; +import java.util.*; /** * {@code Grid} instances represent the grid in <i>The Game of Life</i>. @@ -87,7 +84,7 @@ public class Grid implements Iterable<Cell> { * <ul> * <li>Any live {@link Cell} with fewer than two live neighbours dies, i.e. underpopulation.</li> * <li>Any live {@link Cell} with two or three live neighbours lives on to the next - * generation.</li> + * * generation.</li> * <li>Any live {@link Cell} with more than three live neighbours dies, i.e. overpopulation.</li> * <li>Any dead {@link Cell} with exactly three live neighbours becomes a live cell, i.e. * reproduction.</li> @@ -96,31 +93,69 @@ public class Grid implements Iterable<Cell> { void nextGeneration() { goToNextState(calculateNextStates()); } + public List<Cell> getNeighbours(int rowIndex, int colummIndex) { + List<Cell> listofNeighbours= new ArrayList<Cell>(0); + listofNeighbours.add(getCell(rowIndex+1,colummIndex-1)); + listofNeighbours.add(getCell(rowIndex+1,colummIndex)); + listofNeighbours.add(getCell(rowIndex+1,colummIndex+1)); + listofNeighbours.add(getCell(rowIndex,colummIndex+1)); + listofNeighbours.add(getCell(rowIndex-1,colummIndex+1)); + listofNeighbours.add(getCell(rowIndex-1,colummIndex)); + listofNeighbours.add(getCell(rowIndex-1,colummIndex-1)); + listofNeighbours.add(getCell(rowIndex,colummIndex-1)); + return listofNeighbours; - private boolean[][] calculateNextStates() { - return null; } + private int countAliveNeighbours(int rowIndex, int columnIndex) { + int AliveNeighbours=0; + for (Cell Neighbour : getNeighbours(rowIndex,columnIndex)){ + if (Neighbour.isAlive()) + AliveNeighbours++; + } + return AliveNeighbours; + } + private boolean calculateNextState(int rowIndex, int columnIndex){ + if (countAliveNeighbours(rowIndex,columnIndex)==3 && !getCell(rowIndex,columnIndex).isAlive()) + return true; - private boolean calculateNextState(int rowIndex, int columnIndex, Cell cell) { - return false; + if (getCell(rowIndex,columnIndex).isAlive() && (countAliveNeighbours(rowIndex,columnIndex)==2 || countAliveNeighbours(rowIndex,columnIndex) == 3)) + return true; + else + return false; } - private int countAliveNeighbours(int rowIndex, int columnIndex) { - return 0; + private boolean[][] calculateNextStates() { + boolean[][] tableau=new boolean[numberOfRows][numberOfColumns]; + for (int row=0;row<numberOfRows;row++){ + for (int column=0;column<numberOfColumns;column++){ + tableau[row][column]=calculateNextState(row,column); + } + } + return tableau; } - private List<Cell> getNeighbours(int rowIndex, int columnIndex) { - return null; - } private void goToNextState(boolean[][] nextState) { + for (int i = 0; i <numberOfRows ; i++) { + for (int j = 0; j <numberOfColumns ; j++) { + if (nextState[i][j]) + getCell(i,j).setAlive(); + else + getCell(i,j).setDead(); + } + } } /** * Sets all {@link Cell}s in this {@code Grid} as dead. */ void clear() { + for (int i = 0; i <numberOfRows ; i++) { + for (int j = 0; j <numberOfColumns ; j++) { + getCell(i,j).setDead(); + } + } } /** @@ -131,6 +166,16 @@ public class Grid implements Iterable<Cell> { */ void randomGeneration(Random random) { + for (int i = 0; i <numberOfRows ; i++) { + for (int j = 0; j <numberOfColumns ; j++) { + if (random.nextBoolean()) + getCell(i,j).setAlive(); + else + getCell(i,j).setDead(); + + } + + } } }