【问题标题】:Shuffle / display cards to a blackjack game (Javascript)洗牌/显示牌到二十一点游戏(Javascript)
【发布时间】:2020-06-18 02:39:22
【问题描述】:

你知道为什么“card2”会随机将一个对象放入数组吗?它应该总是将一个对象放入数组中。

const cards=[
  {
    card: '&#127137',
    value: '1'
  },
  {
    card: '&#127138',
    value: '2'
  },
  {
    card: '&#127139',
    value: '3'
  },
  {
    card: '&#127140',
    value: '4'
  },
  {
    card: '&#127141',
    value: '5'
  },
  {
    card: '&#127142',
    value: '6'
  },
  {
    card: '&#127143',
    value: '7'
  },
  {
    card: '&#127144',
    value: '8'
  },
  {
    card: '&#127145',
    value: '9'
  },
  {
    card: '&#127146',
    value: '10'
  }
];

var deck = [];

shuffleDeck = () =>{
    var tempDeck = [...cards];
    var card1 = [0];
    var card2 = [0];

    while(0 !== tempDeck.length) {
        var randomIndex = Math.floor(Math.random() * tempDeck.length);
        card1 = tempDeck.splice(randomIndex, 1);
        card2 = tempDeck.splice(randomIndex, 1); 
        deck = [...card1, ...card2];
      }
}
shuffleDeck();

 for(var i = 0; i <= deck.length; i++){
     console.log(deck[i]);
} 

【问题讨论】:

  • 不好意思看不懂主要问题,能说清楚点吗?
  • @DiegoVinícius 如果您多次运行代码 sn-p 您会看到数组“deck”将显示它的内容(card1 和 card2),但它不会总是显示 card2。
  • 如果你只想显示 card1 你应该添加一些条件,他们会从你的 tempDeck 中随机获取 2 张卡片,并总是尝试在实际卡片组中添加 2 张卡片,但有时会得到错误的索引并添加一个

标签: javascript loops blackjack


【解决方案1】:

您的代码中有两件事需要修复:

  1. while 中,您只设置了一次randomIndex 并将其用于card1card2,但是当您设置card1 时,它使用splice 并删除该索引,所以card2 未定义。
    FIX:在设置card1 后再次设置randomIndex

  2. 1234563 t 索引 2,它只有索引 0 和 1。

const cards = [{card: '&#127137', value: '1'}, {card: '&#127138', value: '2'}, {card: '&#127139', value: '3'}, {card: '&#127140', value: '4'}, {card: '&#127141', value: '5'}, {card: '&#127142', value: '6'}, {card: '&#127143', value: '7'}, {card: '&#127144', value: '8'}, {card: '&#127145', value: '9'}, {card: '&#127146', value: '10'}];

var deck = [];
shuffleDeck = () =>{
  var tempDeck = [...cards];
  var card1 = [0];
  var card2 = [0];

  while(0 !== tempDeck.length) {
    var randomIndex = Math.floor(Math.random() * tempDeck.length);
    card1 = tempDeck.splice(randomIndex, 1);

    randomIndex = Math.floor(Math.random() * tempDeck.length);
    card2 = tempDeck.splice(randomIndex, 1); 
    deck = [...card1, ...card2];
  }
}

shuffleDeck();

for(var i = 0; i < deck.length; i++){
     console.log(deck[i]);
}

【讨论】:

    【解决方案2】:

    我想这个问题应该更清楚......但是运行你的应该并认为代码应该洗牌我猜你的错误是在那一行deck = [...card1, ...card2];因为你在一个循环中,你只是放了两张牌当时在你的新牌组中,所以在下一次交互时他们会忽略最后的值并隐藏它,你应该使用deck.push在牌组中添加新牌。

    const cards=[
          {
            card: '&#127137',
            value: '1'
          },
          {
            card: '&#127138',
            value: '2'
          },
          {
            card: '&#127139',
            value: '3'
          },
          {
            card: '&#127140',
            value: '4'
          },
          {
            card: '&#127141',
            value: '5'
          },
          {
            card: '&#127142',
            value: '6'
          },
          {
            card: '&#127143',
            value: '7'
          },
          {
            card: '&#127144',
            value: '8'
          },
          {
            card: '&#127145',
            value: '9'
          },
          {
            card: '&#127146',
            value: '10'
          }
        ];
    
        var deck = [];
    
        shuffleDeck = () => {
            var tempDeck = [...cards];
            var card1 = [0];
            var card2 = [0];
    
            while(0 !== tempDeck.length) {
                var randomIndex = Math.floor(Math.random() * tempDeck.length);
                card1 = tempDeck.splice(randomIndex, 1);
                card2 = tempDeck.splice(randomIndex, 1); 
                deck.push(...card1, ...card2);
              }
        }
        shuffleDeck();
        
        for(var i = 0; i < deck.length; i++){
             console.log(deck[i]);
        } 

    【讨论】:

      猜你喜欢
      • 2018-04-02
      • 2019-06-03
      • 2018-02-26
      • 2011-02-02
      • 2011-03-26
      • 1970-01-01
      • 2012-10-16
      • 2021-06-10
      • 2023-03-21
      相关资源
      最近更新 更多