我想为“生命游戏”克隆制作一个环形阵列。如何使其成为环形?

我一直在想,我能想到的最佳解决方案就是说第一行和第一列等于最后一行。

还有其他想法吗?

编辑:也许有些人不知道人生游戏是什么?这是一个带有单元的小游戏。这些细胞可以死亡或存活,并相互反应。每当一个单元格到达我当前解决方案的边缘时,它就会撞到所有已死单元格的行/列中。我现在想做的是,当一个单元格到达边缘时,它会突然弹出另一侧。 (请参见下图)



我的代码现在看起来像什么:

#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]


或更妙的是,创建一种自动为您执行此操作的方法。

09-27 16:03