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;
        }
Beispiel #2
0
 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));
 }