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

如何在JavaScript中切换布尔值true/false?骰子游戏玩家切换异常求助

问题分析与修复方案

你的代码核心问题在于掷出1时的玩家切换逻辑错误:不管当前是哪个玩家,掷出1后都固定把swithcing设为true,这只会切换到玩家2,无法切回玩家1。同时,掷出1时只重置了DOM显示,没有清零对应的current变量,会导致后续分数计算错误。

修复后的代码

JavaScript 部分

// 修正拼写错误:swithcing → switching
var switching = false;

var current1 = 0;
var total1 = 0;

var current2 = 0;
var total2 = 0;

function roll() {
  var randomnumber = Math.floor(Math.random() * 6) + 1;

  var player1score = document.querySelector('.player1total');
  var player1current = document.querySelector('.player1'); // 修正拼写:curent → current

  var player2score = document.querySelector('.player2total')
  var player2current = document.querySelector('.player2') // 修正拼写:curent → current

  if (randomnumber === 1) {
    // 切换玩家状态:当前是玩家1就切到玩家2,反之亦然
    switching = !switching;
    
    // 重置当前玩家的current分数(变量+DOM)
    if (switching) {
      // 切换后是玩家2,说明之前是玩家1,重置玩家1的current
      current1 = 0;
      player1current.innerHTML = 0;
    } else {
      // 切换后是玩家1,说明之前是玩家2,重置玩家2的current
      current2 = 0;
      player2current.innerHTML = 0;
    }
    // 直接返回,避免后续累加1的分数
    return;
  }

  if (switching) {
    current2 += randomnumber;
    player2score.innerHTML = current2;
    player2current.innerHTML = randomnumber;
  } else {
    current1 += randomnumber;
    player1score.innerHTML = current1;
    player1current.innerHTML = randomnumber;
  }
}

// 补充实现Hold功能(原代码有按钮但无逻辑)
function hold() {
  if (switching) {
    total2 += current2;
    // 若需要显示total,可添加对应DOM元素后更新
    current2 = 0;
    player2current.innerHTML = 0;
    switching = !switching;
  } else {
    total1 += current1;
    current1 = 0;
    player1current.innerHTML = 0;
    switching = !switching;
  }
}

HTML 部分(仅修正拼写关联问题,可选)

<h1>Player 1</h1>
<h2 class="player1"></h2>
<h3 class="player1total">0</h3>
<!-- 可选:添加total显示区域 -->
<!-- <h3>Total: <span class="player1-total">0</span></h3> -->

<h1>Player 2</h1>
<h2 class="player2"></h2>
<h3 class="player2total">0</h3>
<!-- <h3>Total: <span class="player2-total">0</span></h3> -->

<input type="button" onclick="roll()" value="Roll Dice!" />
<input type="button" onclick="hold()" value="Hold!" />

关键改动说明

  1. 修正拼写错误:swithcing改为switching,curent改为current,避免变量名识别错误。
  2. 双向切换逻辑:掷出1时用switching = !switching实现玩家互切,替代固定设为true的单向逻辑。
  3. 完整分数重置:掷出1时同时清零对应玩家的current变量和DOM显示,保证分数计算准确。
  4. 阻断错误累加:掷出1后直接return,避免把1的分数误加到下一个玩家的当前分数中。
  5. 补充Hold功能:完善原代码中未实现的Hold按钮逻辑,符合游戏常规规则。

内容的提问来源于stack exchange,提问作者Lucas Jensen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 16:50:23