JavaScript石头剪刀布游戏:实现函数嵌套调用与计分器开发
石头剪刀布游戏功能整合实现
一、先修正现有代码的问题
getComputerChoice函数的else分支存在语法错误,缺少大括号导致逻辑混乱,同时移除全局变量避免污染playerSelection函数补充输入验证,防止用户输入无效内容playRound函数完善平局判断,并返回明确的胜负结果用于计分
二、完整整合实现代码
// 生成电脑选择,返回统一格式的字符串 function getComputerChoice() { const choices = ["rock", "paper", "scissors"]; const randomIndex = Math.floor(Math.random() * choices.length); const choice = choices[randomIndex]; console.log(`computer picked ${choice.charAt(0).toUpperCase() + choice.slice(1)}`); return choice; } // 获取玩家选择,带输入合法性验证 function playerSelection() { let input; do { input = prompt("Input Rock, Paper or Scissors").toLowerCase(); } while (!["rock", "paper", "scissors"].includes(input)); console.log("you picked", input); return input; } // 单轮游戏逻辑,返回胜负结果:"win"、"lose"、"draw" function playRound(yourSelection, computerSelection) { if (yourSelection === computerSelection) { console.log("It's a draw!"); return "draw"; } const winConditions = [ { player: "rock", computer: "scissors" }, { player: "scissors", computer: "paper" }, { player: "paper", computer: "rock" } ]; if (winConditions.some(cond => cond.player === yourSelection && cond.computer === computerSelection)) { console.log("You win this round!"); return "win"; } else { console.log("You lose this round!"); return "lose"; } } // 主游戏入口,嵌套调用所有功能,默认5局制 function game(totalRounds = 5) { let playerScore = 0; let computerScore = 0; for (let round = 1; round <= totalRounds; round++) { console.log(`\n--- Round ${round} ---`); const playerChoice = playerSelection(); const computerChoice = getComputerChoice(); const result = playRound(playerChoice, computerChoice); // 根据单轮结果更新分数 switch(result) { case "win": playerScore++; break; case "lose": computerScore++; break; } console.log(`Current score: You ${playerScore} - ${computerScore} Computer`); } // 输出最终游戏结果 console.log("\n--- Game Over ---"); if (playerScore > computerScore) { console.log(`You won the game! Final score: ${playerScore} - ${computerScore}`); } else if (computerScore > playerScore) { console.log(`You lost the game! Final score: ${playerScore} - ${computerScore}`); } else { console.log(`The game is a tie! Final score: ${playerScore} - ${computerScore}`); } } // 启动游戏 game();
关键改动说明
- 统一电脑和玩家的选择格式为字符串,避免数字与字符串混用导致的逻辑错误
- 给玩家选择添加循环验证,确保输入内容合法
- 让
playRound返回明确的胜负状态,为主函数的计分逻辑提供依据 - 主函数
game作为核心入口,嵌套调用所有子函数,通过循环控制游戏轮数,用变量实时跟踪双方分数,最终输出全局胜负结果
内容的提问来源于stack exchange,提问作者Gentlefungi
相关产品推荐
相关产品推荐

