尝试在没有重复javascript的情况下将一对数组值随机推送到另一个数组中



我正在尝试制作一款内存卡游戏,但这部分很难理解。我有一个有一副牌的阵列,我试图从一副牌中随机选择一对特定数量的牌,并将它们推入游戏板阵列,但我最初一直得到这对牌的副本。基本上我试着洗牌。我试着使用一个条件语句,但我不知道这是否是正确的方法,但它仍然不起作用。

javascript

const deckOfCards = [
'card1',
'card2',
'card3',
'card4',
'card8',
'card9',
'card10',
'card11',
'card12',
'card13',
'card14',
]

let shuffle = deckOfCards[Math.floor(Math.random() * deckOfCards.length)];
let pair = [shuffle, shuffle]
let len = mode
for (let i = pair; i < deckOfCards.length; i++) {
if (gameBoard.indexOf(deckOfCards[i]) === -1) {
gameBoard.push(deckOfCards[pair])
}
}
console.log(gameBoard)
});
let gameBoard = []

只是一个想法:您可以将所选元素移动到数组的后面,然后从先前未更改的数组的切片中随机选择内容。。。就像CCD_ 1一样。

我想是这样的(我不能让你的代码工作,所以这还没有测试):

let shuffle = deckOfCards[Math.floor(Math.random() * deckOfCards.length - 5)]
name = deckOfCards.splice(shuffle, 1)
deckOfCards.push(name)

顺便说一句,如果你可以使用库,只需使用underscore.js,它就会变得非常简单。就像这样:

b = _.shuffle(deckOfCards).slice(0,5);
console.log(b)

你也可以看看这些存储库(虽然我还没有机会看一看,但它们有很多恒星):

  • https://github.com/mmenavas/memory-game/blob/master/js/MemoryGame.js

  • https://github.com/code-sketch/memory-game

您可以将现有的复制到新的,例如:const-cloneSheepsES6=[…绵羊]那么你就可以在没有任何重复的情况下应用你的条件

这将为您提供一组唯一的牌。

const deckOfCards = [
"card1",
"card2",
"card3",
"card4",
"card8",
"card9",
"card10",
"card11",
"card12",
"card13",
"card14",
];
const randomArray = [];
let noOfPairs = 6; // No. of pairs required
while (noOfPairs) {
let randomNumber = Math.floor(Math.random() * deckOfCards.length);
if (randomArray.includes(randomNumber)) {
continue;
}
randomArray.push(randomNumber);
noOfPairs--;
}
randomArray.sort(() => 0.5 - Math.random());
const gameBoard = randomArray.map((item) => [
deckOfCards[item],
deckOfCards[item],
]);
console.log(gameBoard);

最新更新