0

我正在制作宾果游戏。我已经能够通过单击按钮生成并显示随机数。我唯一的问题是某些值最终会多次生成。这就是我发布这个问题的部分。在游戏重置之前,每个值都应该只生成和显示一次。有没有人有任何示例代码,最好是如何使用我一直听到的 splice() 方法之类的东西?

我已经可以从集合中生成随机数并显示它。我只是想确保生成的数字不会重复。

    <head>
        <title>BINGO</title>
    </head>

    <body>
        <div id="bingo">
            <script>

                let numbers = new Set()
                        .add("B1")
                        .add("B2")
                        .add("B3")
                        .add("B4")
                        .add("B5")
                        .add("B6")
                        .add("B7")
                        .add("B8")
                        .add("B9")
                        .add("B10");

                let called = Array.from(numbers);

                let display = new Array();


                function getRandomNum()
                {
                    function rando()
                    {
                        for (let i = called.length - 1; i > 0; i++) 
                        {
                            const j = Math.floor(Math.random() * called.length);
                            const number = called[i];
                            called[i] = called[j];
                            called[j] = number;
                            return number;

                            //let show = called[Math.floor(Math.random() * called.length)];
                            //return show;
                        }
                        //document.getElementById('bingo').innerHTML = display[0];
                    }
                    let index = rando();
                    document.getElementById('bingo').innerHTML = index;
                        display.push(index);


                }


                function show()
                {
                    for(let n = 0; n < display.length; n++)
                    {
                        document.getElementById('reveal').innerHTML += "<br/>" + display[n] + "<br/>";
                    }
                } 



            </script>
        </div>

        <div id="button">

            <button onclick="getRandomNum()">Random Number</button>

        </div>

        <br/>
        <br/>
        <br/>

        <div id="reveal">

            <button onclick="show()">Numbers Called</button>
        </div>

    </body>
</html>

寻找一些帮助以防止重复生成的数字(示例代码首选)

4

3 回答 3

0

忘记你所做的一切。

开始使用 range 函数创建数组,根据需要设置数字数量。比,你需要使用种子来使伪随机性更好。所以,而不是 rand,你必须使用 SHUFFLE,所以你将数组的范围设置为 1 到 90,设置种子,而不是使用 shuffle 对数组进行洗牌......比你以随机顺序获得所有数字(对应于种子) . 你必须改变种子才能有另一个结果。数字的顺序就是结果。如 .. 球 1 : 42 ... 球 2: 10.... 球 3: 50.... 球 1 在数组中为 0。;) 您还可以使用切片函数并创建一个 for / each 循环,增加切片因子,因此您循环

  1. 切片数组 0,1 结果.. 球 1...
  2. 切片数组 0.2 球 2...
  3. 切片数组 0.3

这就是逻辑,我希望你理解,如果是这样..它会帮助你很多。

于 2022-01-12T22:45:04.923 回答
0
 <head>
        <title>BINGO</title>
    </head>

    <body>
        <div id="bingo">
            <script>

let numbers = ["B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "B10"]
            let display = [];

            function getRandomNum() {

                function rando() {

                    for (var i = 0; i < numbers.length; i++) {
                        const j = Math.floor(Math.random() * numbers.length);
                        const number = numbers[j];

                        if (number) {
                            numbers.splice(j, 1);
                        }
                        if (numbers.length < 0) {
                            return
                        } else {

                            return number;
                        }
                    }
                }

                let index;
                if (numbers.length === 0) {
                    index = "No more numbers"
                } else {
                    index = rando();
                    display.push(index);
                }
                document.getElementById('bingo').innerHTML = index;
            }


                function show()
                {
                    for(let n = 0; n < display.length; n++)
                    {
                        document.getElementById('reveal').innerHTML += "<br/>" + display[n] + "<br/>";
                    }
                } 



            </script>
        </div>

        <div id="button">

            <button onclick="getRandomNum()">Random Number</button>

        </div>

        <br/>
        <br/>
        <br/>

        <div id="reveal">

            <button onclick="show()">Numbers Called</button>
        </div>

    </body>
</html>

这是拼接的示例。

于 2019-09-11T23:12:00.280 回答
0

您可以创建一个数组,在其中存储所有已选择的数字。然后,当随机选择一个数字时,继续随机化,直到选择了一个不在该已选择数字数组中的数字。

这是一个说明这个想法的代码示例,选择 0 到 9 之间的数字,不允许重复数字。该过程分解如下。

var alreadyPicked = [];
var max = 10;

function random() {
  let unique = false;

  while (!unique && alreadyPicked.length < max) {
    let randNumber = Math.floor(Math.random() * max);

    if (alreadyPicked.includes(randNumber) == false) {
      unique = true;
      alreadyPicked.push(randNumber);
    }

  }
}
  1. 声明了一个数组 , alreadyPicked。它用于跟踪已经选择了哪些数字,这样它们就不会被选择两次。

  2. 号码max被宣布。当没有更多随机数可供选择时,它用于防止无限循环。

  3. 在循环中选择随机数while,该循环循环直到unique布尔值设置为true或直到alreadyPicked数组的长度达到max长度,当没有更多唯一数字可供选择时会发生这种情况。

  4. 获得一个数字后,该语句alreadyPicked.includes(randNumber)会检查 是否在randNumber已选择并存储在 中的那些数字中alreadyPicked

  5. 如果这是错误的,这意味着已经选择了一个唯一的号码。unique然后将其设置为 true 以中断循环,并将数字推送到alreadyPicked它不会再次被选中。

于 2019-09-11T23:02:25.987 回答