我想为“生命游戏”克隆制作一个环形阵列。如何使其成为环形?
我一直在想,我能想到的最佳解决方案就是说第一行和第一列等于最后一行。
还有其他想法吗?
编辑:也许有些人不知道人生游戏是什么?这是一个带有单元的小游戏。这些细胞可以死亡或存活,并相互反应。每当一个单元格到达我当前解决方案的边缘时,它就会撞到所有已死单元格的行/列中。我现在想做的是,当一个单元格到达边缘时,它会突然弹出另一侧。 (请参见下图)
我的代码现在看起来像什么:
#region check adjacent squares
if (grid[x - 1,y - 1] == true)
adjacentsquares++;
if (grid[x, y - 1] == true)
adjacentsquares++;
if (grid[x + 1, y -1] == true)
adjacentsquares++;
if (grid[x - 1, y] == true)
adjacentsquares++;
if (grid[x + 1, y] == true)
adjacentsquares++;
if (grid[x - 1, y + 1] == true)
adjacentsquares++;
if (grid[x, y + 1] == true)
adjacentSquares +=1;
if (grid[x + 1, y + 1] == true)
adjacentSquares +=1;
#endregion
我现在需要的是,每当我要检查相邻的单元格(在常规数组中超出范围)时,它都要检查另一侧的单元格。
如果我检查位置
[10,0]
。我需要检查相邻的单元格[9, max]
,[10, max]
和[11, max]
。 最佳答案
我不确定我的想法是否正确,但是为什么不创建一个封装对数组的访问并进行访问的方法
array[x % max, y % max]
,其中x和y均为传递给此方法的int值。
进一步解释一下:
假设您有一个像
array[sizeX, sizeY]
这样的数组。如果要访问数组的第一个位置(例如array[0, 0]
),则可以像array[0, 0]
或array[sizeX, sizeY]
那样进行操作,因为它环绕X和Y维度(环形数组)。因此,您可以使用模运算符,并始终像这样访问数组:array[desiredXPosition % sizeX, desiredYPosition % sizey]
或更妙的是,创建一种自动为您执行此操作的方法。