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

如何基于现有单局JavaScript石头剪刀布游戏实现三局两胜模式

JavaScript石头剪刀布三局两胜模式实现方案

你原有代码的核心问题:

  • 调用函数时只写了oneRound/bestOfThree,没有加括号执行,对应逻辑根本不会运行
  • 玩家选择、电脑选择的生成逻辑只执行了一次,三局两胜模式需要每局都重新获取双方选择
  • 没有多局计分逻辑,没法统计累计胜负结果

完整修改后代码

// 单局胜负判定逻辑
var oneRound = function(computerChoice, userChoice) {
  if (computerChoice === userChoice) {
    return "tie"; // 平局返回标识,方便后续计分
  }
  if (computerChoice === "rock") {
    return userChoice === "scissors" ? "computer" : "player";
  }
  if (computerChoice === "paper") {
    return userChoice === "scissors" ? "player" : "computer";
  }
  if (computerChoice === "scissors") {
    return userChoice === "rock" ? "player" : "computer";
  }
};

// 单局游戏执行逻辑:获取双方选择+判定+输出单局结果
var runOneGame = function() {
  var userChoice = prompt("请选择:石头(rock)、剪刀(scissors)、布(paper)");
  // 输入合法性校验
  while (!["rock", "paper", "scissors"].includes(userChoice)) {
    userChoice = prompt("输入无效,请重新输入:石头(rock)、剪刀(scissors)、布(paper)");
  }
  // 生成电脑随机选择
  var computerChoice = Math.random();
  if (computerChoice < 0.34) {
    computerChoice = "rock";
  } else if (computerChoice <= 0.67) {
    computerChoice = "paper";
  } else {
    computerChoice = "scissors";
  }
  // 输出单局信息
  console.log("===== 单局结果 =====");
  console.log("玩家选择:" + userChoice);
  console.log("电脑选择:" + computerChoice);
  var result = oneRound(computerChoice, userChoice);
  if (result === "tie") {
    console.log("本局平局!");
  } else {
    console.log(result === "player" ? "本局玩家获胜!" : "本局电脑获胜!");
  }
  return result;
}

// 三局两胜模式逻辑
var bestOfThree = function() {
  var playerScore = 0;
  var computerScore = 0;
  // 任意一方拿到2分就结束对局,不用固定跑3局
  while (playerScore < 2 && computerScore < 2) {
    var roundResult = runOneGame();
    // 平局不计分,直接重开本局
    if (roundResult === "tie") continue;
    roundResult === "player" ? playerScore++ : computerScore++;
    console.log("当前比分:玩家 " + playerScore + " - " + computerScore + " 电脑");
  }
  // 输出最终结果
  console.log("===== 三局两胜最终结果 =====");
  console.log(playerScore === 2 ? "恭喜你赢得了三局两胜的胜利!" : "很遗憾,电脑赢得了三局两胜的胜利");
}

// 游戏启动入口
var mode = prompt("请选择模式:输入1为单局模式,输入2为三局两胜模式");
if (mode === '1') {
  runOneGame();
} else if (mode === '2') {
  bestOfThree();
} else {
  alert("输入的模式无效,请刷新页面重试");
}

核心修改说明

  1. 将单局的用户输入、电脑选择生成、胜负判定逻辑封装为可复用的runOneGame函数,两种模式都可以直接调用,避免重复代码
  2. 调整oneRound函数的返回值为胜负标识,不需要直接输出文本,方便多局模式统计分数
  3. 三局两胜逻辑新增玩家、电脑两个计分变量,你原本尝试加的count计数可以直接用比分替代,只要任意一方先拿到2分就结束对局,符合三局两胜的常规规则,不用强制跑满3局
  4. 新增简单的输入校验逻辑,避免用户输入无效内容导致逻辑异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:39:03