C#循环扫描2D阵列的顶部,底部,左侧,右侧元素

时间:2018-04-06 01:19:31

标签: c# multidimensional-array uwp-xaml

我正在尝试完成一个游戏,因为我正在写一个peg纸牌游戏。

我把所有的动作和碎片都移除了。 每件作为Ellipse UI Ellement保存在2d阵列中,当拍摄一件时,它将被替换为边框Ui Element。

我已经开始使用从Stackoverflow post改编的方法来扫描数组元素周围的8个相邻方块。

   public static IEnumerable<T> AdjacentElements<T>(T[,] arr, int row, int column)
    {
        int rows = arr.GetLength(0);
        int columns = arr.GetLength(1);

        for (int j = row - 1; j <= row + 1; j++)
            for (int i = column - 1; i <= column + 1; i++)
                if (i >= 0 && j >= 0 && i < columns && j < rows && !(j == row && i == column))
                    yield return arr[j, i];
    }
}

该方法被称为一件事。

 var results = AdjacentElements(grid, 3, 3);
        foreach (var result in results)

            Debug.WriteLine(result);

当遇到椭圆时,它应该检查椭圆的正上方,下方,左侧和右侧的正方形,此时全部是8个方格,我只需要四个(顶部,底部,左侧和右侧)。

我正在使用网格参考3,3进行测试,它按预期打印出来,但是对于所有8个方格。

如果四个方格中的任何一个依次遇到椭圆,则直线中的下一个方格应该是一个边框,以便成为可能的移动。

例如:

圆圈1是正在检查的椭圆。 下方,左侧和右侧的圆圈将被忽略。 选择Cirle 2为Square 3为空。 这将产生有效的移动,因此游戏将继续。 如果没有找到有效的移动,游戏将结束。

我不知道如何继续这个,我想把方法调用放在一个嵌套的for循环中来遍历每个元素,但我认为它效率很低。

 var results = AdjacentElements(grid, i, j);
    foreach (var result in results)

        //condition here

enter image description here

1 个答案:

答案 0 :(得分:2)

我认为我真的不明白你想做什么。但是,是的,你可以做嵌套循环。但有时它更容易戳它

给定一些数组x,y

var x = 23;
var y = 3;

<强>〔实施例

var checks = List<Point>();

checks.Add(new Point(x+1,y));
checks.Add(new Point(x-1,y));
checks.Add(new Point(x,y+1));
checks.Add(new Point(x,y-1));

foreach(var check in checks)
   //If Bounds check
   //do what you need to do