选择多维数组中的所有相邻值

时间:2011-07-22 23:17:32

标签: c# multidimensional-array xna

我正在构建一个泡泡破坏者 - 有点游戏。我的代码使用两个2D数组,一个包含颜色索引(1 - 6)来表示彩色圆圈,另一个指示是否已选择圆(1或0)。我可以成功选择一个圆圈,第二个数组中的正确值会发生变化,这会在屏幕上正确反映出来。

这是选择一个圆圈和四个相邻圆圈的方法。我传入用户在网格上选择的X和Y坐标。我将该位置设置为选中(在SelectedCircles数组中从0到1。检查任何边是否有一个具有相同颜色的圆,如果是,请将该圆更改为选中。

   private void SelectSurroundingCircles(int xPosition, int yPosition)
    {
        SelectedCircles[yPosition, xPosition] = 1;
        int colorKey = Circles[yPosition, xPosition];

        int increment = 1;
        for (int i = 0; i < Nickles.Length; i++)
        {
            if (Circles[yPosition - increment, xPosition] == colorKey)
                SelectedCircles[yPosition - increment, xPosition] = 1; // TOP

            if (Circles[yPosition + increment, xPosition] == colorKey)
                SelectedCircles[yPosition + increment, xPosition] = 1; // BOTTOM

            if (Circles[yPosition, xPosition + increment] == colorKey)
                SelectedCircles[yPosition, xPosition + increment] = 1; // RIGHT

            if (Circles[yPosition, xPosition - increment] == colorKey)
                SelectedCircles[yPosition, xPosition - increment] = 1; // LEFT
        }
    }

我想要实现的是,选择彼此相邻的所有相同颜色的圆圈。基本上你首先看看上面相邻的圆圈,看看它们相邻的圆圈,等等...我尝试了各种其他的东西,但不知怎的,我无法弄明白。希望有人可以帮助我,我必须忽视一些事情。

感谢。

2 个答案:

答案 0 :(得分:1)

不确定这是否满足您的确切选择逻辑,但不是递归解决方案:

if ( SelectedCircles[yPosition - increment, xPosition] != 1 && Circles[yPosition - increment, xPosition] == colorKey) {
   SelectSurroundingCircles(xPosition, yPosition - increment)
}
//... same for other 3 directions

额外检查是否已经选择了位置对于防止无休止的递归非常重要

答案 1 :(得分:0)

没关系,我自己解决了。我查看了所选圈子的数组,这很有效。

            for (int y = 0; y < SelectedCircles.GetLength(0); y++)
            {
                for (int x = 0; x < SelectedCircles.GetLength(1); x++)
                {
                    if (SelectedCircles[y, x] == 1)
                    {
                        if (y - 1 >= 0 && SelectedCircles[y - 1, x] != 1 && Circles[y - 1, x] == colorKey)
                            SelectedCircles[y - 1, x] = 1; // TOP

                        if (y + 1 <= 9 && SelectedCircles[y + 1, x] != 1 && Circles[y + 1, x] == colorKey)
                            SelectedCircles[y + 1, x] = 1; // BOTTOM

                        if (x + 1 <= 9 && SelectedCircles[y, x + 1] != 1 && Circles[y, x + 1] == colorKey)
                            SelectedCircles[y, x + 1] = 1; // RIGHT

                        if (x - 1 >= 0 && SelectedCircles[y, x - 1] != 1 && Circles[y, x - 1] == colorKey)
                            SelectedCircles[y, x - 1] = 1; // LEFT
                    }
                }
            }
        }