You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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();

关键改动说明

  1. 统一电脑和玩家的选择格式为字符串,避免数字与字符串混用导致的逻辑错误
  2. 给玩家选择添加循环验证,确保输入内容合法
  3. 让playRound返回明确的胜负状态,为主函数的计分逻辑提供依据
  4. 主函数game作为核心入口,嵌套调用所有子函数,通过循环控制游戏轮数,用变量实时跟踪双方分数,最终输出全局胜负结果

内容的提问来源于stack exchange,提问作者Gentlefungi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 09:29:56