我正在尝试创建一个JavaScript卡片游戏,并且想要选择5张卡而不重复:
var colors = ["hearts", "spades", "diamonds", "clubs" ];
var values = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"];
color = colors[parseInt(Math.random()*colors.length,10)]
value = values[parseInt(Math.random()*values.length,10)]
如果我挑选5张牌,怎样才能确保没有重复?
答案 0 :(得分:10)
准备一张包含所有48张牌的阵列(你缺少Aces吗?)
每次选择卡片时,请将其从阵列中移除。
下一次抽奖将来自简化数组,因此不会有重复数据。
替代:
从同一个数组开始,然后是shuffle it。拿前五张牌。
答案 1 :(得分:3)
您还可以创建一个标记列表,放入已使用过的卡片!
var myGivenCards = {}
为每张卡重复一次:
color = colors[parseInt(Math.random()*colors.length,10)]
value = values[parseInt(Math.random()*values.length,10)]
if (typeof(myGivenCards[color+values])==='undefined') {
//not used
myGivenCards[color+values] = true;
}
答案 2 :(得分:2)
正如其他人所说,使用Fisher-Yates-Shuffle,然后选择前五个:
var colors = ["hearts", "spades", "diamonds", "clubs"];
var values = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"];
// from http://jsfromhell.com/array/shuffle by Jonas Raoni Soares Silva
function shuffle(o) { //v1.0
for (var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
return o;
};
var cards = [];
for (var j = 0; j < colors.length; j++) {
for (var i = 0; i < values.length; i++) {
cards.push(colors[j] + values[i]);
}
}
shuffle(cards);
console.log(cards.slice(0, 5));