我有一个简单的二维网格,我希望能够在给定区域大小的情况下获取特定单元格的所有周围单元格。目前,我的代码只能成功处理直接相邻的单元格并返回 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;
}
如您所见,我已经尝试管理区域大小,但假设我将函数设为areaSize2,它将返回以下区域:
我显然希望返回上图中的所有单元格,但由于我只是将我的方向相乘,因此某些单元格不会被考虑在内,我如何确保该区域中的所有单元格都被返回?
