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

JS CLI石头剪刀布游戏计分失效、输入不识别问题排查求助

存在的问题及修复方案

  • 问题1:随机出拳逻辑有边界漏洞
    原computerPlay函数的判断条件没有覆盖anyPick = 0.3、anyPick = 0.6两个边界值,触发时函数返回undefined,导致后续比对逻辑全部失效。
    修复:调整判断条件覆盖全区间,同时直接返回小写字符串,统一后续比对格式。
  • 问题2:大小写不匹配导致比对失效
    玩家输入通过toLowerCase()转成了全小写,但电脑返回的出拳结果是首字母大写格式,二者永远无法匹配平局规则,甚至会误判为输入错误。
    修复:电脑出拳直接返回小写字符串,保持和玩家输入格式一致。
  • 问题3:判断逻辑结构错误导致误报输入错误
    原battleRound函数的else只跟最后一个if绑定,只要不满足最后一个胜负条件,哪怕玩家输入正确、触发了前面的平局/其他胜负规则,也有可能误返回输入错误提示。同时没有做输入合法性校验,用户点取消输入时调用toLowerCase()会直接抛错。
    修复:先校验输入合法性,再调整判断逻辑,将所有胜负判断合并成多分支判断,最后再处理非法输入的情况。
  • 问题4:作用域问题导致最终计分函数无法正常工作
    定义的scores函数形参与全局计分变量重名,调用时如果不传参,函数内部会优先读取形参(值为undefined),无法拿到全局的真实分数;同时循环结束后没有调用该函数输出最终结果。
    修复:删除scores函数的多余形参,循环结束后调用该函数输出最终结果。
  • 其他优化点
    修正单词拼写错误:Loose改为Lose,THEN改为THAN。

修复后完整代码

function computerPlay() {
  let anyPick = Math.random();
  if (anyPick < 0.3) {
    return "rock";
  } else if (anyPick < 0.6) {
    return "paper";
  } else {
    return "scissors";
  }
}

let aiScore = 0;
let playerScore = 0;
function battleRound(playerSelection, computerSelection) {
  // 先校验输入合法性
  const validInputs = ['rock', 'paper', 'scissors'];
  if (!validInputs.includes(playerSelection)) {
    return "输入错误,请输入Rock/Paper/Scissors";
  }
  if (playerSelection === computerSelection) {
    return "平局!";
  }
  // 胜负判断
  if (
    (playerSelection === "rock" && computerSelection === "scissors") ||
    (playerSelection === "paper" && computerSelection === "rock") ||
    (playerSelection === "scissors" && computerSelection === "paper")
  ) {
    playerScore += 1;
    return `你赢了!${playerSelection} 击败 ${computerSelection}`;
  } else {
    aiScore += 1;
    return `你输了!${computerSelection} 击败 ${playerSelection}`;
  }
}

function getFinalResult() {
  if (aiScore > playerScore) {
    return "游戏结束:AI获胜,你输了!";
  } else if (playerScore > aiScore) {
    return "游戏结束:恭喜你击败了AI!";
  } else {
    return "游戏结束:双方平局!";
  }
}

for (let i = 0; i < 5; i++) {
  let playerSelection = prompt("Choose: Rock, Paper or Scissors", "");
  // 处理取消输入的情况
  if (playerSelection === null) {
    alert("游戏已取消");
    break;
  }
  playerSelection = playerSelection.trim().toLowerCase();
  const computerSelection = computerPlay();
  console.log("AI出拳:" + computerSelection);
  console.log(battleRound(playerSelection, computerSelection));
  console.log("AI分数:" + aiScore, "玩家分数:" + playerScore);
}

// 输出最终结果
console.log(getFinalResult());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 23:00:05