asignCards()函数应该将纸牌阵列中的随机纸牌提供给每个玩家

问题描述 投票:0回答:1

此asignCards()函数应该将随机的纸牌从纸牌阵列中分配给每个玩家。卡不应该重复,但是我得到了重复的卡。

//对于一个玩家数组中的每个玩家,每个玩家都会收到两张卡。

    const asignCards = () => {
      players.forEach((player) => {
        let useCards = [];
        let inUse = cards;

        for (let i = 0; i < 1; i++) {
          let random = Math.floor(Math.random() * 52);
          let random2 = Math.floor(Math.random() * 52);
          if (
            useCards.indexOf(JSON.stringify(inUse[random])) === -1 ||
            useCards.indexOf(JSON.stringify(inUse[random2])) === -1 ||
            useCards.indexOf(JSON.stringify(inUse[random])) !==
            useCards.indexOf(JSON.stringify(inUse[random2]))
          ) {
            player.card1 = inUse[random];
            player.card2 = inUse[random2];
           useCards.push(JSON.stringify(player.card1));
          useCards.push(JSON.stringify(player.card2));
          }else {
            i--;
          }
        }
        console.log(player);
      });
   };

   asignCards();
json
1个回答
0
投票

您应该在循环之外声明useCards数组,否则每次在每次迭代时它将为空。那样说,您不能有一个玩家重复,但是可以将同一张卡分配给更多玩家。

    const asignCards = () => {

      let useCards = [];

      players.forEach((player) => {
        let inUse = cards;
        for (let i = 0; i < 1; i++) {
          let random = Math.floor(Math.random() * 52);
          let random2 = Math.floor(Math.random() * 52);
          if (
            useCards.indexOf(JSON.stringify(inUse[random])) === -1 ||
            useCards.indexOf(JSON.stringify(inUse[random2])) === -1 ||
            useCards.indexOf(JSON.stringify(inUse[random])) !==
            useCards.indexOf(JSON.stringify(inUse[random2]))
          ) {
            player.card1 = inUse[random];
            player.card2 = inUse[random2];
           useCards.push(JSON.stringify(player.card1));
          useCards.push(JSON.stringify(player.card2));
          }else {
            i--;
          }
        }
        console.log(player);
      });
   };

   asignCards();

Bonus:您可能想用双assign将函数重命名为assignCard(来自s)。


更新:这是另一种方法。每次您要玩时,请先将牌组洗牌,然后用Array.pop()从牌组顶部选择您的纸牌数量,这样您就可以100%确保不会重复。

Array.pop()
© www.soinside.com 2019 - 2024. All rights reserved.