private void CheckIfKingCrossesAttackedField(IBoard board, Position from, Position to, ChessColor color) { if (to.Col < from.Col) { for (int i = to.Col; i <= from.Col; i++) { Position currentPosition = Position.FromChessCoordinates(from.Row, (char)i); if (MovedFigures.IsFieldAttacked(board, currentPosition, color)) { throw new InvalidOperationException(ExceptionMessages.KingCannotCrossAttackedField); } } } else { for (int i = from.Col + 1; i <= to.Col; i++) { Position currentPosition = Position.FromChessCoordinates(from.Row, (char)i); if (MovedFigures.IsFieldAttacked(board, currentPosition, color)) { throw new InvalidOperationException(ExceptionMessages.KingCannotCrossAttackedField); } } } }
private void CheckIfKingIsInCheck(IBoard board, ChessColor color) { var position = board.GetFigurePostionByTypeAndColor("King", color); if (MovedFigures.IsFieldAttacked(board, position, color)) { throw new InvalidOperationException(ExceptionMessages.CannotCastleIfKingIsInCheckException); } }