[英]Wrapping in Conway's Game of Life C++
我正在嘗試編寫一個程序,在20x60的單元板上實現Conway的生活游戲。 網格將環繞,因此左側將連接到右側(相鄰),頂部將連接到底部。
因此,位置(1, col)
任何像元將在(maxRow, col)
處具有鄰居。 位置為(row, 1)
任何像元將在(row, maxCol)
處具有鄰居。
應該使用以下函數來計算相鄰小區的數量。 它適用於不在邊緣的坐標,但不適用於邊緣的坐標。 例如,如果在(1, 10)
, (1, 11)
和(1, 12)
(1, 11)
處有點,並且(1, 12)
(1, 10)
被傳遞到函數中,它將返回高數字作為鄰居計數而不是1
。
{
int i, j;
int count = 0;
for (i = row - 1; i <= row + 1; i++)
for (j = col - 1; j <= col + 1; j++)
count += grid[i][j]; }
if (row==maxrow-1 || row==0)
count = count+ grid [(row-(maxrow-1))*-1][col-1]+grid[(row-(maxrow-1))*-1][col]+grid[(row-(maxrow-1))*-1][col+1];
if (col==0 || col==maxcol-1)
count=count +grid[row-1][(col-(maxcol-1))*-1]+grid[row][(col-(maxcol-1))*-1]+grid[row+1][(col-(maxcol-1))*-1];
count -= grid[row][col];
return count;
}
首先,我將網格更改為從0開始而不是從1開始。
然后,您可以編寫一個簡單的循環:
int count = 0;
for (i = row - 1; i <= row + 1; i++) {
for (j = col - 1; j <= col + 1; j++) {
if(i != row && j != col) {
count += grid[(i + maxrow)%maxrow][(j + maxcol)%maxcol];
}
}
}
+ maxrow
是為了確保索引為正。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.