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

JavaScript石头剪刀布:computerSelection在循环中不更新问题

解决石头剪刀布游戏中电脑选择不更新的问题

问题核心在于你对computerSelection的处理逻辑:你用const声明了这个全局变量,并且仅在代码初始化时调用一次getComputerChoice()生成随机值。这导致它的数值从游戏开始到结束完全固定,每一轮都会重复使用同一个电脑选择。

修复步骤

  • 删除全局的const computerSelection = getComputerChoice();,无需保留这个全局变量
  • 在game函数的循环内部,每次调用playRound时直接调用getComputerChoice(),让电脑每一轮都重新生成随机选择
  • 给playRound里的roundResult添加局部声明,避免全局变量污染
  • 优化game函数的返回逻辑,避免console.log(game())输出undefined

修改后的完整代码

const rock = 'rock';
const paper = 'paper';
const scissors = 'scissors';

function getComputerChoice() {
    let items = [rock, paper, scissors];
    let random = Math.floor(Math.random() * 3);
    return items[random];
}

function playRound(playerSelection, computerSelection) {
    let roundResult;
    if (playerSelection === computerSelection) {
        roundResult = "It's a Draw";
    } else if (playerSelection === rock && computerSelection === paper) {
        roundResult = "Computer wins this round! Paper beats rock!";
    } else if (playerSelection === rock && computerSelection === scissors) {
        roundResult = "Human wins this round! Rock beats scissors!";
    } else if (playerSelection === paper && computerSelection === rock) {
        roundResult = "Human wins this round! Paper beats rock!";
    } else if (playerSelection === paper && computerSelection === scissors) {
        roundResult = "Computer wins this round! Scissors beats paper";
    } else if (playerSelection === scissors && computerSelection === rock) {
        roundResult = "Computer wins this round! Rock beats scissors!";
    } else if (playerSelection === scissors && computerSelection === paper) {
        roundResult = "Human wins this round! Scissors beats paper!";
    }
    return roundResult;
}

function game() {
    const roundResults = [];
    for (let i = 0; i < 5; i++) {
        const playerChoice = prompt("What do you choose?").toLowerCase();
        const computerChoice = getComputerChoice();
        const result = playRound(playerChoice, computerChoice);
        roundResults.push(result);
        console.log(result);
        console.log(`Computer chose: ${computerChoice}`);
    }
    // 新增最终比分统计
    let humanWins = roundResults.filter(res => res.includes("Human wins")).length;
    let computerWins = roundResults.filter(res => res.includes("Computer wins")).length;
    let draws = roundResults.filter(res => res.includes("Draw")).length;
    const finalResult = `Final Score: Human ${humanWins} - Computer ${computerWins} - Draws ${draws}\n${
        humanWins > computerWins ? "Human wins the game!" : computerWins > humanWins ? "Computer wins the game!" : "Game is a draw!"
    }`;
    console.log(finalResult);
    return finalResult;
}

game();

额外优化说明:

  • 将玩家输入转为小写,避免因输入Rock或PAPER这类大小写不一致的内容导致判断错误
  • 新增每轮电脑选择的打印,方便验证随机性是否生效
  • 添加最终比分统计和胜负判定,让游戏逻辑更完整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 17:45:29