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
我正在尝试为我正在编写的单人纸牌游戏完成游戏条件。
我把所有的动作和棋子都移除了。 每一块都作为椭圆 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