我正在尝试在 Matlab 中编写 Conway 的生活游戏,但总是出错。我没有收到错误,所以我真的不知道自己做错了什么,它什么也没做。我认为这个问题可能与单元格的计数(检查邻居的数量)或增加矩阵边界单元格的规则有关。
这是我的代码:
TIME = 10;
pulsar; % creates begin matrix X
life{1} = X;
life = {}; % create list 'life'
numrows = size(X,1); % calculate number of rows
numcolumns = size(X,2); % calculate number of columns
current = X; % make seed the first current(matrix you are starting off with in each step)
for i = 0:TIME; % determine amount of times the loop will run
nextnext = X; % create "nextnext" matrix to implement the rules of the game on (copy of X)
for row = 2:numrows-1; % for each row
for column = 2:numcolumns-1; % for each column
east_of_row = column + 1; % define how to count the cell right of target cell
west_of_row = column - 1; % define how to count the cell left of target cell
north_of_column = row - 1; % define how to count the cell north of target cell
south_of_column = row + 1; % define how to count the cell south of target cell
% count neighboring cells:
neighbors = 0; % start counter 'neighbors' with 0
while east_of_row <= size(X),
west_of_row <= size(X);,
north_of_column <= size(X);,
south_of_column <= size(X);
if current(row,east_of_row) == 1 % if neighboring cell has a value of 1
neighbors + 1; % add 1 to neighbors
end
if current(row,west_of_row) == 1 % if neighboring cell has a value of 1
neighbors + 1; % add 1 to neighbors
end
if current(north_of_column,column) == 1 % if neighboring cell has a value of 1
neighbors + 1; % add 1 to neighbors
end
if current(south_of_column,column) == 1 % if neighboring cell has a value of 1
neighbors + 1; % add 1 to neighbors
end
if current(south_of_column,east_of_row) == 1 % if neighboring cell has a value of 1
neighbors + 1; % add 1 to neighbors
end
if current(north_of_column,east_of_row) == 1 % if neighboring cell has a value of 1
neighbors + 1; % add 1 to neighbors
end
if current(north_of_column,west_of_row) == 1 % if neighboring cell has a value of 1
neighbors + 1; % add 1 to neighbors
end
if current(south_of_column,west_of_row) == 1 % if neighboring cell has a value of 1
neighbors + 1; % add 1 to neighbors
end
end
while east_of_row == 0,west_of_row == 0;,north_of_column == 0;,south_of_column == 0;
if current row,east_of_row ~= 0;
if current(row,east_of_row) == 1 % if neighboring cell has a value of 1
neighbors + 1; % add 1 to neighbors
end
end
if current row,west_of_row ~= 0;
if current(row,west_of_row) == 1 % if neighboring cell has a value of 1
neighbors + 1; % add 1 to neighbors
end
end
if current north_of_column,column ~= 0;
if current(north_of_column,column) == 1 % if neighboring cell has a value of 1
neighbors + 1; % add 1 to neighbors
end
end
if current south_of_column,column ~= 0;
if current(south_of_column,column) == 1 % if neighboring cell has a value of 1
neighbors + 1; % add 1 to neighbors
end
end
if current south_of_column,east_of_row ~= 0;
if current(south_of_column,east_of_row) == 1 % if neighboring cell has a value of 1
neighbors + 1; % add 1 to neighbors
end
end
if current north_of_column,east_of_row ~= 0;
if current(north_of_column,east_of_row) == 1 % if neighboring cell has a value of 1
neighbors + 1; % add 1 to neighbors
end
end
if current north_of_column,west_of_row ~= 0;
if current(north_of_column,west_of_row) == 1 % if neighboring cell has a value of 1
neighbors + 1; % add 1 to neighbors
end
end
if current south_of_column,west_of_row ~= 0;
if current(south_of_column,west_of_row) == 1 % if neighboring cell has a value of 1
neighbors + 1; % add 1 to neighbors
end
end
end
neigbors
% rules of the game:
if current(row,column) == 1 % in case a target cell has a value of 1:
if neighbors < 2 % if the number of neighbors is smaller than 2
nextnext(row,column) = 0; % value of target cell gets 0 in nextnext
end
if neighbors == 2 , neighbors == 3 % if the number of neighbors is 2 or 3
nextnext(row,column) = 1; % value of target cell stays 1 in nextnext
end
if neighbors > 3 % if the number of neigbors is higher than 3
nextnext(row,column) = 0; % value of target cell gets 0 in nextnext
end
end
if current (row,column) == 0 % in case a target cell has a value of 0:
if neighbors == 3 % if the number of neighbors is 3
nextnext(row,column) = 1; % value of target cell gets 1 in nextnext
end
if neighbors ~= 3 % if the number of neigbors isn't 3
nextnext(row,column) = 0; % value of target cell stays 0 in nextnext
end
end
end
end
current = nextnext; % make nextnext matrix the current matrix for the next step
life{TIME+1} = nextnext; % add matrix to list 'life
end
show(life);