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

Node.js环境下石头剪刀布游戏分数递增问题求助

问题分析与解决

你的代码核心问题是分数变量的作用域错误:

  • playerRound 里的 computerScore 和 playerScore 是函数内部的局部变量,每次调用该函数都会重新声明,而且初始值是 undefined,执行 +=1 会得到 NaN,根本无法累计分数。
  • 分数需要在跨轮次的上下文里保存,也就是在控制5轮游戏的 game 函数里维护。

修改后的完整代码

console.log("Rock Paper Scissor Game");

function getComputerChoice() {
  let words = ["rock", "paper", "scissor"];
  let n = Math.floor(Math.random() * words.length);
  return words[n];
}

// 修改playerRound:返回结果文本 + 本轮胜负状态,方便game函数更新分数
function playerRound(playerSelection, computer) {
  let result;
  let status; // 'win' | 'lose' | 'draw' | 'invalid'
  let player = playerSelection.toLowerCase();
  
  if (player === computer) {
    result = "Draw Match";
    status = 'draw';
  } else if (player === 'rock' && computer === 'paper') {
    result = "You Lose ... 'Paper beats Rock'";
    status = 'lose';
  } else if (player === 'rock' && computer === 'scissor') {
    result = "You Win!!! Rock breaks the scissor";
    status = 'win';
  } else if (player === 'paper' && computer === 'rock') {
    result = "Hurray you win!! Paper covers the rock";
    status = 'win';
  } else if (player === 'paper' && computer === 'scissor') {
    result = "Oh no you lose.. Scissor cuts the paper";
    status = 'lose';
  } else if (player === 'scissor' && computer === 'rock') {
    result = "You lose .. Rock breaks the scissor";
    status = 'lose';
  } else if (player === 'scissor' && computer === 'paper') {
    result = "You win!! Scissor cut the paper";
    status = 'win';
  } else {
    result = "You entered wrong choice";
    status = 'invalid';
  }
  
  return { result, status };
}

function game() {
  let playerScore = 0;
  let computerScore = 0;
  
  for (let i = 0; i < 5; i++) {
    const playerChoice = prompt("Enter your choice:\n");
    const computerChoice = getComputerChoice();
    const roundResult = playerRound(playerChoice, computerChoice);
    
    console.log(roundResult.result);
    
    // 根据本轮状态更新分数
    switch(roundResult.status) {
      case 'win':
        playerScore++;
        break;
      case 'lose':
        computerScore++;
        break;
      // draw和invalid不加分
    }
    
    // 可选:每轮结束后显示当前分数
    console.log(`Current Score: You ${playerScore} - Computer ${computerScore}`);
  }
  
  // 5轮结束后判定最终胜负
  console.log("\n=== Final Result ===");
  if (playerScore > computerScore) {
    console.log(`You Win the Game! Final Score: ${playerScore} - ${computerScore}`);
  } else if (computerScore > playerScore) {
    console.log(`You Lose the Game! Final Score: ${playerScore} - ${computerScore}`);
  } else {
    console.log(`Game Draw! Final Score: ${playerScore} - ${computerScore}`);
  }
}

game();

关键修改点说明

  1. 分数作用域调整:把 playerScore 和 computerScore 移到 game 函数里初始化,这样5轮游戏可以持续累计分数。
  2. playerRound返回值优化:不再在内部处理分数,而是返回本轮的结果文本和胜负状态,让game函数统一管理分数逻辑,职责更清晰。
  3. 最终胜负判定:5轮结束后对比分数,输出最终结果。
  4. 修复初始值问题:分数初始化为0,避免NaN的问题。

内容的提问来源于stack exchange,提问作者Metha shankar G.A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 12:35:06