JavaScript实现石头剪刀布游戏仅返回平局问题求助
石头剪刀布游戏仅返回平局的问题排查与修复
我正在用JavaScript写石头剪刀布游戏,优化后运行时每次都只返回平局结果,排查很久没找到问题,代码如下:
function getComputerChoice(){ const val = ["rock", "paper", "scissors"]; const random = Math.floor(Math.random()*val.length); return val[random]; } function playRound(computerSelection, playerSelection){ if (computerSelection === "rock" && playerSelection === "paper" || computerSelection === "scissors" && playerSelection === "rock" || computerSelection === "paper" && playerSelection === "scissors") { return "You Win!"; } else if (computerSelection === "scissors" && playerSelection === "paper" || computerSelection === "rock" && playerSelection === "scissors" || computerSelection === "paper" && playerSelection === "rock") { return "You Lose!"; } else { return "Tie"; } } let playerSelection1 = prompt("Rock, Paper, or Scissors"); let computerSelection= getComputerChoice(); let playerSelection= playerSelection1.toLowerCase(); console.log(playerSelection); console.log(getComputerChoice()); console.log(playRound());
问题分析
出现这个问题有两个核心原因:
- 调用
playRound()时未传入所需的computerSelection和playerSelection参数,函数内这两个参数默认是undefined,必然触发else分支返回"Tie"。 console.log(getComputerChoice())会重新生成一次电脑选择,导致你打印的电脑选择和实际参与游戏的电脑选择不一致,进一步混淆逻辑。
修复后的代码
function getComputerChoice(){ const val = ["rock", "paper", "scissors"]; const random = Math.floor(Math.random()*val.length); return val[random]; } function playRound(computerSelection, playerSelection){ if (computerSelection === "rock" && playerSelection === "paper" || computerSelection === "scissors" && playerSelection === "rock" || computerSelection === "paper" && playerSelection === "scissors") { return "You Win!"; } else if (computerSelection === "scissors" && playerSelection === "paper" || computerSelection === "rock" && playerSelection === "scissors" || computerSelection === "paper" && playerSelection === "rock") { return "You Lose!"; } else { return "Tie"; } } let playerSelection1 = prompt("Rock, Paper, or Scissors"); let computerSelection = getComputerChoice(); let playerSelection = playerSelection1.toLowerCase(); console.log(`Your choice: ${playerSelection}`); console.log(`Computer's choice: ${computerSelection}`); // 传入正确的参数调用playRound console.log(playRound(computerSelection, playerSelection));
修复说明
- 调用
playRound时传入了预先定义好的computerSelection和playerSelection参数,确保游戏使用的是同一组选择。 - 打印电脑选择时直接使用已生成的
computerSelection变量,避免重复生成随机值。
内容的提问来源于stack exchange,提问作者rsub14
相关产品推荐
相关产品推荐

