You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 13:05:11