C# 循环扫描二维数组的顶部、底部、左侧、右侧元素

C# Loop to scan top,bottom,left,right elements of 2d Array

我正在尝试为我正在编写的单人纸牌游戏完成游戏条件。

我把所有的动作和棋子都移除了。 每一块都作为椭圆 UI 元素保存在二维数组中,当一块被拿走时,它被替换为边框 Ui 元素。

我已经开始使用一种改编自 Whosebug 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个方块,我只需要4个(上、下、左、右)。

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

如果四个方块中的任何一个依次遇到并形成椭圆,则直线上的下一个方块应该是边界,以便成为可能的着法。

例如:

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

我不确定如何进行此操作,我正在考虑将方法调用放在嵌套的 for 循环中以遍历每个元素,但我认为这会非常低效。

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

        //condition here

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

给定一些数组 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