Как показать результат случайной колоды карты блэкджек? - PullRequest
0 голосов
/ 09 января 2019

Я делаю простую игру в блэкджек. Теперь я делаю функцию перетасовки карт. Почему результат дрожания карты не отображается во внутреннем тексте после нажатия кнопки «Новая игра»?

Я просмотрел и повторил код и исправил размещение переменных и точек с запятой, но это не имеет никакого эффекта.

/*
  Blackjack Game
*/

//Card Variables
let suits = ['Hearts', 'Clubs', 'Diamonds', 'Spades'],
  values = ['Ace', 'King', 'Queen', 'Jack',
    'Ten', 'Nine', 'Eight', 'Seven', 'Six',
    'Five', 'Four', 'Three', 'Two'
  ];

//DOM Variables
let textArea = document.getElementById('text-area'),
  newGameButton = document.getElementById('new-game-button'),
  hitButton = document.getElementById('hit-button'),
  stayButton = document.getElementById('stay-button');

//Game Variables
let gameStarted = false,
  gameOver = false,
  playerWon = false,
  dealerCard = [],
  playerCard = [],
  dealerScore = 0,
  playerScore = 0,
  deck = [];

hitButton.style.display = 'none';
stayButton.style.display = 'none';
showStatus();

newGameButton.addEventListener('click', function() {
  gameStarted = true;
  gameOver = false;
  playerWon = false;

  deck = createDeck();
  shuffleDeck(deck);
  dealerCards = [getNextCard(), getNextCard()];
  playerCards = [getNextCard(), getNextCard()];

  newGameButton.style.display = 'none';
  hitButton.style.display = 'inline';
  stayButton.style.display = 'inline';
  showStatus();
});

function createDeck() { //Membuat deck dari 52 kartu
  let deck = [];
  for (let suitIdx = 0; suitIdx < suits.length; suitIdx++) {
    for (let valueIdx = 0; valueIdx < values.length; valueIdx++) {
      let card = {
        suit: suits[suitIdx],
        value: values[valueIdx]
      }
      deck.push(card);
    }
  }
  return deck;
}

function shuffleDeck(deck) {
  for (let i = 0; i < deck.length; i++) {
    let swapIdx = Math.trunc(Math.random() * deck.length);
    let tmp = deck[swapIdx];
    deck[swapIdx] = deck[i];
    deck[i] = tmp;
  }
}

function getCardString(card) {
  return card.value + ' of ' + card.suit;
}

function getNextCard() {
  return deck.shift();
}

function showStatus() {
  if (!gameStarted) {
    textArea.innerText = 'Welcome to Blackjack!';
    return;
  }
}

for (var i = 0; i < deck.length; i++) {
  textArea.innerText = "\n" + getCardString(deck[i]);
}
<h1 id="title">Welcome to Blackjack!</h1>
<h4>by Andrean Hendy</h4>

<p id="text-area">Welcome to Blackjack!</p>
<button id="new-game-button">New Game!</button>
<button id="hit-button">Hit!</button>
<button id="stay-button">Stay</button>

Проверьте код здесь @ plunk: http://embed.plnkr.co/rAzcbmTyH8vIRBI3appX/

Что я ожидал, так это показать результат карты из 52 колод после перетасовки.

Ответы [ 2 ]

0 голосов
/ 09 января 2019

проблема закончена. зацикливание на последних строках должно быть помещено в функцию showStatus () block.but я не делал раньше.

0 голосов
/ 09 января 2019

В вашем слушателе событий нажатия кнопки «новая кнопка игры» вы никогда не меняете свой «текстовую область» innerText. Единственный под-метод, который может это сделать, это showStatus, но условие if(!gameStarted) защищает нас от изменения innerText в этом случае.

Не уверен, правильно ли я понял вашу логику, но следующее обновление покажет вам результат после нажатия на кнопку «Новая игра».

newGameButton.addEventListener('click', function(){
  // ...
  setDeckText();
});

// ...

function setDeckText() {
  for(var i = 0; i < deck.length; i++){
    textArea.innerText = "\n" + getCardString(deck[i]);
  }
}
...