首页 > 解决方案 > 如何使这项工作适用于 BINGO 游戏?

问题描述

尝试使用 Javascript 制作宾果游戏。需要从数组中生成随机的、非重复的值(不是整数)并显示生成的数字。每个值只能生成一次,直到游戏重置。

我尝试尝试从值所在的原始 Set() 生成随机元素,但这仍然会导致重复的数字被调用。我目前正在尝试实现 Fisher-Yates/Durstenfeld 洗牌,但这些洗牌不会在我的 HTML 中显示任何结果。

    <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 > called.length; 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;
        }
    let index = rando();

            document.getElementById('bingo').innerHTML = index;
        display.push(index);
    document.getElementById('bingo').innerHTML = display[0];
    }
}



            </script>
        </div>

        <div id="button">

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

        </div>
    </body>
</html>

在这里,我试图打乱原始数组,从该数组中选择一个随机元素进行显示,显示该元素,然后将其添加到另一个数组中,该数组将显示调用的数字

标签: javascripthtmlrandom

解决方案


呼叫号码后,将其从阵列中删除。这样,当您打乱数组和/或随机化数组索引时,可以保证永远不会重复。

这意味着在每场比赛之前重新创建数组或创建一个新的重复数组。

正如您所见,拥有一个“被调用”数组来跟踪被调用的内容仍然是必要的,但不能保证不会尝试调用重复项。


推荐阅读