You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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("没问题,下次再玩!");
}

关键修改说明

  1. 输入校验逻辑调整:先处理输入得到playerchoice,再直接判断是否为有效选项,空输入或无效字符都会进入对应的提示分支。
  2. 电脑选择逻辑简化:用数组随机索引替代多个if判断,代码更简洁易读。
  3. 胜负判断补全:用else if和else覆盖所有可能的胜负场景,确保每一种情况都有弹窗反馈,不会出现无响应的情况。

内容的提问来源于stack exchange,提问作者ruiky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 08:43:30