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

JavaScript石头剪刀布游戏模式选择与计分问题求助

石头剪刀布游戏问题修复方案

核心问题分析与修复

问题1:单局模式触发三局两胜模式

原因:

  • 条件判断误用赋值运算符=而非全等比较运算符===,导致无论输入什么,pickyourpoison = 1会先把变量设为1,接着pickyourpoison = 2又将其设为2,最终总是进入三局两胜分支。
  • prompt返回字符串类型,直接和数字1/2比较会不匹配,需转换为数字类型。

修复:
将模式选择的判断逻辑修改为:

if (Number(pickyourpoison) === 1) {
  OneRound()
} else if (Number(pickyourpoison) === 2) {
  // 三局两胜逻辑
}

问题2:三局两胜模式轮次异常、得分统计错误

原因:

  1. OneRound函数无返回值:当前函数仅打印结果,未返回比较结果,导致var score = OneRound()中score为undefined,后续得分判断完全失效。
  2. 得分判断误用赋值运算符=:if(score = "You win!")是赋值操作而非比较,会强制把score设为该字符串,导致每次都执行用户得分加1的逻辑。
  3. 平局未跳过计数:平局时未做特殊处理,导致轮次无意义增加。
  4. 最终胜负判断误用赋值运算符=:if (userScore = 2)会直接把userScore设为2,导致总是打印" Well played"。

修复步骤:

  1. 让OneRound返回比较结果:
var OneRound = function(){
  // ... 原有代码 ...
  const result = compare(userChoice, botChoice);
  console.log("Computer chooses: " + botChoice) 
  console.log(result);
  return result; // 新增返回结果逻辑
}
  1. 修正得分判断的运算符为===,并忽略平局情况:
if(score === "You win!"){
  userScore += 1
  console.log(userScore)
}
else if (score === "Bot wins :(") {
  botScore += 1
  console.log(botScore)
}
// 平局时不更新分数,直接进入下一轮
  1. 修正最终胜负判断的运算符:
if (userScore === 2){
  console.log("打得不错!")
}
else if (botScore === 2){
  console.log("下次加油!")
}

完整修复后代码

var OneRound = function(){
  var userChoice = prompt("请选择石头、布或剪刀?");

  var botChoice = Math.random();
  if (botChoice < 0.34) {
    botChoice = "rock";
  } else if(botChoice <= 0.67) {
    botChoice = "paper";
  } else {
    botChoice = "scissors";
  } 

  var compare = function(choice1,choice2) {
    if (choice1 === choice2) {
      return "平局!再来一局。";
    }
    else if (choice1 === "rock") {
      if (choice2 === "scissors") {
        return "你赢了!";
      } else {
        return "机器人赢了 :(";
      }
    }
    else if (choice1 === "paper") {
      if (choice2 === "rock") {
        return "你赢了!";
      } else {
        return "机器人赢了 :(";
      }
    }
    else if (choice1 === "scissors") {
      if (choice2 === "rock") {
        return "机器人赢了 :(";
      } else {
        return "你赢了!";
      }
    }  
    else {
      return "无效选项,请重新输入。";
    }
  }

  const result = compare(userChoice, botChoice);
  console.log("机器人选择了: " + botChoice);
  console.log(result);
  return result;
}

var game = function(){
  var userScore = 0;
  var botScore = 0;
  var pickyourpoison = prompt("选择1进行单局模式,选择2进行三局两胜模式");
  
  if (Number(pickyourpoison) === 1){
    OneRound();
  }
  else if (Number(pickyourpoison) === 2){
    while(userScore < 2 && botScore < 2){
      var score = OneRound();
      if(score === "你赢了!"){
        userScore += 1;
        console.log("你的得分: " + userScore);
      }
      else if (score === "机器人赢了 :(") {
        botScore += 1;
        console.log("机器人得分: " + botScore);
      }
      // 平局或无效输入时不更新分数,直接进入下一轮
    }
    if (userScore === 2){
      console.log("打得不错!");
    }
    else if (botScore === 2){
      console.log("下次加油!");
    }
  }
}
game();

修复后运行说明

  • 单局模式:输入1后仅运行一轮游戏,结束后退出。
  • 三局两胜模式:
    • 仅在一方获得2分时停止,平局或无效输入不计数,不会出现多余轮次。
    • 正确统计用户和机器人的得分,最终根据得分显示对应结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 09:52:02