JavaScript石头剪刀布游戏仅返回平局结果,求代码问题排查
代码主要问题分析
1. getComputerChoice 函数未返回结果
这个函数仅打印了随机选中的选项,但没有通过 return 语句返回该值,导致 computerSelection 变量的实际值是 undefined。playRound 里的所有判断条件都是和具体字符串比较,undefined 和任何字符串都不相等,因此直接进入 else 分支返回平局。
修改方式:在函数末尾添加返回语句:
function getComputerChoice () { const myArray=["Rock" , "Paper", "Scissors"] const random = Math.floor(Math.random() * myArray.length); return myArray[random]; // 返回随机选中的选项 }
2. 字符串大小写不匹配
你定义的 playerSelection 是小写的 "rock",但 playRound 里的判断条件全是大写开头的 "Rock"、"Paper"、"Scissors"。字符串比较是严格区分大小写的,"rock" 和 "Rock" 永远不相等,这也会导致所有胜负判断条件不成立,直接触发平局。
解决方法:
- 方式一:统一
playerSelection的大小写:const playerSelection = "Rock"; - 方式二:在
playRound里统一转换为相同大小写(推荐,能兼容用户输入的不同大小写):function playRound(playerSelection, computerSelection) { const player = playerSelection.toLowerCase(); const computer = computerSelection.toLowerCase(); // 后续条件全部改用小写字符串判断 if (player === "rock" && computer === "paper") { return("You Lose! Paper beats Rock"); } // 其余胜负判断条件同理修改 }
3. 循环中重复使用同一电脑选择
game 函数的循环里,每次调用 playRound 用的都是初始化时生成的 computerSelection,也就是5轮游戏共用同一个电脑选择。应该在每一轮循环里重新调用 getComputerChoice 生成新的选项:
function game() { for (let i = 0; i < 5; i++) { const currentComputerChoice = getComputerChoice(); var result = playRound(playerSelection, currentComputerChoice); console.log(result); } }
修复以上问题后,代码就能正常判断胜负,不会持续返回平局结果。
内容的提问来源于stack exchange,提问作者Birddd
相关产品推荐
相关产品推荐

