为什么掷骰子的函数不执行语句来检查我的猪游戏中的获胜者?

Why won't the function to roll dice also execute the statement to check for the winner in my Pig Game?

提问人:user40414 提问时间:10/6/2023 最后编辑:epascarellouser40414 更新时间:10/6/2023 访问量:35

问:

我正在尝试编写掷骰子游戏“猪游戏”。游戏的目的是重复放置骰子,并将每次掷骰子的累积价值添加到每个玩家的当前分数中。如果玩家持有当前分数的最终值,则该分数将添加到他们的总分中。第一个达到 10 分(10 分用于测试目的,100 分用于决赛)的玩家将获胜。如果骰子的值为 1,则玩家将失去该回合的当前分数(但不是他们的总分)。 我有 4 个主要功能。其中之一是掷骰子。此函数使用事件执行 listener.it 该事件还会在每次掷骰子时更新当前分数,如果掷出 1,它会切换玩家。我目前有一个 if 语句,它将在保持按钮的函数中检查获胜者,但我更喜欢它在掷骰子按钮中,这样您掷出的值超过 10,您就赢了,而不必按按。

问题出在第二个用箭头表示的 if 语句上。没有一行代码起作用。我试过把它作为上面的if(diceValue!==1)作为else。我试过让它在函数之外执行。我无法弄清楚为什么它不起作用。最初它在我的 holdBtn 函数中并且有效。但在我的rollBtn函数中不起作用,我实际上希望它起作用。

'use strict';

const score0El = document.getElementById('score--0');
const score1El = document.getElementById('score--1');
const diceEl = document.querySelector('.dice');
const btnNew = document.querySelector('.btn--new');
const btnHold = document.querySelector('.btn--hold');
const btnRoll = document.querySelector('.btn--roll');
const player0El = document.querySelector('.player--0');
const player1El = document.querySelector('.player--1');

let scores = [0, 0];
let currentScore = 0;
let activePlayer = 0;

score0El.textContent = '0';
score1El.textContent = '0';

diceEl.classList.add('hidden');

const diceOptions = [
  'dice-1.png',
  'dice-2.png',
  'dice-3.png',
  'dice-4.png',
  'dice-5.png',
  'dice-6.png',
];

const rollBtn = function() {
  const randomIndex = Math.floor(Math.random() * diceOptions.length);

  diceEl.src = diceOptions[randomIndex];
  diceEl.classList.remove('hidden');
  const diceValue = randomIndex + 1;
  let currentPlayer = document.getElementById(`current--${activePlayer}`);

  if (diceValue !== 1) {

    currentScore += diceValue;

    currentPlayer.textContent = currentScore;
    if (scores[activePlayer] >= 10) { ** < -- -- -- -- -- -- -- -- **
      console.log('You have won');

      document
        .querySelector(`.player--${activePlayer}`)
        .classList.add('player--winner');

      document
        .querySelector(`.player--${activePlayer}`)
        .classList.remove('player--active');
      diceEl.classList.add('hidden');
      btnHold.removeEventListener('click', holdBtn);
      btnRoll.removeEventListener('click', rollBtn);
    }
  } else {

    switchPlayer();
  }
};
javascript 函数 if-statement game-development

评论

2赞 Zak 10/6/2023
我从未看到更新..所以在我看来,它总是 [ ...我错过了什么吗?scores[activePlayer]0,0]
1赞 doublesharp 10/6/2023
我认为它需要scores[activePlayer] += currentScore
1赞 epascarello 10/6/2023
debug 你可以看到你没有增加你正在检查的值......console.log(diceValue, currentScore, activePlayer, scores[activePlayer], scores[activePlayer] >= 10);
0赞 epascarello 10/6/2023
@doublesharp“是”和“否”,都会将其添加到索引中,而不是当前的 SCOR 变量中。
0赞 user40414 10/6/2023
是的,你是对的,我确实用 scores[activePlayer] += currentScore 更新了 holdBtn 函数中的 scores 数组;player1 是索引 0,2 是索引 1。将当前分数添加到索引中。控制台.log(scores[activePlayer]);document.getElementById().textContent = scores[activePlayer];我在这里尝试过这样做,但它也在 scores[activePlayer]<10 时执行。从控制台来看,在计算当前分数时,它似乎正在添加比骰子值更多的值score--${activePlayer}

答: 暂无答案