Этот метод берет координаты и возвращает все действительные соседние координаты.
Здесь необходимо ответить на вопрос: как определить, кто является действительными соседями? Для этого требуется немного логики - у квадрата есть соседи в своем ряду, предыдущий ряд и следующий ряд. Потенциально возможно до 8 соседей.
Взгляните на этот Stackblitz и поэкспериментируйте с ним немного. Я написал это на TypeScript, но понятия непосредственно применимы к C #.
Я определяю соседа как "действительного", если его координата находится в пределах одной из начальных координат, но НЕ выходит за границы.
getNeighbors(inX: number, inY: number) {
// Get proper bounds
var lowerX = Math.max(0, inX-1);
var upperX = Math.min(inX+1, this.size);
var lowerY = Math.max(0, inY-1);
var upperY = Math.min(inY+1, this.size);
var xCoords = Enumerable.rangeTo(lowerX, upperX);
var yCoords = Enumerable.rangeTo(lowerY, upperY);
var result = new Array<Coordinate>();
xCoords.forEach(x => {
yCoords.forEach(y => {
if (x !== inX || y !== inY) {
result.push({x, y});
}
});
});
return result;
}