Перемешать / показать карты для игры в блэкджек (Javascript) - PullRequest
0 голосов
/ 05 марта 2020

Знаете ли вы, почему «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]);
} 

Ответы [ 2 ]

0 голосов
/ 05 марта 2020

У вас есть две вещи, которые нужно исправить в вашем коде:

  1. В while вы устанавливаете randomIndex только один раз и используете его для дна, card1 и card2 , но когда вы устанавливаете card1, он использует splice и удаляет этот индекс, поэтому card2 не определена.
    FIX : установите randomIndex еще раз после установки card1

  2. В for l oop вам нужно i < deck.length, а не i <= deck.length, это позволит избежать неопределенного значения, потому что когда i равно deck.length, это будет 2, а колода не имеет индекса 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]);
}
0 голосов
/ 05 марта 2020

Полагаю, вопрос должен быть более ясным ... но, выполняя свои требования и думая, что код должен перетасовать колоду, я предполагаю, что ваша ошибка в этой строке deck = [...card1, ...card2];, поскольку вы находитесь внутри oop, вы просто ставите 2 карты за раз в вашей новой колоде, поэтому при следующем взаимодействии они будут игнорировать последние значения и скрывать их, вы должны использовать 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]);
    } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...