石头剪刀布游戏JavaScript代码无报错但无法运行求助
石头剪刀布游戏代码问题排查与修复
核心问题分析
1. getPlayerChoice 函数未正确获取用户输入且存在语法错误
- 错误点:
- 固定赋值
getChoice = "rock",未通过prompt()获取用户实际输入,导致玩家选择永远为Rock toUpperCase是方法,需加括号调用(toUpperCase()),原代码少括号,导致拼接的是函数本身的字符串而非首字母大写结果- while循环内未重新获取用户输入,若初始值不符合要求会直接进入死循环
- 固定赋值
- 修复方式:
- 用
prompt()获取用户输入 - 修正
toUpperCase()和toLowerCase()的调用方式 - 在循环内重新获取输入直到符合要求
- 用
2. playRound 函数判断条件与返回值不匹配
- 错误点:
getPlayerChoice返回首字母大写的字符串(如Rock),但playRound判断条件用的是小写(如"rock"),导致所有比较都不成立,最终返回"euphoria"
- 修复方式:
- 统一比较时的大小写,可选择转小写后再判断,避免大小写差异问题
3. game 函数逻辑错误
- 错误点:
- 仅在循环外获取一次玩家和电脑选择,5轮游戏使用同一组选择,不符合多轮对局需求
- 调用
playRound时传参错误,传入的是结果字符串而非玩家和电脑的选择值,导致函数无法正确判断胜负 - 未处理平局场景,统计分数时会遗漏平局情况
- 修复方式:
- 将获取玩家和电脑选择的代码移到for循环内部,每轮重新生成选择
- 正确传入
playerSelection和computerSelection到playRound,根据返回结果判断胜负并更新分数 - 添加平局判断逻辑,不更新分数但输出对应提示
修复后的完整代码
function getComputerChoice() { let values = ["rock", "paper", "scissors"]; return values[Math.floor(Math.random() * values.length)]; } function getPlayerChoice() { let capitalize; do { let getChoice = prompt("请输入Rock、Paper或Scissors"); if (!getChoice) continue; // 处理用户取消输入的情况 let value = getChoice.trim(); let lowCase = value.toLowerCase(); capitalize = lowCase.charAt(0).toUpperCase() + lowCase.slice(1); } while (!["Rock", "Paper", "Scissors"].includes(capitalize)); return capitalize; } function playRound(playerSelection, computerSelection) { // 统一转小写比较,避免大小写问题 const player = playerSelection.toLowerCase(); const computer = computerSelection.toLowerCase(); if ( (player === "rock" && computer === "paper") || (player === "paper" && computer === "scissors") || (player === "scissors" && computer === "rock") ) { return `Player loses!! ${computerSelection} beats ${playerSelection}`; } else if ( (player === "paper" && computer === "rock") || (player === "scissors" && computer === "paper") || (player === "rock" && computer === "scissors") ) { return `Player Wins!! ${playerSelection} beats ${computerSelection}`; } else if (player === computer) { return `It's a tie! ${playerSelection} vs ${computerSelection}`; } else { return "Invalid input"; } } function game() { let playerScores = 0; let computerScores = 0; for (let i = 0; i < 5; i++) { const computerSelection = getComputerChoice(); const playerSelection = getPlayerChoice(); const roundResult = playRound(playerSelection, computerSelection); console.log(roundResult); if (roundResult.includes("Wins")) { playerScores++; } else if (roundResult.includes("loses")) { computerScores++; } console.log(`当前比分: 玩家 ${playerScores} - ${computerScores} 电脑`); } if (playerScores > computerScores) { console.log("恭喜!你赢了整个对局!"); } else if (playerScores < computerScores) { console.log("很遗憾,你输掉了整个对局!"); } else { console.log("对局平局!"); } } game();
内容的提问来源于stack exchange,提问作者Alexander Odufuye
相关产品推荐
相关产品推荐

