如何简化石头剪刀布游戏的if/else if语句,使其更简洁可读?
石头剪刀布胜负判定代码优化方案
你的代码存在大量重复的条件判断逻辑,可通过预定义胜负关系映射的方式大幅简化,同时提升代码的可维护性。
优化后的代码
function start(computerSelection, playerSelection) { // 处理平局情况 if (computerSelection === playerSelection) { return "It's a tie!"; } // 定义各选项的克制关系:键为出拳类型,值为该类型能击败的目标 const winMap = { rock: "scissors", paper: "rock", scissors: "paper" }; // 验证输入是否有效 if (!winMap[computerSelection] || !winMap[playerSelection]) { return "Invalid entry!"; } // 判断胜负并更新分数 if (winMap[playerSelection] === computerSelection) { playerScore += 1; return "You win!"; } else { computerScore += 1; return "Computer wins!"; } }
优化亮点
- 消除重复判断:用
winMap对象统一管理克制关系,替代了原代码中6组重复的else if判断,后续若扩展游戏规则(比如加入新出拳类型),仅需修改该对象即可。 - 逻辑分层清晰:先处理平局、无效输入这类边界情况,再执行核心胜负判断,代码可读性更强。
- 减少冗余代码:将玩家获胜、电脑获胜的逻辑合并,避免了重复的分数累加和返回语句。
内容的提问来源于stack exchange,提问作者Caelan Quigley
相关产品推荐
相关产品推荐

