如何在JavaScript中实现五局制石头剪刀布循环并统计总分
石头剪刀布5局对战实现方案
你的问题核心是变量作用域和循环逻辑的问题:分数变量如果在循环内部声明,每次循环都会被重置为0,自然无法累加。下面是修复后的完整实现,附关键逻辑说明:
完整运行代码
// 初始化全局分数:必须放在循环外部,避免每次循环重置 let playerScore = 0; let computerScore = 0; // for循环执行5次对战 for (let round = 1; round <= 5; round++) { // 获取玩家输入,去除首尾空格 const playerChoice = prompt(`第${round}局:请输入「石头」「剪刀」「布」`).trim(); // 校验输入有效性,无效则重新进行当前回合 if (!['石头', '剪刀', '布'].includes(playerChoice)) { alert('输入无效,请重新输入石头、剪刀或布'); round--; // 回退回合数,避免浪费对战次数 continue; } // 电脑随机生成选择 const choices = ['石头', '剪刀', '布']; const computerChoice = choices[Math.floor(Math.random() * choices.length)]; // 判断单局胜负并更新分数 if (playerChoice === computerChoice) { alert(`第${round}局:平局!你出${playerChoice},电脑出${computerChoice}`); } else if ( (playerChoice === '石头' && computerChoice === '剪刀') || (playerChoice === '剪刀' && computerChoice === '布') || (playerChoice === '布' && computerChoice === '石头') ) { playerScore++; alert(`第${round}局:你赢了!当前比分:你 ${playerScore} - ${computerScore} 电脑`); } else { computerScore++; alert(`第${round}局:你输了!当前比分:你 ${playerScore} - ${computerScore} 电脑`); } } // 5局结束后统计最终结果 console.log('=== 5局对战结束 ==='); if (playerScore > computerScore) { console.log(`你是最终胜者!总分:你 ${playerScore} - ${computerScore} 电脑`); alert(`你是最终胜者!总分:你 ${playerScore} - ${computerScore} 电脑`); } else if (computerScore > playerScore) { console.log(`电脑是最终胜者!总分:你 ${playerScore} - ${computerScore} 电脑`); alert(`电脑是最终胜者!总分:你 ${playerScore} - ${computerScore} 电脑`); } else { console.log(`最终平局!总分:你 ${playerScore} - ${computerScore} 电脑`); alert(`最终平局!总分:你 ${playerScore} - ${computerScore} 电脑`); }
关键修复点说明
分数变量作用域
把playerScore和computerScore声明在for循环外部,这样每次循环只会更新变量值,不会重新初始化。如果放在循环内部,每次循环都会重置为0,这就是你当前分数始终为0的原因。循环逻辑控制
使用for (let round = 1; round <=5; round++)确保严格执行5次对战;如果玩家输入无效,通过round--回退回合数,避免浪费对战次数。分数累加逻辑
每局胜负判断后,直接对外部的分数变量执行++操作,确保分数持续累加。最终结果统计
循环结束后,对比玩家和电脑的总分,输出全局胜负结果。
内容的提问来源于stack exchange,提问作者Rommel Decillo
相关产品推荐
相关产品推荐

