抽奖方法集合

直接随机法

直接通过随机函数,获取奖品池的下标,得出奖品。这种方法的特点是:所有奖品概率相同,包括抽不中的概率。

# 奖品池
var nice = [0.0, 5.0, 1.11, 6.1, 3.3, 2.2, 0.01, 6.1];


# 抽奖方法
var index=parseInt(Math.random() * 12) + 1
alert("小朋友今天获得的小红包是: " + nice[index - 1] + " ¥");

奖品设置概率法

根据奖品概率,将0-99或者0-999等范围的数字有规则的划分,然后根据生成的范围内的随机数,判断所抽到奖品的概率。这种方法的特点是:奖品概率设置越大,奖品被抽到的几率也越大

# 奖品池
turnplate.restaraunts = ["谢谢惠顾", "比心", "豪华大奔", "豪华游艇", "黄瓜", "棒棒糖", "红色砖石", "超级跑车", "粉色佳人"];

# 奖品概率
turnplate.randomRate = ["30%", '20%', '5%', '5%', '10%', '10%', '5%', '5%', '5%', '5%'];

# 抽奖方法 rate:奖品概率
function rnd(rate){
    console.log(rate)
    var random = Math.floor(Math.random() * 100);
    console.log(random)
    var myRandom = [];
    var randomList = [];
    var randomParent = [];
    for(var i = 0; i < 100; i++){
        myRandom.push(parseInt([i]) + 1);
    }
    console.log(myRandom)
    for(var i = 0; i < rate.length; i++){
        var temp = [];
        var start = 0;
        var end = 0;
        randomList.push(parseInt(rate[i].split('%')[0]));
        for(var j = 0; j < randomList.length; j++){
            start += randomList[j-1] || 0
            end += randomList[j]
        }
        temp = myRandom.slice(start, end);
        randomParent.push(temp)
    }
    console.log(randomList)
    console.log(randomParent)
    for(var i = 0; i < randomParent.length; i++){
        if($.inArray(random, randomParent[i]) > 0){
            console.log(i+1)
            return(i+1)
        }
    }
}

幸运值法

根据幸运值的大小,生成一定范围(奖品数量—无穷大)奖品池,然后将奖品对象加入奖品池,其余的放入空对象,通过随机一个范围内的值作为下标,取出对象,对象中的值,就是奖品,为空则是没奖品。当幸运值达到一定值(如大于等于80)得时候,奖品池的范围就是奖品的数量,此时抽取,则必定中奖,只是奖品随机。这种方法的特点是:中奖与没中奖随着幸运值的变化而变化,但是中奖物品的概率都是相同的。

# 奖品池
{
    "list": [{
        "id": 0,
        "name": "AirPods",
        "src": "https://img11.360buyimg.com/n1/s450x450_jfs/t1/29861/36/11965/55492/5c9352f7E5302d7a8/dd359563dc751ca5.jpg"
    }, {
        "id": 1,
        "name": "西湖坐船",
        "src": "https://dss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=2442400547,280609706&fm=26&gp=0.jpg"
    }, {
        "id": 2,
        "name": "情侣手机壳",
        "src": "https://dss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=702192816,2336825531&fm=26&gp=0.jpg"
    }, {
        "id": 3,
        "name": "杭州乐园",
        "src": "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1584796310964&di=a0bc805b921653aa990e0953854c8313&imgtype=0&src=http%3A%2F%2Fimg1.qunarzz.com%2Fwugc%2Fp225%2F201206%2F07%2F13adf3c6c9d08c2d93835fbb.jpg_r_1024x683x95_65c170c1.jpg"
    }, {
        "id": 4,
        "name": "看电影",
        "src": "https://dss1.baidu.com/70cFfyinKgQFm2e88IuM_a/forum/pic/item/34fae6cd7b899e51d22ff15348a7d933c9950dd0.jpg"
    }, {
        "id": 6,
        "name": "一只口红",
        "src": "https://dss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2421182237,279894059&fm=26&gp=0.jpg"
    }],
        "total": 6
}

# 抽奖方法
function getRandomGift(gift) {
    const len = gift.length;
    const pool = [];

    // 根据幸运值判断
    const poolLen = luckNumber >= 80 ? len : Math.ceil(len * 100 / (luckNumber + 20));
    console.log(poolLen)
    for (let i = 0; i < poolLen; i ++) {
        pool.push({});
    }
    console.log(pool)
    for (let j = 0; j < len; j ++) {
        const index = parseInt(Math.random() * poolLen);
        if (pool[index].name) {
            j --;
            continue;
        }
        pool[index] = gift[j];
    }
    console.log(pool)
    const randomIndex = parseInt(Math.random() * poolLen);
    console.log(randomIndex)
    return pool[randomIndex] || {}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值