使用confirm与prompt的JavaScript猜拳游戏异常:如何修复?
解决JavaScript猜拳游戏的两个问题
问题1分析与修复
当你在prompt弹窗直接点击确定(输入为空)时,startgame是空字符串,原代码里if(startgame)会判定为false,直接进入「change you mind? not a problem」分支,不会走到判断输入是否为r/p/s的逻辑。
修复方式:先对输入做trim处理,再判断是否为有效选项,不管原输入是否为空,统一处理格式后再校验。
问题2分析与修复
原代码的胜负判断逻辑有遗漏,比如玩家选r vs 电脑选p、玩家选s vs 电脑选r、玩家选p vs 电脑选s这些场景没有对应的alert提示,导致用户以为游戏没反应,会重复输入。需要补全所有胜负场景的判断,确保每种情况都有反馈。
修复后的完整代码
let playgame = confirm("要不要玩猜拳游戏?"); if (playgame) { let startgame = prompt("请选择 r(石头)、p(布)、s(剪刀)"); // 统一处理输入:转小写+去除首尾空格,空输入直接设为"" let playerchoice = startgame ? startgame.trim().toLowerCase() : ""; if (playerchoice === "r" || playerchoice === "p" || playerchoice === "s") { // 简化电脑选择逻辑 const choices = ["r", "p", "s"]; let computer = choices[Math.floor(Math.random() * 3)]; // 补全所有胜负判断场景 if (playerchoice === computer) { alert(`平局!你选了${playerchoice},电脑选了${computer}`); } else if ( (playerchoice === "r" && computer === "s") || (playerchoice === "p" && computer === "r") || (playerchoice === "s" && computer === "p") ) { alert(`你赢了!你选了${playerchoice},电脑选了${computer}`); } else { alert(`电脑赢了!你选了${playerchoice},电脑选了${computer}`); } } else { alert("你没选择有效的选项(r、p、s)"); } } else { alert("没问题,下次再玩!"); }
关键修改说明
- 输入校验逻辑调整:先处理输入得到
playerchoice,再直接判断是否为有效选项,空输入或无效字符都会进入对应的提示分支。 - 电脑选择逻辑简化:用数组随机索引替代多个if判断,代码更简洁易读。
- 胜负判断补全:用
else if和else覆盖所有可能的胜负场景,确保每一种情况都有弹窗反馈,不会出现无响应的情况。
内容的提问来源于stack exchange,提问作者ruiky
相关产品推荐
相关产品推荐

