如何基于现有单局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("输入的模式无效,请刷新页面重试"); }
核心修改说明
- 将单局的用户输入、电脑选择生成、胜负判定逻辑封装为可复用的
runOneGame函数,两种模式都可以直接调用,避免重复代码 - 调整
oneRound函数的返回值为胜负标识,不需要直接输出文本,方便多局模式统计分数 - 三局两胜逻辑新增玩家、电脑两个计分变量,你原本尝试加的count计数可以直接用比分替代,只要任意一方先拿到2分就结束对局,符合三局两胜的常规规则,不用强制跑满3局
- 新增简单的输入校验逻辑,避免用户输入无效内容导致逻辑异常
内容的提问来源于stack exchange,提问作者Valentin
相关产品推荐
相关产品推荐

