Odin项目:JS控制台石头剪刀布game函数循环异常求助
解决石头剪刀布游戏game()函数循环异常问题
原代码的核心问题
- game()未循环执行:原函数仅用
if判断一次,只运行一轮,无法持续到一方得5分 - 电脑选择未更新:全局的
computerSelection仅初始化一次,每轮都用同一个选择,失去随机性 - 重复弹窗:全局提前调用了
prompt,game函数内又调用一次,导致两次输入请求 - 未显示每轮结果:playRound返回的结果没有打印,无法看到每轮战况
修复后的完整代码
let playerScore = 0; let computerScore = 0; function computerPlay() { let choices = ['rock', 'paper', 'scissors'] return choices[Math.floor(Math.random() * choices.length)] } function playRound(playerSelection, computerSelection){ if ((playerSelection === "rock" && computerSelection === "scissors") || (playerSelection === "scissors" && computerSelection === "paper") || (playerSelection === "paper" && computerSelection === "rock")){ playerScore++; return `你赢了! ${playerSelection} 击败 ${computerSelection}, 比分: 玩家 ${playerScore} - 电脑 ${computerScore}`; } else if (playerSelection === computerSelection){ return `平局! 双方都选了${playerSelection}, 比分不变: 玩家 ${playerScore} - 电脑 ${computerScore}`; } else { computerScore++ return `你输了! ${computerSelection} 击败 ${playerSelection}, 比分: 玩家 ${playerScore} - 电脑 ${computerScore}`; } } function game(){ // 循环对战直到一方得分达到5 while (playerScore < 5 && computerScore < 5) { const playerSelection = prompt("请选择: Rock, Paper 或 Scissors").toLowerCase(); // 每轮生成新的电脑选择 const computerSelection = computerPlay(); // 打印本轮结果 const roundResult = playRound(playerSelection, computerSelection); console.log(roundResult); } // 输出最终胜负 console.log(playerScore === 5 ? "恭喜你,最终获胜!" : "很遗憾,电脑最终获胜!"); } // 启动游戏 game();
关键修改点
- 用
while循环替代if,实现持续对战逻辑,直到一方得分≥5 - 每轮循环内重新调用
computerPlay()生成电脑选择,保证每轮随机性 - 移除全局的
playerSelection和computerSelection变量,避免作用域冲突导致的重复输入 - 调用
playRound后立即打印结果,实时展示每轮战况 - 循环结束后判断最终胜负并给出提示
内容的提问来源于stack exchange,提问作者jimboslice
相关产品推荐
相关产品推荐

