Created
April 2, 2016 05:20
-
-
Save bzdgn/1b5fc50713df545b691d5cf732db4a6a to your computer and use it in GitHub Desktop.
A Simple Conway's Game Of Life Demo in Java Version #2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| public class GameOfLifeDemoV2 { | |
| private static final int HEIGHT = 10; | |
| private static final long PERIOD = 120*1; | |
| public static void main(String[] args) throws InterruptedException { | |
| boolean [][] matrix = new boolean[HEIGHT][HEIGHT]; | |
| // generateRandom(matrix); // random values matrix | |
| // testGlider(matrix); // test for Glider | |
| testTumbler(matrix); // test for Tumbler | |
| while(true) { | |
| Thread.sleep(PERIOD); | |
| printMatrix(matrix); | |
| processLife(matrix); | |
| System.out.println("-----------------------------------------------------"); | |
| } | |
| } | |
| private static void processLife(boolean[][] matrix) { | |
| boolean[][] tempMatrix = new boolean[matrix.length][matrix[0].length]; | |
| copyMatrix(matrix, tempMatrix); | |
| // sweep the matrix | |
| for(int i = 0; i < HEIGHT; i++) { | |
| for(int j = 0; j < HEIGHT; j++) { | |
| int countAlive = countAliveNeighboors(matrix, i, j); // count alive neighboors of (i,j) | |
| handleRules(tempMatrix, i, j, countAlive); | |
| } | |
| } | |
| copyMatrix(tempMatrix, matrix); | |
| } | |
| // rules | |
| // if cell have neighboors smaller than 1, die of loneliness | |
| // if cell have neighboors greater than 4, die of overpopulation | |
| // if only cell have 3 or 4 neighboors, live | |
| private static void handleRules(boolean[][] matrix, int i, int j, int countAlive) { | |
| if(countAlive <= 1 || countAlive >= 4) | |
| matrix[i][j] = false; | |
| else if(countAlive == 3 || countAlive == 4) | |
| matrix[i][j] = true; | |
| } | |
| private static int countAliveNeighboors(boolean[][] matrix, int i, int j) { | |
| int countAlive = 0; | |
| for(int k = i-1; k <= i+1; k++) { | |
| for(int t = j-1; t <= j+1; t++) { | |
| if((k == i && t == j) || (t < 0 || t >= HEIGHT) || (k < 0 || k >= HEIGHT) ) | |
| continue; | |
| else { | |
| if(matrix[k][t]) { | |
| countAlive++; | |
| } | |
| } | |
| } | |
| } | |
| return countAlive; | |
| } | |
| private static void copyMatrix(boolean[][] src, boolean[][] dst) { | |
| for(int i = 0; i < HEIGHT; i++) | |
| System.arraycopy(src[i], 0, dst[i], 0, HEIGHT); | |
| } | |
| private static void printMatrix(boolean[][] matrix) { | |
| for(int i = 0; i < matrix.length; i++) { | |
| for(int j = 0; j < matrix[i].length; j++) { | |
| if(matrix[i][j] == true) { | |
| System.out.print('X'); | |
| } else { | |
| System.out.print(' '); | |
| } | |
| } | |
| System.out.println(); | |
| } | |
| } | |
| private static void generateRandom(boolean[][] matrix) { | |
| for(int i = 0; i < HEIGHT; i++) | |
| for(int j = 0; j < HEIGHT; j++) | |
| matrix[i][j] = Math.random() < 0.5; | |
| } | |
| /* | |
| * Test Method for Generating a Glider | |
| * | |
| * X | |
| * X | |
| * XXX | |
| * | |
| */ | |
| private static void testGlider(boolean[][] matrix) { | |
| matrix[0][1] = true; | |
| matrix[1][2] = true; | |
| matrix[2][0] = true; | |
| matrix[2][1] = true; | |
| matrix[2][2] = true; | |
| } | |
| /* | |
| * Test Method for Generating a Tumbler | |
| * | |
| * XX XX | |
| * XX XX | |
| * X X | |
| * X X X X | |
| * X X X X | |
| * XX XX | |
| * | |
| */ | |
| private static void testTumbler(boolean[][] matrix) { | |
| matrix[0][2] = true; | |
| matrix[0][3] = true; | |
| matrix[0][5] = true; | |
| matrix[0][6] = true; | |
| matrix[1][2] = true; | |
| matrix[1][3] = true; | |
| matrix[1][5] = true; | |
| matrix[1][6] = true; | |
| matrix[2][3] = true; | |
| matrix[2][5] = true; | |
| matrix[3][1] = true; | |
| matrix[3][3] = true; | |
| matrix[3][5] = true; | |
| matrix[3][7] = true; | |
| matrix[4][1] = true; | |
| matrix[4][3] = true; | |
| matrix[4][5] = true; | |
| matrix[4][7] = true; | |
| matrix[5][1] = true; | |
| matrix[5][2] = true; | |
| matrix[5][6] = true; | |
| matrix[5][7] = true; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment