Hi All!
So I was playing around with the coding train code for Dan’s Game of Life Simulation.
I wanted to change the rules, I did, and it worked great. I started to think about tracking state changes with a counter and decided to replace the states in the array with PVectors.
grid[i][j].x tracks the state, grid[i][j].y is a counter which increases by 1 every time there is a state change.
I keep getting a nullpointeracception on line 38 (first IF statement, for drawing the cells as rectangles if active) and I am not sure what I am missing.
My coding abilities are “new hobbyist” at best, so technical phrases unless to point me to reading and articles etc will go over my head :-/ lol
//Just like Daniel's Game of live
//except new rule set (tested and works)
//and replacing states with PVectors
//grid.x tracks state
//grid.y is a counter of the total number of
//state changes. (when state updated, .add(0,1) to vector)
float sum;
int cols;
int rows;
int resolution = 10;
PVector [][] grid;
void setup() {
frameRate(3);
size(1010, 1010);
cols = width / resolution;
rows = height / resolution;
PVector [][] grid = new PVector[cols][rows];
for (int i = 0; i < cols; i++) {
for (int j = 0; j < rows; j++) {
grid[i][j] = new PVector (0,0);
}
}
grid[50][50] = new PVector (1,0);
}
void draw() {
background(51);
for (int i = 0; i < cols; i++) {
for (int j = 0; j < rows; j++) {
int x = i * resolution;
int y = j * resolution;
if (grid[i][j].x == 1) {
fill(220);
noStroke();
rect(x, y, resolution, resolution);
}
}
}
PVector[][] next = new PVector[cols][rows];
// Compute next based on grid
for (int i = 0; i < cols; i++) {
for (int j = 0; j < rows; j++) {
float state = grid[i][j].x;
// Count live neighbors!
int sum = countNeighbors(grid, i, j);
if (state == 0 && (sum%2) == 1 ) {
next[i][j].x = 1;
next[i][j].add(0,1);
}
else if (state == 1 && (sum%2) == 0) {
next[i][j].x = 0;
next[i][j].add(0,1);
}
else {
next[i][j] = grid[i][j];
}
}
}
grid = next;
//noLoop();
}
int countNeighbors(PVector [][] grid, int x, int y) {
int sum = 0;
for (int i = -1; i < 2; i++) {
for (int j = -1; j < 2; j++) {
int col = (x + i + cols) % cols;
int row = (y + j + rows) % rows;
sum += grid[col][row].x;
}
}
sum -= grid[x][y].x;
return sum;
}
thanks in advance for anyone able to help!