简单生成一个双色球的玩法

2019-10-16  本文已影响0人  光年之外iii

模拟双色球的玩法,每次出现时会有6个红色的1-33数字的不重复小球,和一个1-16数字的蓝色小球,生成一组数字,便是中(做)彩(梦)票(中)了。
首先,先获取节点:
获取的节点较多,为了方(偷)便(懒),封装一个快速获取节点id的函数


图片.png

因为双色球涉及到概率,随机数是必不可少的,为了方便,封装一个获取随机数的函数


图片.png
先声明一个空数组,来装入随机数,当所需要的数全部生成时,就可以生成了,所以用while方法来进行判断后,再执行,声明一个num作为每次生成的随机数,并且为了美观,当获得的随机数小于10时,会在随机数前拼接一个‘0’,根据双色球的规则,可以知道六个红球中的随机数字是不能重复的,所以要进行判断,当num的值时arr数组中所没有的值时,利用push()方法来进行获取,最后,利用sort()方法进行一个从小到大的排序
图片.png
生成的随机数组要不断进行调用,所以封装一个调用随机数,并写入网页的函数,将获取到的六个红球和一个兰球的随机数利用concat()方法进行拼接,并声明一个空字符串,保证每一次生成结束后,上一次生成的值不会出现,并在函数完成后,提前调用一次,以提前出现,方便观赏。
图片.png

最后,设置一个开始结束的定时器,就到了激(人)动(财)人(两)心(空)的抽奖时刻,点击开始时,开始键设置为不可再点击,以避免定时器运行的速度越来越快,点击结束时,恢复开始键的可选取状态,并停止计时器并清空,定时器以10毫秒的速度不断进行随机数组的选择。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        #content span {
            width: 50px;
            height: 50px;
            border: 3px solid red;
            margin: 10px 5px;
            display: inline-block;
            border-radius: 50%;
            font-size: 30px;
            line-height: 50px;
            text-align: center;
        }

        #content span:last-child {
            border-color: blue;
        }

        button {
            width: 100px;
            height: 50px;
            border: 1px solid blue;
        }
    </style>
</head>

<body>
    <div id="content">
    </div>
    <button id="start">开始</button>
    <button id="end">结束</button>
    <script>
        //  获取节点
        //封装获取数组的函数
        //封装写入数字的函数
        //定时器
        function getId(name) {
            return document.getElementById(name);
        }
       //获取的节点较多,封装一个获取id的函数,精简代码
        var content = getId('content');
        var start = getId('start');
        var end = getId('end');
        //创建一个函数,快速获取节点
        function getNum(start_num, end_num, many) {
            var arr = []
          //建立一个空数组,存放获得的随机数
            while (arr.length < many) {
                var num = Math.floor(Math.random() * (end_num - start_num + 1) + start_num);
          //获得总长度为many情况下生成的随机数
                num = num < 10 ? '0' + num : num;
            //当单个数字小于10时,会在单数前+0,便于美观
                if (arr.indexOf(num == -1)) {
                    arr.push(num);
                //将满足条件的数字放入空数组中
                }
                arr.sort((a, b) => {
                    return a - b
                })
              //将数组从小到大进行排序
            }
            return arr
        }

        function getHtml() {
            var redball = getNum(1, 33, 6);
            var blueball = getNum(1, 16, 1);
            var balls = redball.concat(blueball);
            //获得红球和篮球的随机数并拼接成最终的数组
            var str = '';

            for (var i in balls) {
                str += `<span>${balls[i]}</span>`;
                content.innerHTML = str;
              //遍历数组,并将其中随机一组随机数写入到网页中
            }
        }
        getHtml();
        //先写一组,便于观看
        var timer = {};
        //初始化一个定时器
        start.onclick = () => {
            timer = setInterval(getHtml, 10);
            start.disabled = true;
          //设立一个10毫秒变化一次的随机数组,并在点击开始时,让开始键变得不可点击
        }
        end.onclick = () => {
            clearInterval(timer);
            timer=null
            start.disabled = false;
      //当停止时,点击结束键,会让开始键恢复点击
        }
    </script>
</body>

</html>
上一篇 下一篇

猜你喜欢

热点阅读