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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:01:40