// a very simple GoL implementation // ugly globals int[][] game; int[][] nextGen; // precentage of random pop alive int popAlive = 75; void setup(){ // create the game board size(500, 500); game = new int[width][height]; nextGen = new int[width][height]; background(0, 0, 0); randomPop(); } void draw(){ drawBoard(); next(); } void drawBoard(){ int count = 0; for(int i = 0; i < width; i++){ for(int j = 0; j < height; j++){ if(game[i][j] == 1){ stroke(0, 255, 0); point(i, j); count++; } else{ stroke(0); point(i, j); } } } } void randomPop(){ // randomly populate for(int i = 0; i < width; i++){ for(int j = 0; j < height; j++){ // i think the max param on the random function is exclusive if(int(random(1, 101)) <= popAlive){ game[i][j] = 1; } else{ game[i][j] = 0; } } } } void next(){ int neighbors = 0; for(int i = 0; i < width; i++){ for(int j = 0; j < height; j++){ neighbors = countNeighbors(i, j); if((game[i][j] == 1)){ if(neighbors == 2 || neighbors == 3){ nextGen[i][j] = 1; } else{ nextGen[i][j] = 0; } } else{ if(neighbors == 3){ nextGen[i][j] = 1; } else{ nextGen[i][j] = 0; } } } } for(int i = 0; i < width; i++){ for(int j = 0; j < height; j++){ game[i][j] = nextGen[i][j]; } } } int countNeighbors(int i, int j){ int neighbors = (game[(i + width - 1) % width][(j + height - 1) % height] + game[i][(j + height - 1) % height] + game[(i + 1) % width][(j + height - 1) % height] + game[(i + width - 1) % width][j] + game[(i + 1) % width][j] + game[(i + width - 1) % width][(j + 1) % height] + game[i][(j + 1) % height] + game[(i + 1) % width][(j + 1) % height]); return neighbors; }