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次都会得到同一张卡,有时会更频繁,因为这就是随机性的工作原理。因此,你真正想要的是一些不太随机的东西,以避免再次拾取相同的卡。