private IEnumerable<BoardPosition> GetBoardPieces(IVirtualBoard board, BoardPosition piece, MainWindow.Surround direction) { Func<BoardPosition, BoardPosition> dir = p => { switch (direction) { case MainWindow.Surround.Top: return board.TopOf(p); case MainWindow.Surround.Right: return board.RightOf(p); case MainWindow.Surround.Bottom: return board.BottomOf(p); case MainWindow.Surround.Left: return board.LeftOf(p); default: throw new ArgumentOutOfRangeException("direction"); } }; var borderingPiece = dir(piece); if (borderingPiece != null && borderingPiece.Piece.RootBoardPiece == piece.Piece.RootBoardPiece) { yield return borderingPiece; var borderingPiece2 = dir(borderingPiece); if (borderingPiece2 != null && borderingPiece2.Piece.RootBoardPiece == piece.Piece.RootBoardPiece) yield return borderingPiece2; } }
private IEnumerable <BoardPosition> GetBoardPieces(IVirtualBoard board, BoardPosition piece, MainWindow.Surround direction) { Func <BoardPosition, BoardPosition> dir = p => { switch (direction) { case MainWindow.Surround.Top: return(board.TopOf(p)); case MainWindow.Surround.Right: return(board.RightOf(p)); case MainWindow.Surround.Bottom: return(board.BottomOf(p)); case MainWindow.Surround.Left: return(board.LeftOf(p)); default: throw new ArgumentOutOfRangeException("direction"); } }; var borderingPiece = dir(piece); if (borderingPiece != null && borderingPiece.Piece.RootBoardPiece == piece.Piece.RootBoardPiece) { yield return(borderingPiece); var borderingPiece2 = dir(borderingPiece); if (borderingPiece2 != null && borderingPiece2.Piece.RootBoardPiece == piece.Piece.RootBoardPiece) { yield return(borderingPiece2); } } }