石头剪刀布(浏览器控制台):计分功能异常问题
石头剪刀布计分异常问题修复
你的代码主要有两个问题导致计分异常或无法看到最终结果:
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
相关产品推荐
相关产品推荐

