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

JavaScript实现石头剪刀布游戏仅返回平局问题求助

石头剪刀布游戏仅返回平局的问题排查与修复

我正在用JavaScript写石头剪刀布游戏,优化后运行时每次都只返回平局结果,排查很久没找到问题,代码如下:

function getComputerChoice(){
    const val = ["rock", "paper", "scissors"];
    const random = Math.floor(Math.random()*val.length);
    return val[random];
}

function playRound(computerSelection, playerSelection){
    if (computerSelection === "rock" && playerSelection === "paper" || computerSelection === "scissors" && playerSelection === "rock" || computerSelection === "paper" && playerSelection === "scissors")
    {
        return "You Win!";
    } else if (computerSelection === "scissors" && playerSelection === "paper" || computerSelection === "rock" && playerSelection === "scissors" || computerSelection === "paper" && playerSelection === "rock")
    {
        return "You Lose!";
    } else {
        return "Tie";
    }
}

let playerSelection1 = prompt("Rock, Paper, or Scissors");
let computerSelection= getComputerChoice();
let playerSelection= playerSelection1.toLowerCase();
console.log(playerSelection);
console.log(getComputerChoice());
console.log(playRound());

问题分析

出现这个问题有两个核心原因:

  • 调用playRound()时未传入所需的computerSelection和playerSelection参数,函数内这两个参数默认是undefined,必然触发else分支返回"Tie"。
  • console.log(getComputerChoice())会重新生成一次电脑选择,导致你打印的电脑选择和实际参与游戏的电脑选择不一致,进一步混淆逻辑。

修复后的代码

function getComputerChoice(){
    const val = ["rock", "paper", "scissors"];
    const random = Math.floor(Math.random()*val.length);
    return val[random];
}

function playRound(computerSelection, playerSelection){
    if (computerSelection === "rock" && playerSelection === "paper" || 
        computerSelection === "scissors" && playerSelection === "rock" || 
        computerSelection === "paper" && playerSelection === "scissors")
    {
        return "You Win!";
    } else if (computerSelection === "scissors" && playerSelection === "paper" || 
               computerSelection === "rock" && playerSelection === "scissors" || 
               computerSelection === "paper" && playerSelection === "rock")
    {
        return "You Lose!";
    } else {
        return "Tie";
    }
}

let playerSelection1 = prompt("Rock, Paper, or Scissors");
let computerSelection = getComputerChoice();
let playerSelection = playerSelection1.toLowerCase();
console.log(`Your choice: ${playerSelection}`);
console.log(`Computer's choice: ${computerSelection}`);
// 传入正确的参数调用playRound
console.log(playRound(computerSelection, playerSelection));

修复说明

  • 调用playRound时传入了预先定义好的computerSelection和playerSelection参数,确保游戏使用的是同一组选择。
  • 打印电脑选择时直接使用已生成的computerSelection变量,避免重复生成随机值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 06:57:21