function _play(uint256 _userMoney) private returns(bool _result,uint256 _toUserMoney){
        _result = false;
        _toUserMoney = _userMoney;
        
        uint256 _betEther = viewBetEther(curPosition.add(1));
        if(_toUserMoney < _betEther){
            return (_result,_toUserMoney);
        }

        curPosition++;
        _toUserMoney= _toUserMoney.sub(_betEther);                   
        thisEther = thisEther.add(_betEther);
        
        uint256 seed = uint256(
            keccak256(
                block.timestamp,
                block.difficulty,
                uint256(keccak256(block.coinbase))/(now),
                block.gaslimit,
                uint256(keccak256(msg.sender))/ (now),
                block.number,
                _betEther,
                getEventId(),
                gasleft()
            )
        );

        uint256 _card =  seed % MAX_LENGTH; 

        emit OnPlay(curPosition, msg.sender, _card, currentEventId, now);

        uint256 _toRewardPlayer = 0;
        if(_isKingKong(_card) || _isStraight(_card)){
            if(curPosition > REWARD_FORWARD_POSITION){
               uint256 _prePosition = curPosition.sub(REWARD_FORWARD_POSITION);
            }else{
                _prePosition = 1;
            }            
            _toRewardPlayer = _rewardKing(_prePosition, _card,msg.sender,uint8(3));
            _toUserMoney= _toUserMoney.add(_toRewardPlayer);  
            _result = true;
            return (_result,_toUserMoney);
       }

       _prePosition = resultOf[_card];
       if(_prePosition != 0 && _prePosition < curPosition && playerBetInfoOf[_prePosition].card == _card ){
            _toRewardPlayer = _reward(_prePosition, _card);
            _toUserMoney= _toUserMoney.add(_toRewardPlayer); 
            _result = true;
            return (_result,_toUserMoney);
       }else{
            betInfo memory bi = betInfo({
                addr :  msg.sender,
                card : _card
            });
            playerBetInfoOf[curPosition] = bi;
            resultOf[_card]=curPosition;
            _result = true;
            return (_result,_toUserMoney);
       }
    }