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

