如何在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!" />
关键改动说明
- 修正拼写错误:
swithcing改为switching,curent改为current,避免变量名识别错误。 - 双向切换逻辑:掷出1时用
switching = !switching实现玩家互切,替代固定设为true的单向逻辑。 - 完整分数重置:掷出1时同时清零对应玩家的
current变量和DOM显示,保证分数计算准确。 - 阻断错误累加:掷出1后直接
return,避免把1的分数误加到下一个玩家的当前分数中。 - 补充Hold功能:完善原代码中未实现的Hold按钮逻辑,符合游戏常规规则。
内容的提问来源于stack exchange,提问作者Lucas Jensen
相关产品推荐
相关产品推荐

