新DAPP《翻纸牌》申请上线



  • 1.游戏名称: 翻纸牌
    纸牌为传统的方块纸牌,玩家可以单押注纸牌大小(A~10)也可以单押四种花色(黑桃,红桃,梅花,方块),或者大小和花色的组合,与智能合约随机开出的纸牌进行大小和花色的比较。

    游戏规则:
    纸牌规定大小为A到10,花色为黑桃,红桃,梅花,方块,共四十张牌。大小选项为(小数A~5,大数6~10或者全选),花色选项为四种花色(可复选)。玩家可以:
    1.) 单压花色:勾选大小押注选项里的“全选”,即为单押花色,只要与智能合约开出的纸牌的花色相符即可。
    2.) 或者单压大小:玩家可以勾选花色押注选项里的“全选”,对大数小数进行押注。
    3.) 或者大小和花色的组合。
    最终的中奖概率计算为大小和花色概率相乘(当前押注组合的获奖概率及回报VITE数量会实时显示在界面中),例如:
    若单压花色,选中一种花色并且最终与开牌相符,则概率为25%,回报VITE数额为押注的四倍减掉手续费。
    若单压大小,选中小数和大数的概率各50%,回报为押注的两倍减掉手续费。
    若同时押注大小和花色的组合:则概率为两者相乘,总回报率同样为两者回报率相乘。

    2.押注金额:1~50VITE,单位为整数。

    3.上线状态:否

    4.dApp的合约地址:vite_8d5c6404d0fc2a5c2a2df0ea87c15242dfb89e734f4d805d0b,合约源代码已开源,地址:https://explorer.vite.net/account/vite_8d5c6404d0fc2a5c2a2df0ea87c15242dfb89e734f4d805d0b

    5.合约代码如下:

    contract ViteBet{
        address owner;
        tokenId token = "tti_5649544520544f4b454e6e40";
    
        event win(address indexed addr, uint256 rollTargets, uint256 suitTargets, uint256 betAmount, uint64 rollNum, uint64 suitNum, uint256 winAmount);
        event lose(address indexed addr, uint256 rollTargets, uint256 suitTargets, uint256 betAmount, uint64 rollNum, uint64 suitNum);
        event suspendBet(address indexed addr, uint256 rollTargets, uint256 suitTargets, uint256 betAmount, uint64 rollNum, uint64 suitNum);
    
        constructor() public {
            owner = msg.sender;
        }
    
        onMessage () payable {
        }
    
        onMessage DrawMoney(uint256 amount) {
            require(owner == msg.sender);
            require(amount <= balance(token));
            msg.sender.transfer(token, amount);
        }
    
        onMessage BetAndRoll(uint256 rollTargets, uint256 suitTargets) payable {
            uint256 betAmount = msg.amount;
            address betAddr = msg.sender;
            require(msg.tokenid == token);
            require(betAmount >= 1 vite && betAmount <= 1000 vite);
            require(rollTargets >= 1 && rollTargets <= 3); //  1 2 3
            require(suitTargets >= 4 && suitTargets < 10000); //4567
    
            uint64 rollNum = nextrandom() % 10 + 1; //rollNum 1 2 3 4 5 6 7 8 9 10
            uint64 suitNum = nextrandom() % 4 + 4;  //suitNum 4 5 6 7 
    
            bool winBet = false;
            bool winNum = false;
            bool winSuit = false;
            uint64 count = 0;
            
            if((rollNum<=5 && rollTargets==1) || 
               (rollNum>=6 && rollTargets==2) ||
               (rollTargets==3))
               {
                   winNum = true;
               }
    
            uint256 tempSuitTargets = suitTargets;
            while(tempSuitTargets % 10 > 0) {
                count++;
                uint64 suitTarget = uint64(tempSuitTargets % 10);
                require(suitTarget >= 4 && suitTarget <= 7);
                if(suitTarget == suitNum) {
                    winSuit = true;
                }
                tempSuitTargets = tempSuitTargets / 10;
            }
    
            if (winNum == true && winSuit == true)
            {
                winBet = true;
            }
    
            uint256 winAmount = calcWinAmount(betAmount, rollTargets, count);
            if(winBet == false) {
                betAddr.transfer(token, 0);
                emit lose(betAddr, rollTargets, suitTargets, betAmount, rollNum, suitNum);
            } else if(winBet == true && winAmount > balance(token)) {
                betAddr.transfer(token, betAmount);
                emit suspendBet(betAddr, rollTargets, suitTargets, betAmount, rollNum, suitNum);
            } else {
                betAddr.transfer(token, winAmount);
                emit win(betAddr, rollTargets, suitTargets, betAmount, rollNum, suitNum, winAmount);
            }
        }
    
        function calcWinAmount(uint256 betAmount, uint256 rollTargets, uint256 length) public pure returns(uint256) {
            uint256 bonus;
            if ( rollTargets == 1 || rollTargets == 2)
            {
                // betAmount * 4/length * 2
                bonus = betAmount * 8 / length;  
            }
            else  
            { 
                // rolltargets == 3
                bonus = betAmount * 4 / length;
            }
            
            return betAmount + (bonus - betAmount) * 95 / 100;
        }
    }
    


  • nice bro ✊



  • Thanks dear friend!


Log in to reply