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
相关产品推荐
相关产品推荐

