如何优化JavaScript石头剪刀布游戏的胜负判断代码?
石头剪刀布游戏胜负判断的优化实现
针对你提供的石头剪刀布胜负判断代码,这里有几种更简洁高效的实现方式:
方案1:对象映射胜负关系
利用对象存储每个选项能击败的对手,通过键值对快速判断胜负,逻辑清晰且易于维护:
function getResult() { let result; if (computerChoice === userChoice) { result = "It's a draw"; } else { // 定义各选项的克制关系 const winMap = { rock: "scissors", paper: "rock", scissors: "paper" }; // 判断用户选择是否能克制电脑选择 result = winMap[userChoice] === computerChoice ? 'You won!' : 'You lost'; } resultDisplay.innerHTML = result; }
方案2:数组存储获胜组合
把所有用户获胜的组合存入数组,通过数组方法判断当前组合是否属于获胜情况,可读性强,适合新手理解:
function getResult() { let result; if (computerChoice === userChoice) { result = "It's a draw"; } else { // 列出所有用户获胜的组合 const winCombinations = [ { user: "rock", computer: "scissors" }, { user: "paper", computer: "rock" }, { user: "scissors", computer: "paper" } ]; // 检查当前选择是否在获胜组合中 const isUserWin = winCombinations.some( combo => combo.user === userChoice && combo.computer === computerChoice ); result = isUserWin ? 'You won!' : 'You lost'; } resultDisplay.innerHTML = result; }
方案3:合并相同结果的条件分支
将所有用户失败的条件合并为一个判断,减少分支数量,比原代码更简洁:
function getResult() { let result; if (computerChoice === userChoice) { result = "It's a draw"; } else if ( (computerChoice === "rock" && userChoice === "scissors") || (computerChoice === "paper" && userChoice === "rock") || (computerChoice === "scissors" && userChoice === "paper") ) { result = 'You lost'; } else { result = 'You won!'; } resultDisplay.innerHTML = result; }
内容的提问来源于stack exchange,提问作者Amin Abu Dahab
相关产品推荐
相关产品推荐

