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

石头剪刀布(浏览器控制台):计分功能异常问题

石头剪刀布计分异常问题修复

你的代码主要有两个问题导致计分异常或无法看到最终结果:

1. 未处理无效输入,无效回合占用对战次数

当玩家输入的内容不是rock/paper/scissors时,代码会直接判定为平局,但这种输入根本不该算作有效对战,还会消耗5轮的次数,导致实际有效对战不足,计分不准。

2. 最终胜负结果未输出到控制台

game函数最后返回的胜负结论没有打印出来,所以你看不到5轮后的总分汇总。

修改后的完整代码

const choices = ['rock', 'paper', 'scissors']
let playerScore = 0
let computerScore = 0

function getComputerChoice() {
    return choices[Math.floor(Math.random() * choices.length)]
}

function getPlayerChoice() {
    let input;
    // 循环直到玩家输入有效选项
    while (true) {
        input = prompt('Pick Rock, Paper, or Scissors?');
        if (!input) continue;
        input = input.toLowerCase();
        if (choices.includes(input)) {
            break;
        }
        alert('请输入有效的选项:rock、paper或scissors!');
    }
    return input;
}

function playRound(playerSelection, computerSelection) {
    // 用对象简化克制关系判断,更易维护
    const beats = {
        rock: 'scissors',
        paper: 'rock',
        scissors: 'paper'
    };

    if (playerSelection === computerSelection) {
        return `It's a tie!`;
    } else if (beats[playerSelection] === computerSelection) {
        playerScore++;
        return `You win! ${playerSelection} beats ${computerSelection}`;
    } else {
        computerScore++;
        return `You lose! ${computerSelection} beats ${playerSelection}`;
    }
}

function game() {
    // 重置分数,避免多次调用game时分数累加
    playerScore = 0;
    computerScore = 0;

    for (let i = 1; i <= 5; i++) {
        const playerSelection = getPlayerChoice();
        const computerSelection = getComputerChoice();
        console.log(playRound(playerSelection, computerSelection));
    }

    const finalResult = playerScore > computerScore 
        ? 'You beat the computer! You are a genius'
        : playerScore < computerScore
            ? `You got beat by the computer. Practice your throws!`
            : `You tied with the computer!`;
    
    console.log(finalResult); // 打印最终胜负结果
}

game();

关键修改说明

  • 输入验证:修改getPlayerChoice,循环要求玩家输入有效选项,直到输入正确为止,避免无效回合干扰计分。
  • 简化胜负判断:用对象存储克制关系,替代冗长的逻辑或条件,减少出错概率。
  • 打印最终结果:在game函数末尾将最终胜负结论输出到控制台,让你能看到5轮后的总分结果。
  • 重置分数:每次调用game时重置分数,避免多次运行游戏时分数累加。

内容的提问来源于stack exchange,提问作者dani-cas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:17:52