嘿,我正在為一個專案在 Matlab 中制作 Conway 的生命游戲,到目前為止,我已經創建了一個函式,可以找到原始單元格周圍的活單元格的數量,我相信這個函式在我已經測驗過并使用它時是有效的相當數量,但是當我將它實施到包含生活游戲條件規則的主腳本中時,它似乎停止作業。
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
主腳本
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
例如,我一直在嘗試測驗 Conway 生命游戲中的滑翔機模式,它是前面代碼中的陣列 r。但是當我運行代碼時,輸??出并不像預期的那樣。這里是命令視窗,第一個陣列是初始陣列 r
我還嘗試通過在主腳本 (disp(i " " j " = " alive);) 正下方放入一個 disp 函式來找出 cellStat 函式在整個 for 回圈中回傳的內容來除錯它找到當前細胞周圍的活細胞數量的線,并回傳有趣的結果。例如,它說第 2 行第 2 列的單元格有 6 個活著的鄰居,但網格上甚至沒有 6 個活著的單元格。
我認為這是主腳本中 for 回圈的錯誤,因為當我在該單元格上使用該函式時,它只會給出正確的結果 (5)。
我很感激一些幫助,因為我不確定從哪里開始解決這個問題。
uj5u.com熱心網友回復:
您只對單元執行一個回圈,在其中您既可以計算鄰居,也可以修改它們。這不起作用,因為您在回圈早期所做的修改會更改您稍后計算的鄰居數。
您需要兩個回圈:第一個是計算所有單元格的鄰居,第二個是根據其鄰居數修改每個單元格。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/463714.html
