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
相关产品推荐
相关产品推荐

