JavaScript石头剪刀布游戏每次出招后分数重置问题修复
问题根因
计分无法累计的核心原因是分数变量被重复重置:你把playerScore和computerScore的初始化赋值(设为0)写在了game()函数内部,每次点击按钮触发game()函数时,都会先把两个分数重置为0,再计算本局得分,自然无法保留之前的累计分数。
另外代码还存在两个隐性问题:
- 胜负判定条件写反:当前代码中「玩家赢」的判断分支实际是电脑获胜的场景,会导致胜方计分错位
- 计分板渲染逻辑缺失:更新分数时直接覆盖元素内容,会丢失
PLAYER:、COMPUTER:的前缀文本
修复方案
按以下步骤调整即可,不需要使用while循环处理计分:
- 将两个分数变量的初始化逻辑移到
game()函数外部,仅在页面首次加载时执行一次赋值,避免每次对局重置分数 - 修正胜负判断的条件分支,匹配石头剪刀布的实际胜负规则
- 调整计分板渲染逻辑,更新分数时保留原有文本前缀,同时同步更新对局结果提示
修复后完整JavaScript代码
// 页面加载时仅初始化一次分数 let playerScore = 0; let computerScore = 0; let playerMove = null; document.getElementById("Rock").onclick = function() { playerMove = "Rock"; game(); } document.getElementById("Paper").onclick = function() { playerMove = "Paper"; game(); } document.getElementById("Scissors").onclick = function() { playerMove = "Scissors"; game(); } function game() { const computerMoves = ["Rock", "Paper", "Scissors"]; const computerMove = computerMoves[Math.floor(Math.random() * computerMoves.length)]; console.log("玩家出招:", playerMove); console.log("电脑出招:", computerMove); // 玩家获胜分支 if ( playerMove == "Rock" && computerMove == "Scissors" || playerMove == "Paper" && computerMove == "Rock" || playerMove == "Scissors" && computerMove == "Paper" ) { console.log("YOU WIN!!!"); playerScore += 1; document.querySelector(".result h1").textContent = "YOU WIN!"; } // 电脑获胜分支 else if ( computerMove == "Rock" && playerMove == "Scissors" || computerMove == "Paper" && playerMove == "Rock" || computerMove == "Scissors" && playerMove == "Paper" ) { console.log("YOU LOSE!!!"); computerScore += 1; document.querySelector(".result h1").textContent = "YOU LOSE!"; } // 平局分支 else if (playerMove == computerMove) { console.log("DRAW!!!"); document.querySelector(".result h1").textContent = "DRAW!"; } // 更新计分板,保留文本前缀 document.getElementById("playerScore").textContent = `PLAYER: ${playerScore}`; document.getElementById("computerScore").textContent = `COMPUTER: ${computerScore}`; }
HTML结构不需要改动,替换原有JavaScript代码即可正常运行。
优化建议
- 非必要不要把变量挂载到
window全局对象上,容易引发变量命名冲突,使用普通的全局变量即可满足需求 - 后续可以增加重置分数按钮、对局回合数限制等功能,扩展游戏可玩性
内容的提问来源于stack exchange,提问作者Titsnium
相关产品推荐
相关产品推荐

