- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在开发一个 2D 程序生成的 Unity 游戏,我想知道如何获得四个基本方向(N、E、S、W)以及四个基本方向(NE)上的所有邻居、东南、西南、西北)。
我正在努力实现的示例:
最佳答案
如果我们将单元格坐标视为行
和列
,您可以通过查看上面的行、同一行和下面的行来获得邻居,在我们正在搜索的单元格之前的列、同一列和之后的列。
要获得这些值,我们只需设置 minRow = cell.Row - 1
、maxRow = cell.Row + 1
、minCol = cell.Col - 1
和 maxCol = cell.Col + 1
(当然我们必须检查网格的边界以确保我们不会离开任何一边,而且我们不会返回 Row
和 Col
与我们正在检查的单元格相同的单元格),然后我们返回网格中具有这些坐标的所有项目。
例如:
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;
}
输出:
关于c# - 如何找到二维数组中的北、东、南、西和对角线邻居?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57582782/
我仍在为我正在尝试制作的迷宫游戏编写 Cell 类(class)。在获得不同线程的帮助后,有人建议我为我的墙壁/邻居使用 EnumMap,到目前为止效果很好。 这是我目前所拥有的: enum Dir
在 PostGIS 中,有没有办法计算 50 英里外不同方向的另一个点? 给定一个点,('New York',-74.00,40.71),我如何计算以下点? 1) 50 miles directly
我想计算正在行驶的车辆的加速度。到目前为止,我能够使用以下公式获得沿航向矢量的加速度 a = (velocity(now)-velocity(previous))/time m/s^2 示例:一辆汽车
我是一名优秀的程序员,十分优秀!