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

JavaScript剪刀石头布游戏:while循环无法每轮提示用户选择问题

问题根源

你把获取用户选择的prompt和userPick赋值放在了循环外部,所以只在程序启动时执行一次,后续5轮循环都会复用第一次的选择,自然不会每轮弹出新的输入框。

修复方案

将用户选择的获取逻辑移到game()函数的while循环内部,每轮循环都重新获取用户输入并处理:

const maxRound = 5;
let gameRound = 1;

let getComputerChoice = () =>{
    const choiceArr = ["scissors","paper","rock"];
    let i = Math.floor(Math.random()*3);
    return choiceArr[i]
}

let gameNow = (playerSelection,computerSelection) =>{
        if (playerSelection == "rock" && computerSelection == "rock"){
            alert("Tie!")
            gameRound+=1
        } else if (playerSelection == "paper" && computerSelection == "rock"){
            alert("Paper beats Rock, You win!")
            gameRound+=1
        } else if(playerSelection == "scissors" && computerSelection == "rock"){
            alert("Scissors lose to Rock, You lose!")
            gameRound+=1
    
        } else if (playerSelection == "rock" && computerSelection == "scissors"){
            alert("Rock beats scissors, You win!")
            gameRound+=1
        } else if (playerSelection == "paper" && computerSelection == "scissors"){
            alert("Scissors beats Paper, You lose!")
            gameRound+=1
        } else if(playerSelection == "scissors" && computerSelection == "scissors"){
            alert("Tie!")
            gameRound+=1
    
        } else if (playerSelection == "rock" && computerSelection == "paper"){
            alert("Paper beats rock, You lose!")
            gameRound+=1
        } else if (playerSelection == "paper" && computerSelection == "paper"){
            alert("Tie!")
            gameRound+=1
        } else if(playerSelection == "scissors" && computerSelection == "paper"){
            alert("Scissors beats Paper, You win!")
            gameRound+=1
        } else {
            alert("Have you entered the right choice?")
            gameRound+=1
        }
}

let game = () => {
    while(gameRound<=maxRound){
        // 每轮重新获取用户选择
        let userChoice = prompt("Pick one, Paper-Scissors-Rock : ");
        let userPick = userChoice.toLowerCase();
        gameNow(userPick, getComputerChoice())
    }
}

game()
额外优化建议
  • 修正了原代码中scissors vs paper的错误提示内容
  • 可添加输入校验逻辑,当用户输入无效内容时不递增gameRound,让用户重新输入,避免无效轮次浪费
  • 可以引入总分统计变量,5轮结束后弹出最终的胜负结果

内容的提问来源于stack exchange,提问作者Raymond Sam Chia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 23:37:17