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

JavaScript实现石头剪刀布游戏返回前多一次循环的修复问题

问题根因

你的bug来自循环逻辑的执行顺序错误:
当前你写的while循环执行顺序为:

  1. 进入循环体
  2. 生成电脑出拳结果
  3. 弹出prompt请求用户输入
  4. 才校验当前双方得分是否达到5分阈值
    也就是说上一轮对局结束后如果有一方得分刚好到5,下一轮循环还是会先弹出prompt,再执行结束逻辑,就出现了你遇到的多弹一次输入框的问题。
修复方案

直接把得分校验作为循环的执行条件,同时去掉冗余的gameContinue变量,调整后的完整代码如下:

// 补充缺失的全局options数组定义,否则代码会报未定义错误
const options = ['rock', 'paper', 'scissors'];
let playerPoints = 0;
let computerPoints = 0;

// Computer Selection
function computerPlay() {
    const compAnswer = options[Math.floor(Math.random() * options.length)];
    return compAnswer;
}
// One round of the game results
function playRound(playerSelection, computerSelection) {
    let rock = options[0];
    let paper = options[1];
    let scissors = options[2];
    let youWin = "You Win! ";
    let youLose = "You Lose! ";
    let rockWin = "Rock beats scissors.";
    let scissorWin = "Scissors beats paper.";
    let paperWin = "Paper beats rock.";
    let tie = "It's a tie, no points added."
    if (playerSelection === computerSelection) {
        console.log(playerPoints, computerPoints);
        return tie;
    } else if (playerSelection === rock && computerSelection === scissors) {
        playerPoints = playerPoints + 1;
        console.log(playerPoints, computerPoints);
        return youWin + rockWin;
    } else if (playerSelection === rock && computerSelection == paper) {
        computerPoints = computerPoints + 1;
        console.log(playerPoints, computerPoints);
        return youLose + paperWin;
    } else if (playerSelection === scissors && computerSelection === rock) {
        computerPoints = computerPoints + 1;
        console.log(playerPoints, computerPoints)
        return youLose + rockWin;
    } else if (playerSelection === scissors && computerSelection === paper) {
        playerPoints = playerPoints + 1;
        console.log(playerPoints, computerPoints)
        return youWin + scissorWin;
    } else if (playerSelection === paper && computerSelection === rock) {
        playerPoints = playerPoints + 1;
        console.log(playerPoints, computerPoints);
        return youWin + paperWin;
    } else if (playerSelection === paper && computerSelection === scissors) {
        computerPoints = computerPoints + 1;
        console.log(playerPoints, computerPoints);
        return youLose + scissorWin;
    } else {
        console.log(playerPoints, computerPoints);
        return "I'm sorry please try another answer"
    }
};
// 修改后的Game loop
function game() {
    // 循环条件直接判断得分,只要任意一方到5分就不会进入循环体,不会触发prompt
    while (playerPoints < 5 && computerPoints < 5) {
        const computerSelection = computerPlay();
        const playerSelection = prompt("Choose your weapon");
        alert(playRound(playerSelection, computerSelection));
    }
    // 循环结束后直接输出结果
    if (playerPoints === 5) {
        console.log("You win");
    } else {
        console.log("You Lose");
    }
};

game();

修改后只要任意一方得分达到5,就不会进入下一轮循环,自然不会再弹出多余的prompt输入框。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:57:03