У меня есть простая двумерная сетка, я хочу иметь возможность получить все окружающие ячейки определенной 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, она вернула бы следующую область:
Я явно хочу, чтобы все ячейки в изображение выше должно быть возвращено, но, поскольку я просто умножаю свои направления, некоторые ячейки не будут учтены, как я могу убедиться, что все ячейки в области возвращены?