JS入门项目:石头剪刀布游戏单轮玩法问题求助
石头剪刀布游戏问题修复
问题1:大小写不敏感输入的支持
你的userInput函数里已经用了ask.toLowerCase(),不管用户输入rock、Rock、ROCK还是rOcK,都会被统一转成小写格式,完全支持大小写不敏感输入,这部分逻辑没问题。
问题2:平局时随机显示错误结果的原因
你在代码开头单独调用了一次console.log(getComputerChoice());,这会先随机生成一个电脑选择并打印,但实际游戏逻辑里,你又调用了一次getComputerChoice()赋值给computerSelection——这意味着控制台打印的电脑选择,和实际参与游戏的电脑选择是两个完全独立的随机结果!
举个例子:
- 第一次调用
getComputerChoice()生成rock,控制台打印出来 - 你输入
Rock,被转成rock - 第二次调用
getComputerChoice()随机生成了scissors - 此时
playRound会返回You win!,但你看到控制台打印的是rock,就误以为是平局却显示赢了,其实是两次随机结果不一致导致的误解。
修复后的代码
删掉开头多余的console.log(getComputerChoice());,确保游戏只生成一次电脑选择,同时做了小优化:
function getComputerChoice() { const randomNum = Math.floor(Math.random() * 3) switch (randomNum) { case 0: return "rock"; case 1: return "paper"; case 2: return "scissors"; } } function userInput() { const ask = prompt("To begin game, select Rock, Paper, or Scissors"); // 处理用户取消输入或空值的情况 if (!ask) { alert("请输入有效的选项!"); return userInput(); } return ask.toLowerCase(); } function playRound(playerSelection, computerSelection) { // 换成严格相等运算符,避免类型转换问题 if (playerSelection === "rock" && computerSelection === "scissors") { return "You win!"; } else if (playerSelection === "rock" && computerSelection === "paper") { return "You lose"; } else if (playerSelection === "scissors" && computerSelection === "paper") { return "You win!"; } else if (playerSelection === "scissors" && computerSelection === "rock") { return "You lose"; } else if (playerSelection === "paper" && computerSelection === "rock") { return "You win!"; } else if (playerSelection === "paper" && computerSelection === "scissors") { return "You lose"; } else if (playerSelection === computerSelection) { return "It's a tie"; } else { return "Try again"; } } const playerSelection = userInput(); const computerSelection = getComputerChoice(); // 打印实际参与游戏的双方选择,方便验证结果 console.log(`你的选择:${playerSelection},电脑选择:${computerSelection}`); console.log(playRound(playerSelection, computerSelection));
额外优化说明
- 把
==换成===严格相等运算符,避免潜在的类型转换问题 - 给
userInput函数加了空值处理,防止用户取消弹窗或输入空内容导致逻辑出错 - 新增了双方选择的打印代码,方便你直观验证游戏结果是否正确
内容的提问来源于stack exchange,提问作者elij1s
相关产品推荐
相关产品推荐

