import java.util.Arrays; import java.util.Iterator; class Playground implements Iterable { int[][] field; int xSize; int ySize; private int generation; public Playground(int xSize, int ySize, int generation) { this.xSize = xSize; this.ySize = ySize; field = new int[xSize][ySize]; for(int i = 0; i < xSize; i++) { field[i] = new int[ySize]; Arrays.fill(field[i], 0); } this.generation = generation; } public void set(int x, int y, int value) { field[x][y] = value; } public int getXSize() { return xSize; } public int getYSize() { return ySize; } public int getGeneration() { return generation; } public int[][] getField() { int[][] result = new int[field.length][]; for(int i = 0; i < field.length; i++) { result[i] = new int[field[i].length]; System.arraycopy(field[i], 0, result[i], 0, field[i].length); } return result; } int[] getNeighbourhood(int x, int y) { /* v * . . . * . . . < * . . . */ int xCurrent = x - 1; int yCurrent = y - 1; int[] result = new int[8]; for(int i = 0; i < 8; i++) { if(xCurrent < 0 || xCurrent >= xSize || yCurrent < 0 || yCurrent >= ySize) { result[i] = 0; } else { result[i] = field[xCurrent][yCurrent]; } xCurrent++; if (xCurrent > x + 1) { xCurrent = x - 1; yCurrent++; } if(xCurrent == x && yCurrent == y) { xCurrent++; } } return result; } public Iterator iterator() { return new LifeFormIterator(this); } }