gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:03:54 26 4
gpt4 key购买 nike

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

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

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

   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];
}
}

一旦取下一 block 就会调用的方法。

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

Debug.WriteLine(result);

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

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

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

例如:

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

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

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

//condition here

enter image description 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

关于C# 循环扫描二维数组的顶部、底部、左侧、右侧元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49683835/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com