如何制作环形阵列?

时间:2011-12-25 19:45:10

标签: c# arrays

我想制作一个生命游戏克隆的环形阵列。我如何制作环形?

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

还有其他想法吗?

编辑:也许有些人不知道生命游戏是什么?这是一个带有单元格的小型游戏。这些细胞可以死亡或存活并相互反应。每当一个细胞到达我当前溶液的边缘时,它就会碰到所有死细胞的行/列。我现在要做的是,当一个细胞到达边缘时,它只会弹出另一侧。 (见下图)

enter image description here

我的代码现在是什么样的:

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

2 个答案:

答案 0 :(得分:4)

我不确定我的想法是否正确,但为什么不创建一个方法来封装对数组的访问权限并进行访问

array[x % max, y % max]  

,其中x和y都是传递给此方法的整数。

进一步解释:
假设你有一个像array[sizeX, sizeY]这样的数组。如果你想访问数组的第一个位置,比如说array[0, 0],你就可以像array[0, 0]array[sizeX, sizeY]这样做,因为它包围了它的X和Y维度(环形阵列) )。因此,您可以使用模数运算符,并始终像这样访问您的数组:

array[desiredXPosition % sizeX, desiredYPosition % sizey]  

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

答案 1 :(得分:4)

无论何时索引数组,都要使用模数:例如

  array[ x % size_x,  y % size_ y]

请注意,我称之为size_x而不是max_x。允许的最大x索引为size_x - 1