Pig Game掷骰子函数中获胜判断语句失效问题排查
问题分析
你当前的核心问题是获胜判断的条件逻辑错误:
scores[activePlayer]存储的是玩家的总得分,只有点击Hold按钮时才会将currentScore(当前回合临时得分)合并进去。- 你现在的判断逻辑是检查总得分是否达标,但在掷骰子阶段,当前回合的得分还没同步到总得分里,所以这个条件永远不会触发。
修复方案
把获胜判断的条件改为scores[activePlayer] + currentScore >= 10,同时在判定获胜后,需要把当前回合得分合并到总得分中(否则页面上的总得分不会更新)。
修正后的rollBtn函数代码:
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] + currentScore >= 10) { // 先将当前回合得分合并到总得分 scores[activePlayer] += currentScore; document.getElementById(`score--${activePlayer}`).textContent = scores[activePlayer]; 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(); } };
额外补充
确保你已经实现了switchPlayer函数(当前代码未贴出),它需要重置当前回合得分并切换活跃玩家:
const switchPlayer = function() { currentScore = 0; document.getElementById(`current--${activePlayer}`).textContent = 0; activePlayer = activePlayer === 0 ? 1 : 0; player0El.classList.toggle('player--active'); player1El.classList.toggle('player--active'); };
内容的提问来源于stack exchange,提问作者user40414
相关产品推荐
相关产品推荐

