Hey I am working on making Conway's game of life in Matlab for a project and so far I have created a function that finds the number of alive cells around the original cell, which I believe works as I have tested it and played around with it a fair amount, but when I implement it into my main script that contains the conditional rules for the game of life it seems to stop working.
function [alive] = cellStat(grid,row,col)
%this function finds the number of alive cells surrounding it
alive = 0;
for i = row-1:row+1
%making sure the cell is on the board
if i <= 0 || i > length(grid)
continue
end
for j = col-1:col+1
%making sure the cell is on the board
if j <= 0 || j > length(grid)
continue
end
%making sure the cell is not counted as its own neighbour
if i == row && j == col
continue
end
%disp(i + " " + j + " = " + grid(i,j));
if grid(i,j) == 1
alive = alive + 1;
end
end
end
end
main script
r = [0 0 1 0 0;1 0 1 0 0;0 1 1 0 0;0 0 0 0 0;0 0 0 0 0];
years = 1;
alive = 0;
for n = 1:years
for i = 1:length(r)
for j = 1:length(r)
alive = cellStat(r,i,j);
if alive <= 1 && r(i,j) == 1
r(i,j) = 0;
elseif alive > 3 && r(i,j) == 1
r(i,j) = 0;
elseif alive == 3 && r(i,j) == 0
r(i,j) = 1;
end
end
end
disp(r);
end
For example, I have been trying to test this for a glider pattern in Conway's game of life which is the array r in the previous code. But when I run the code the output is not as expected. Here is the command window, the first array is the initial array r
I also tried to debug it by putting in a disp function to find out what the cellStat function is returning throughout the for loops in the main script (disp(i + " " + j + " = " + alive);) right underneath the line that finds the number of alive cells surrounding the current cell, and it comes back with interesting results. For example it says the cell at row 2 column 2 has 6 alive neighbours, but there are not even 6 alive cells on the grid.
I assume this is an error with the for loops in the main script because when I use the function on that cell only it gives a correct result (5).
I'd appreciate some help as I'm not really sure where to start fixing this.