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

石头剪刀布游戏JavaScript代码无报错但无法运行求助

石头剪刀布游戏代码问题排查与修复

核心问题分析

1. getPlayerChoice 函数未正确获取用户输入且存在语法错误

  • 错误点:
    • 固定赋值getChoice = "rock",未通过prompt()获取用户实际输入,导致玩家选择永远为Rock
    • toUpperCase是方法,需加括号调用(toUpperCase()),原代码少括号,导致拼接的是函数本身的字符串而非首字母大写结果
    • while循环内未重新获取用户输入,若初始值不符合要求会直接进入死循环
  • 修复方式:
    • 用prompt()获取用户输入
    • 修正toUpperCase()和toLowerCase()的调用方式
    • 在循环内重新获取输入直到符合要求

2. playRound 函数判断条件与返回值不匹配

  • 错误点:
    • getPlayerChoice返回首字母大写的字符串(如Rock),但playRound判断条件用的是小写(如"rock"),导致所有比较都不成立,最终返回"euphoria"
  • 修复方式:
    • 统一比较时的大小写,可选择转小写后再判断,避免大小写差异问题

3. game 函数逻辑错误

  • 错误点:
    • 仅在循环外获取一次玩家和电脑选择,5轮游戏使用同一组选择,不符合多轮对局需求
    • 调用playRound时传参错误,传入的是结果字符串而非玩家和电脑的选择值,导致函数无法正确判断胜负
    • 未处理平局场景,统计分数时会遗漏平局情况
  • 修复方式:
    • 将获取玩家和电脑选择的代码移到for循环内部,每轮重新生成选择
    • 正确传入playerSelection和computerSelection到playRound,根据返回结果判断胜负并更新分数
    • 添加平局判断逻辑,不更新分数但输出对应提示

修复后的完整代码

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

function getPlayerChoice() {
  let capitalize;
  do {
    let getChoice = prompt("请输入Rock、Paper或Scissors");
    if (!getChoice) continue; // 处理用户取消输入的情况
    let value = getChoice.trim();
    let lowCase = value.toLowerCase();
    capitalize = lowCase.charAt(0).toUpperCase() + lowCase.slice(1);
  } while (!["Rock", "Paper", "Scissors"].includes(capitalize));
  return capitalize;
}

function playRound(playerSelection, computerSelection) {
  // 统一转小写比较,避免大小写问题
  const player = playerSelection.toLowerCase();
  const computer = computerSelection.toLowerCase();
  
  if (
    (player === "rock" && computer === "paper") ||
    (player === "paper" && computer === "scissors") ||
    (player === "scissors" && computer === "rock")
  ) {
    return `Player loses!! ${computerSelection} beats ${playerSelection}`;
  } else if (
    (player === "paper" && computer === "rock") ||
    (player === "scissors" && computer === "paper") ||
    (player === "rock" && computer === "scissors")
  ) {
    return `Player Wins!! ${playerSelection} beats ${computerSelection}`;
  } else if (player === computer) {
    return `It's a tie! ${playerSelection} vs ${computerSelection}`;
  } else {
    return "Invalid input";
  }
}

function game() {
  let playerScores = 0;
  let computerScores = 0;

  for (let i = 0; i < 5; i++) {
    const computerSelection = getComputerChoice();
    const playerSelection = getPlayerChoice();
    const roundResult = playRound(playerSelection, computerSelection);
    
    console.log(roundResult);
    if (roundResult.includes("Wins")) {
      playerScores++;
    } else if (roundResult.includes("loses")) {
      computerScores++;
    }
    console.log(`当前比分: 玩家 ${playerScores} - ${computerScores} 电脑`);
  }

  if (playerScores > computerScores) {
    console.log("恭喜!你赢了整个对局!");
  } else if (playerScores < computerScores) {
    console.log("很遗憾,你输掉了整个对局!");
  } else {
    console.log("对局平局!");
  }
}

game();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:35:56