package com.jadekler.sheri; /** * Write some code that evolves generations through the "game of life". The input will be a game board of * cells, either alive (1) or dead (0). The code should take this board and create a new board for the * next generation based on the following rules: * 1) Any live cell with fewer than two live neighbours dies (underpopulation) * 2) Any live cell with two or three live neighbours lives on to the next generation (survival) * 3) Any live cell with more than three live neighbours dies (overcrowding) * 4) Any dead cell with exactly three live neighbours becomes a live cell (reproduction) * As an example, this game board as input: * 0 1 0 0 0 * 1 0 0 1 1 * 1 1 0 0 1 * 0 1 0 0 0 * 1 0 0 0 1 * Will have a subsequent generation of: * 0 0 0 0 0 * 1 0 1 1 1 * 1 1 1 1 1 * 0 1 0 0 0 * 0 0 0 0 0 */ public class GameOfLife { public static void main( String[] args ) { System.out.println( "Hello World!" ); } public int[][] nextGeneration(int[][] board) { int[][] newBoard = new int[board.length][board[0].length]; for (int y = 0; y < board.length; y++) { for (int x = 0; x < board[y].length; x++) { if (board[y][x] == 0) { if (numNeighbours(board, x, y) == 3) { newBoard[y][x] = 1; } } else { if (numNeighbours(board, x, y) == 2 || numNeighbours(board, x, y) == 3) { newBoard[y][x] = 1; } } } } return newBoard; } public int numNeighbours(int[][] grid, int x, int y) { int numNeighbours = 0; int tempX; int tempY; for (int i = -1; i <= 1; i++) { for (int j = -1; j <= 1; j++) { tempX = x+i; tempY = y+j; if (tempX >= 0 && tempX < grid[0].length && tempY >= 0 && tempY < grid.length && !(tempX == x && tempY == y)) { numNeighbours += grid[tempY][tempX]; } } } return numNeighbours; } public int[][] generateRandomBoard(int length) { return generateRandomBoard(length, length); } public int[][] generateRandomBoard(int width, int height) { int[][] board = new int[height][width]; for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { board[i][j] = (int)(Math.random()*10)%2; } } return board; } }