gpt4 book ai didi

c# - 如何找到二维数组中的北、东、南、西和对角线邻居?

转载 作者:太空宇宙 更新时间:2023-11-03 19:38:41 28 4
gpt4 key购买 nike

我正在开发一个 2D 程序生成的 Unity 游戏,我想知道如何获得四个基本方向(N、E、S、W)以及四个基本方向(NE)上的所有邻居、东南、西南、西北)。

我正在努力实现的示例:

enter image description here

最佳答案

如果我们将单元格坐标视为,您可以通过查看上面的行、同一行和下面的行来获得邻居,在我们正在搜索的单元格之前的列、同一列和之后的列。

要获得这些值,我们只需设置 minRow = cell.Row - 1maxRow = cell.Row + 1minCol = cell.Col - 1 maxCol = cell.Col + 1(当然我们必须检查网格的边界以确保我们不会离开任何一边,而且我们不会返回 RowCol 与我们正在检查的单元格相同的单元格),然后我们返回网格中具有这些坐标的所有项目。

例如:

private static List<T> GetNeighbors<T>(int cellRow, int cellCol, T[,] grid)
{
var minRow = cellRow == 0 ? 0 : cellRow - 1;
var maxRow = cellRow == grid.GetUpperBound(0) ? cellRow : cellRow + 1;
var minCol = cellCol == 0 ? 0 : cellCol - 1;
var maxCol = cellCol == grid.GetUpperBound(1) ? cellCol : cellCol + 1;

var results = new List<T>();

for (int row = minRow; row <= maxRow; row++)
{
for (int col = minCol; col <= maxCol; col++)
{
if (row == cellRow && col == cellCol) continue;
results.Add(grid[row, col]);
}
}

return results;
}

在实践中,它可能看起来像:

private static void Main()
{
var grid = GetSquareGrid(10);

var neighbors = GetNeighbors(4, 5, grid);

Console.Write($"Neighbors of [4,5] are: ");
Console.Write(string.Join(",", neighbors.Select(n => $"[{n.X},{n.Y}]")));

GetKeyFromUser("\n\nDone! Press any key to exit...");
}

private static Point[,] GetSquareGrid(int size)
{
var result = new Point[size, size];

for (int row = 0; row < size; row++)
{
for (int col = 0; col < size; col++)
{
result[row, col] = new Point(row, col);
}
}

return result;
}

输出:

Image of console output from code above

关于c# - 如何找到二维数组中的北、东、南、西和对角线邻居?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57582782/

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