private IEnumerable<BoardCoordinate> GetCastleMoveIfAvailable(BoardCoordinate rookStart, BoardCoordinate moveIfSuccess) { var piece = _board.GetPiece(rookStart); var kingCoordinate = BoardCoordinate.For(KingColumn, rookStart.Y); var pathMaker = new PathMaker(kingCoordinate, rookStart); var spacesBetweenKingAndRook = pathMaker.GetPathToDestination().Where(bc => bc.X != rookStart.X && bc.X != KingColumn); var isBlocked = spacesBetweenKingAndRook.Any(bc => _board.GetPiece(bc) != null); if (piece != null && !piece.HasMoved && !isBlocked) yield return moveIfSuccess; }
private bool IsBlocked(BoardCoordinate origin, BoardCoordinate destination) { var checker = new PathMaker(origin, destination); var spacesAlongPath = checker.GetPathToDestination(); var lastSpace = spacesAlongPath.LastOrDefault(); return spacesAlongPath.Any(space => DoesFriendlyPieceExistAt(origin, space)) || spacesAlongPath.Any(space => DoesPieceExistAt(space) && !space.Equals(lastSpace)); }