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

JavaScript石头剪刀布游戏:得分存储与统计异常问题

问题分析与解决方案

核心问题1:得分累加异常(computerScore不更新)

你代码里存在错误的赋值逻辑:

computerScore = computerScore++;

computerScore++是后置自增运算符,它会先返回变量当前的原值,再对变量执行+1操作。你把返回的原值重新赋值给computerScore,相当于抵消了自增效果。直接改成computerScore++或者computerScore += 1即可修复。

核心问题2:所有轮次复用相同选择

你在全局作用域仅调用了一次getPlayerChoice()和getComputerChoice(),这意味着5轮游戏都会使用同一个玩家选择和电脑选择,导致得分只会固定累加某一方,完全不符合多轮游戏的逻辑。

需要将选择的获取逻辑移到playRound函数内部,每次调用playRound时重新生成玩家和电脑的选择;同时胜负消息也要在函数内动态生成,避免复用初始的固定值。

修复后的完整代码

// 石头剪刀布游戏
const choice = ['rock', 'paper', 'scissors'];

// 生成电脑选择
function getComputerChoice() {
  return choice[Math.floor(Math.random() * choice.length)];
}

// 获取玩家选择
function getPlayerChoice() {
  const input = prompt('Choose your weapon: rock, paper or scissors?');
  return input ? input.toLowerCase() : '';
}

// 全局得分变量
let playerScore = 0;
let computerScore = 0;

// 单轮游戏逻辑
function playRound() {
  const playerSelection = getPlayerChoice();
  const computerSelection = getComputerChoice();

  // 动态生成胜负消息
  const youWin = `You win, ${playerSelection} beats ${computerSelection}`;
  const youLose = `You lose, ${computerSelection} beats ${playerSelection}`;
  const youDraw = `It's a draw!`;

  // 输入合法性检查
  if (!['rock', 'paper', 'scissors'].includes(playerSelection)) {
    return 'Oops! Please type rock, paper or scissors!';
  }

  if (playerSelection === computerSelection) {
    return youDraw;
  } else if (
    (playerSelection === 'rock' && computerSelection === 'scissors') ||
    (playerSelection === 'paper' && computerSelection === 'rock') ||
    (playerSelection === 'scissors' && computerSelection === 'paper')
  ) {
    playerScore++;
    return youWin;
  } else {
    computerScore++;
    return youLose;
  }
}

// 五轮游戏逻辑
function game() {
  // 调用5次playRound并打印每轮结果
  console.log(playRound());
  console.log(playRound());
  console.log(playRound());
  console.log(playRound());
  console.log(playRound());

  // 最终胜负判定
  let finalResult = '';
  if (playerScore > computerScore) {
    finalResult = `You won the game! Final score: ${playerScore} - ${computerScore}`;
  } else if (computerScore > playerScore) {
    finalResult = `You lost the game! Final score: ${playerScore} - ${computerScore}`;
  } else {
    finalResult = `It's a tie game! Final score: ${playerScore} - ${computerScore}`;
  }

  // 重置得分,方便再次启动游戏
  playerScore = 0;
  computerScore = 0;
  return finalResult;
}

// 启动游戏
console.log(game());

额外优化说明

  1. 增加玩家输入合法性检查,避免无效输入干扰游戏流程
  2. 简化胜负判断逻辑,用逻辑或合并所有获胜场景,提升代码可读性
  3. 在game函数末尾添加最终胜负总结,并重置得分,支持多次调用game函数
  4. 给getPlayerChoice增加空值处理,避免用户取消输入导致报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:15:01