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

Odin Project石头剪刀布游戏:分数统计失效问题求助

石头剪刀布游戏分数统计问题排查与修复

问题根源拆解

  • 分数无法累加:play函数里,return alert(...)会直接结束函数,导致后面的playerScore++/computerScore++完全没机会执行。必须把分数累加代码放在return之前(或直接移除多余的return)。
  • 电脑选择无随机性:const rty = Math.floor(Math.random()),Math.random()输出0到1之间的浮点数,经过Math.floor后永远是0,所以电脑每次只会出"rock",彻底失去游戏随机性。
  • 胜利判定逻辑失效:game函数的循环固定跑5次,哪怕玩家提前赢够5局也不会提前终止;而且原循环最多只允许玩家玩5局,就算每局都赢,也要等第5局结束才会判断,不符合"赢5轮就弹出提示"的设计。

修正后的完整代码

<script>
    let option1 = "rock"
    let option2 = "paper"
    let option3 = "scissors"
    let playerScore = 0
    let computerScore = 0

function getComputerChoice() {
    // 每次调用生成新随机数,保证选择随机性
    const rty = Math.random()
    if (rty <= 0.33) {
        return option1
    } else if (rty <= 0.66) {
        return option2 
    } else {
        return option3
    }
}

function play() {
    const playerChoice = prompt("Enter your choice").toLowerCase()
    const computerChoice = getComputerChoice()
    
    if (playerChoice === "paper" && computerChoice === "rock") {
        alert("You Win! Paper beats Rock");
        playerScore++;
    } else if (playerChoice === "rock" && computerChoice === "paper") {
        alert("You Lose! Paper beats Rock");
        computerScore++;
    } else if (playerChoice === "scissors" && computerChoice === "rock") {
        alert("You Lose! Rock beats Scissors");
        computerScore++;
    } else if (playerChoice === "rock" && computerChoice === "scissors") {
        alert("You Win! Rock beats Scissors");
        playerScore++;
    } else if (playerChoice === "scissors" && computerChoice === "paper") {
        alert("You Win! Scissors beats Paper");
        playerScore++;
    } else if (playerChoice === "paper" && computerChoice === "scissors") {
        alert("You Lose! Scissors beats Paper");
        computerScore++;
    } else if (playerChoice === computerChoice) {
        alert("It's a tie")
    } else {
        alert("Enter a valid input plox")
    }
}

function game() {
    const winMsg = "Winner!"
    // 改用while循环,直到玩家赢够5局
    while (playerScore < 5) {
        play()
        if (playerScore === 5) {
            alert(winMsg)
            // 重置分数,避免下次调用game时累计旧分数
            playerScore = 0
            computerScore = 0
            return
        }
    }
}
</script>

修正说明

  1. 将随机数生成逻辑移到getComputerChoice内部,每次调用都生成新的随机数,保证电脑选择的随机性。
  2. 移除play函数中多余的return语句,确保分数累加代码能正常执行。
  3. 将game函数的固定次数循环改为while循环,持续运行直到玩家分数达到5,满足"赢5轮就弹出提示"的设计需求;同时在弹出提示后重置分数,避免后续调用时使用历史数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 06:25:23