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

Odin Project石头剪刀布游戏:Console.log未输出预期分数问题

石头剪刀布游戏分数统计问题排查与解决

我正在完成Odin Project的石头剪刀布课程作业,目前已完成大部分功能,但在分数统计与胜者展示的最终环节遇到问题。问题出在playRound和game函数中,尤其是值的返回逻辑,playerScore与computerScore未按预期递增,怀疑是作用域相关问题。以下是原始代码:

let choices = ["Rock", "Paper", "Scissors"]
let computerSelection = getComputerChoice();

let rockRegex = /rock/i;
let paperRegex = /paper/i;
let scissorsRegex = /scissors/i;
let result = "";

function getPlayerChoice() {
    prompt("Rock, Paper, Scissors? ")
}

function getComputerChoice() {
    let computerChoice = choices[Math.floor(Math.random()*choices.length)];
    // console.log(computerChoice);
    return computerChoice;
}

let playerScore = 0;
let computerScore = 0;
function playRound(playerSelection, computerSelection) {
    if (rockRegex.test(playerSelection)) {
        if (computerSelection == "Rock") {
            console.log(computerScore);
            return result = "It's a draw! You both had Rock";
        } else if (computerSelection == "Paper") {
            // add score to computer since it won
            computerScore++;
            console.log(computerScore);
            return result = "You lose! Paper beats Rock";
        } else if (computerSelection == "Scissors") {
            // add score to player since you won
            playerScore++;
            console.log(computerScore);
            return result = "You win! Rock beats Scissors";
        }

    } else if (paperRegex.test(playerSelection)) {
        if (computerSelection == "Rock") {
            // add score to player since you won
            playerScore++;
            console.log(computerScore);
            return result = "You win! Paper beats Rock";
        } else if (computerSelection == "Paper") {
            console.log(computerScore);
            return result = "It's a draw! You both had Paper";
        } else if (computerSelection == "Scissors") {
            // add score to computer since you won
            computerScore++;
            console.log(computerScore);
            return result = "You lose! Scissors beat Paper";
        }

    } else if (scissorsRegex.test(playerSelection)) {
        if (computerSelection == "Rock") {
            // add score to computer since you won
            computerScore++;
            console.log(computerScore);
            return result = "You lose! Rock beats Scissors";
        } else if (computerSelection == "Paper") {
            // add score to player since you won
            playerScore++;
            console.log(computerScore);
            return result = "You win! Scissors beats Paper";
        } else if (computerSelection == "Scissors") {
            return result = "It's a draw! You both had Scissors";
        }
    }
}

function game() {
    for (let i = 0; i < 2; i++) {
        console.log(result);
        getPlayerChoice();
        playRound();
        console.log("Computer Score:", computerScore, "Your Score:", playerScore);
    }
}

game();

问题排查与修复点

  • getPlayerChoice无返回值:函数内调用prompt但未返回结果,导致无法获取玩家输入的选择。修改后添加return:

    function getPlayerChoice() {
        return prompt("Rock, Paper, Scissors? ")
    }
    
  • playRound调用未传参:game函数中调用playRound()时没有传递玩家选择和电脑选择,导致函数内参数为undefined,无法进入胜负判断分支。修改game函数,每轮获取新的玩家选择和电脑随机选择:

    function game() {
        for (let i = 0; i < 5; i++) { // 改为常规的5局制
            const playerChoice = getPlayerChoice();
            const computerChoice = getComputerChoice();
            playRound(playerChoice, computerChoice);
            console.log(result);
            console.log("Computer Score:", computerScore, "Your Score:", playerScore);
        }
        // 游戏结束后判定最终胜者
        if (playerScore > computerScore) {
            console.log("恭喜你,最终获胜!");
        } else if (computerScore > playerScore) {
            console.log("很遗憾,电脑最终获胜!");
        } else {
            console.log("最终平局!");
        }
    }
    
  • 全局computerSelection初始化逻辑错误:原全局变量仅初始化一次,导致电脑全程出同一个选择。现在每轮在game中调用getComputerChoice()生成新选择,保证每轮随机出拳。

  • 调试日志冗余/错误:部分console.log(computerScore)场景不符(比如玩家获胜时打印电脑分数),可根据调试需求调整日志内容。

修改后的完整代码

let choices = ["Rock", "Paper", "Scissors"];
let rockRegex = /rock/i;
let paperRegex = /paper/i;
let scissorsRegex = /scissors/i;
let result = "";

function getPlayerChoice() {
    return prompt("Rock, Paper, Scissors? ");
}

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

let playerScore = 0;
let computerScore = 0;
function playRound(playerSelection, computerSelection) {
    if (rockRegex.test(playerSelection)) {
        if (computerSelection === "Rock") {
            result = "It's a draw! You both had Rock";
        } else if (computerSelection === "Paper") {
            computerScore++;
            result = "You lose! Paper beats Rock";
        } else if (computerSelection === "Scissors") {
            playerScore++;
            result = "You win! Rock beats Scissors";
        }
    } else if (paperRegex.test(playerSelection)) {
        if (computerSelection === "Rock") {
            playerScore++;
            result = "You win! Paper beats Rock";
        } else if (computerSelection === "Paper") {
            result = "It's a draw! You both had Paper";
        } else if (computerSelection === "Scissors") {
            computerScore++;
            result = "You lose! Scissors beat Paper";
        }
    } else if (scissorsRegex.test(playerSelection)) {
        if (computerSelection === "Rock") {
            computerScore++;
            result = "You lose! Rock beats Scissors";
        } else if (computerSelection === "Paper") {
            playerScore++;
            result = "You win! Scissors beats Paper";
        } else if (computerSelection === "Scissors") {
            result = "It's a draw! You both had Scissors";
        }
    } else {
        result = "请输入有效的选择:Rock、Paper或Scissors!";
    }
}

function game() {
    for (let i = 0; i < 5; i++) {
        const playerChoice = getPlayerChoice();
        if (!playerChoice) break; // 处理用户取消输入的情况
        const computerChoice = getComputerChoice();
        playRound(playerChoice, computerChoice);
        console.log(`第${i+1}轮结果:${result}`);
        console.log(`当前比分:你 ${playerScore} - ${computerScore} 电脑`);
    }
    // 最终结果判定
    if (playerScore > computerScore) {
        console.log("🎉 恭喜你,五局三胜,最终获胜!");
    } else if (computerScore > playerScore) {
        console.log("😔 很遗憾,电脑最终获胜!");
    } else {
        console.log("🤝 最终平局!");
    }
}

game();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:41:04