Javascript 如何使JS更随机?

Javascript 如何使JS更随机?,javascript,html,random,playing-cards,Javascript,Html,Random,Playing Cards,我的密码是一个喝酒或冒险的游戏。每次用户单击按钮时,它都会绘制一张饮料卡和一个通配符。我遇到的问题是,同一张牌挑选的次数太多了,而且随机选择的种类也不够多,无法让它变得有趣。我有没有办法减少同一张牌被选中的次数。有时同一张牌会连续被抽两三次 var cards = [ '1-wildcard', '2-wildcard', '3-wildcard', '4-wildcard', '5-wildcard', '6-wildcard',

我的密码是一个喝酒或冒险的游戏。每次用户单击按钮时,它都会绘制一张饮料卡和一个通配符。我遇到的问题是,同一张牌挑选的次数太多了,而且随机选择的种类也不够多,无法让它变得有趣。我有没有办法减少同一张牌被选中的次数。有时同一张牌会连续被抽两三次

    var cards = [
    '1-wildcard',
    '2-wildcard',
    '3-wildcard',
    '4-wildcard',
    '5-wildcard',
    '6-wildcard',
    '7-wildcard',
    '8-wildcard',
    '9-wildcard',
    '10-wildcard',
    '11-wildcard',
    '12-wildcard',
    '13-wildcard',
    '14-wildcard',
    '15-wildcard',
    '16-wildcard',
    '17-wildcard',
    '18-wildcard',
    '19-wildcard',
    '20-wildcard',
    '21-wildcard',
    '22-wildcard',
    '23-wildcard',
    '24-wildcard',
    '25-wildcard',
    '26-wildcard',
    '27-wildcard',
    '28-wildcard',
    '29-wildcard',
    '30-wildcard'
];   

var drinks = [
    '1-drink',
    '2-drinks',
    '3-drinks',
    '4-drinks',
    '5-drinks',
    '6-drinks',
    '7-drinks',
    '8-drinks',
    '9-drinks',
    '1-shot',
    '2-shots',
    '3-shots',
    '4-shots'
]


function drawCard() {
        var randomNumber = Math.floor(Math.random() * (cards.length - 1));
        var randomNumber1 = Math.floor(Math.random() * (drinks.length - 1));
        console.log(cards.length);
        console.log(cards[randomNumber]);
        document.getElementById("drinks").src = 'assets/js/games/cards/drinkordare/' + drinks[randomNumber1] + '.png';
        document.getElementById("wildcard").src = 'assets/js/games/cards/drinkordare/' + cards[randomNumber] + '.png';

        switch(cards[randomNumber]) {
            
        }

        switch (drinks[randomNumber1]) {

        }
}

您可以通过创建数组的无序副本,从中弹出,并在用完时重新填充来防止重复-如下所示:

var卡=[“a”、“b”、“c”],洗牌卡=[];
对于(var i=0;i<10;i++)console.log((shuffledCards=shuffledCards.length?shuffledCards:randoSequence(cards)).pop().value)

您可以将最后选择的卡添加到临时阵列(称之为卡-a),然后在剩余卡中选择下一张卡。然后,当(例如5张)在拾取了卡-A之后又有更多的卡时,您再次将卡-A推回到初始阵列,如此类推

这消除了(在本例中为5)在保持算法随机的情况下连续选择卡片的可能性。例如,我对卡片做了这个算法(但请注意,对于饮料也是同样的算法,您只需要更改名称和数组)

let cards=['1-通配符','2-通配符','3-通配符','4-通配符','5-通配符','6-通配符','7-通配符','8-通配符','9-通配符','10-通配符','11-通配符','12-通配符','13-通配符','14-通配符','15-通配符','16-通配符','17-通配符','18-通配符','19-通配符','20-通配符','21-通配符','22-通配符','24-通配符','26-通配符'dcard'、'27-通配符'、'28-通配符'、'29-通配符'、'30-通配符'];
让lastSelectedCards=[];
函数getRandomCard(){
设bufferSize=5;//如果选择一张卡,则接下来的5张卡将不相同
让randomNumber=Math.floor(Math.random()*(cards.length-1));
//推送到所选阵列并从卡阵列中移除
lastSelectedCards.push(卡片[随机编号]);
卡.拼接(随机数,1);
//选择5张新的随机卡后,推回卡数组中的最后一个元素
如果(lastSelectedCards.length==bufferSize+2){
cards.push(lastSelectedCards.shift());
}
//返回最后选择的卡
返回lastSelectedCards[lastSelectedCards.length-1];
}
//选择10张卡片进行测试
for(设i=0;i<10;i++){
log(getRandomCard());

}
你一行中获得2张或3张相同的牌的频率是多少?连续多次获得同一张牌仍然是随机的,但如果你想避免这种情况,你可以跟踪最后选择的几张牌,并一直随机选择一张新牌,直到最近不再重复。人类不太擅长评估ra非常有趣,但非常擅长检测模式,即使没有。如果你只有13张“饮料”卡,你平均每13次都会得到同一张卡,有时会更频繁,因为这就是随机性的工作原理。因此,你真正想要的是一些不太随机的东西,以避免再次拾取相同的卡。