c# - 网格 - 使用指定的区域大小获取所有周围的单元格
问题描述
我有一个简单的二维网格,我希望能够在给定区域大小的情况下获取特定单元格的所有周围单元格。目前,我的代码只能成功处理直接相邻的单元格并返回 3x3 的区域,如果我尝试更大的区域,我会遇到问题:
public static class DIRECTION
{
public static Coord NORTH = new Coord(0, 1);
public static Coord SOUTH = new Coord(0, -1);
public static Coord EAST = new Coord(1, 0);
public static Coord WEST = new Coord(-1, 0);
public static Coord NORTHEAST = new Coord(1, 1);
public static Coord NORTHWEST = new Coord(-1, 1);
public static Coord SOUTHEAST = new Coord(1, -1);
public static Coord SOUTHWEST = new Coord(-1, -1);
}
public List<Cell> GetSurroundingCells(Coord current, GridLayer layer, int areaSize)
{
bool IsSurrounding(Coord coord, Coord dir)
{
for (int i = 1; i <= areaSize; i++)
{
if (coord.Equals(current.Add(new Coord(dir.x * i, dir.z * i))))
return true;
}
return false;
}
List<Cell> cells = new List<Cell>();
for (int x = 0; x < GetWidth(); x++)
{
for (int z = 0; z < GetHeight(); z++)
{
Coord coord = new Coord(x, z);
if (IsSurrounding(coord, DIRECTION.NORTH) ||
IsSurrounding(coord, DIRECTION.SOUTH) ||
IsSurrounding(coord, DIRECTION.EAST) ||
IsSurrounding(coord, DIRECTION.WEST) ||
IsSurrounding(coord, DIRECTION.NORTHEAST) ||
IsSurrounding(coord, DIRECTION.NORTHWEST) ||
IsSurrounding(coord, DIRECTION.SOUTHEAST) ||
IsSurrounding(coord, DIRECTION.SOUTHWEST))
cells.Add(GetCell(coord, layer));
}
}
return cells;
}
如您所见,我已经尝试管理区域大小,但假设我将函数设为areaSize
2,它将返回以下区域:
我显然希望返回上图中的所有单元格,但由于我只是将我的方向相乘,因此某些单元格不会被考虑在内,我如何确保该区域中的所有单元格都被返回?
解决方案
您可以创建一个通用方法,该方法需要一个 startrow
和search。column
distance
这是我过去使用的东西的轻微修改版本。
public static List<Cell> SurroundingCellss(int startRow, int startColumn, int distance)
{
List<Cell> matches = new List<Cell>();
for (int searchRow = startRow - distance; searchRow <= startRow + distance; searchRow++)
{
for (int searchCol = startColumn - distance; searchCol <= startColumn + distance; searchCol++)
{
if (cells[searchRow, searchCol] != null)
{
//do logic and if ok add to return list
matches.Add(cells[searchRow, searchCol]);
}
}
}
return matches;
}
您将需要根据需要对其进行编辑,但会给您一个想法。
推荐阅读
- c# - 字节数组转换为字符串c#
- javascript - 如何仅使用 event.currentTarget Javascript 显示所选元素(Json)
- reactjs - 反应私有路由不重定向
- java - Spring Boot 多模块项目,通用数据源
- powershell - 如何使用 PowerShell 脚本在现有集群上停止和启动 Azure databricks 作业?
- r - 特定文件的数量及更多
- sql - 在未嵌套的 jsonb 列上优化 GROUP BY + COUNT DISTINCT
- r - 在 R 中使用 lapply 递归填充列表
- laravel - Laravel Sanctum - 登录用户最佳实践
- jinja2 - 如何在cookiecutter json文件中设置文件夹路径变量