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

JS猜拳游戏判断异常求助:不同值字符串被判定相等

JavaScript猜拳游戏平局错误的修复方案

核心问题分析

你遇到的判定错误,根源有三个:

  1. 调用playRound时未传递参数:你在game函数最后调用playRound()时没有传入玩家和电脑的选择值,playRound内部的参数会默认取undefined,undefined === undefined返回true,直接触发平局判定。
  2. 大小写与拼写不统一:
    • 部分判断条件使用了小写的"Paper"、"Rock",但ComputerSelection已通过.toUpperCase()转为大写,这些条件永远无法触发。
    • 剪刀的拼写错误:SCISSCORS应为SCISSORS,后续判断逻辑里也存在同样的拼写问题。
  3. 多余的电脑选择调用:game函数开头的console.log(getComputerChoice())会额外生成一次电脑选择,导致最终生效的是第二次调用的结果,第一次随机值被浪费。

修复后的完整代码

function getComputerChoice() {
  const randomnum = Math.floor(Math.random() * 3); // 改为0-2,逻辑更简洁
  switch (randomnum) {
    case 0:
      return "ROCK";
    case 1:
      return "PAPER";
    case 2:
      return "SCISSORS"; // 修正拼写错误
  }
}
function game() {
  const playerSelection = prompt("Rock, Paper, Scissors?").toUpperCase();
  const computerSelection = getComputerChoice(); // 函数已返回大写,无需重复转换
  function playRound(player, computer) {
    // 先处理平局情况
    if (player === computer) {
      return "It's a Draw";
    }
    // 用数组整理玩家获胜的所有条件,简化逻辑
    const winCases = [
      ["ROCK", "SCISSORS"],
      ["PAPER", "ROCK"],
      ["SCISSORS", "PAPER"]
    ];
    for (const [p, c] of winCases) {
      if (player === p && computer === c) {
        return "You Won";
      }
    }
    // 不符合获胜条件则直接判定失败
    return "You Lose";
  }
  // 传递正确参数并输出结果
  const result = playRound(playerSelection, computerSelection);
  console.log(`玩家选择: ${playerSelection}, 电脑选择: ${computerSelection} —— ${result}`);
}

game();

关键修复点说明

  • 传递有效参数:调用playRound时传入playerSelection和computerSelection,确保函数能拿到实际选择值进行判断。
  • 统一拼写与大小写:修正剪刀的拼写错误,所有判断逻辑使用统一的大写字符串,避免匹配失败。
  • 简化胜负逻辑:用数组存储玩家获胜的组合,减少重复的if判断,提升代码可读性和可维护性。
  • 移除无效调用:删除game函数开头多余的getComputerChoice()调用,保证电脑选择唯一有效。
  • 规范命名:将ComputerSelection改为小驼峰命名computerSelection,符合JavaScript编码规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:55:18