public List <(AbstractField, int, Direction)> GetNeighbours(AbstractField field, AbstractField[][] board, int height, int width) { int[] center = field.GetPosition(); List <(AbstractField, int, Direction)> neighbours = new List <(AbstractField, int, Direction)>(); var neighbourCoordinates = DirectionExtensions.GetCoordinatesAroundCenter(center); for (int i = 0; i < neighbourCoordinates.Length; i++) { var(dir, y, x) = neighbourCoordinates[i]; if (y >= 0 && y < height && x >= 0 && x < width) { neighbours.Add((board[y][x], int.MaxValue, dir)); } } return(neighbours); }
public int ManhattanDistance(AbstractField f1, AbstractField f2) { return(Math.Abs(f1.GetPosition()[0] - f2.GetPosition()[0]) + Math.Abs(f1.GetPosition()[1] - f2.GetPosition()[1])); }