首页 > 解决方案 > JS CLI RPS 游戏问题

问题描述

向 Stack Overflow 的爱心人士问好。我最近才开始学习 JS,现在正在尝试制作 CLI 剪刀石头布游戏。是的,我知道我是第 100 个提出问题的人,但我无法通过其他人的代码找到“no-make-sense”代码。所以我只是向所有对帮助新手无动于衷的人寻求帮助!

情况是这样的:一个熟悉的游戏最常见的规则,但我无法让计数器工作,加上有时我输入的文本无法识别(我认为是输入比较功能的原因)。另外,我确定我的 func 范围已损坏,但我无法弄清楚或追踪它的位置和原因。

function computerPlay() {
  let anyPick = Math.random();
  if (anyPick < 0.3) {
    return "Rock";
  }
  if (anyPick > 0.3 && anyPick < 0.6) {
    return "Paper";
  }
  if (anyPick > 0.6) {
    return "Scissors";
  }
}

let aiScore = 0;
let playerScore = 0;
function battleRound(playerSelection, computerSelection) {
  if (playerSelection === computerSelection) {
    return "None of you are win or lose, cuz it is an equal!";
  }
  if (playerSelection === "rock" && computerSelection === "Scissors") {
    playerScore += 1;
    return "You Win! Rock beats Scissors";
  }
  if (playerSelection === "rock" && computerSelection === "Paper") {
    aiScore += 1;
    return "You Loose! Paper beats Rock";
  }
  if (playerSelection === "paper" && computerSelection === "Scissors") {
    aiScore += 1;
    return "You Loose! Scissors cut Paper";
  }
  if (playerSelection === "paper" && computerSelection === "Rock") {
    playerScore += 1;
    return "You Win! Paper beats Rock";
  }
  if (playerSelection === "scissors" && computerSelection === "Paper") {
    playerScore += 1;
    return "You Win! Scissors cut Paper";
  }
  if (playerSelection === "scissors" && computerSelection === "Rock") {
    aiScore += 1;
    return "You Loose! Rock beats Scissors";
  } else return "U misspelled, try again";
}

function scores(aiScore, playerScore) {
  if (aiScore > playerScore) {
    return "CONGRAS, AI IS SMARTER THEN YOU!";
  }
  if (playerScore > aiScore) {
    return "CONGRAS, YOU ARE SMARTER THEN AI";
  }
}

for (let i = 0; i < 5; i++) {
  const playerSelection = prompt(
    "Choose: Rock, Paper or Scissors",
    " "
  ).toLowerCase();
  const computerSelection = computerPlay();
  console.log("AI choose: " + computerSelection);
  console.log(battleRound(playerSelection, computerSelection));
  console.log("AI score: " + aiScore, "Player score: " + playerScore);
}

请指出代码中的一个明显问题以及我需要替换的内容。非常感谢任何提示!

标签: javascriptloopsscopelogiccommand-line-interface

解决方案


您的代码有两个主要问题可能导致此问题,

  • 您将默认提示值设置为空白。通过使用:
prompt("Choose: Rock, Paper or Scissors", " ")

默认提示值是一个空格,这样更容易输入错误的值。

为了解决这个问题,我删除了默认值并添加了.trim()从输入的开头和结尾删除空格的方法。

  • 你在做不可能的比较。在您的代码中,您进行了比较:
if (playerSelection === computerSelection) {
     return ("None of you are win or lose, cuz it is an equal!");
}

这种情况永远不会发生true,因为 theplayerSelection总是转换为小写 eg "rock",但computerSelection' 的第一个字母总是大写 eg "Rock"

在比较之前,我将.toLowerCase()方法添加到末尾computerSelection

完整代码:

function computerPlay() {
  let anyPick = Math.random();
  if (anyPick < 0.3) {
    return "Rock";
  }
  if (anyPick > 0.3 && anyPick < 0.6) {
    return "Paper";
  }
  if (anyPick > 0.6) {
    return "Scissors";
  }
}

let aiScore = 0;
let playerScore = 0;

function battleRound(playerSelection, computerSelection) {
  if (playerSelection === computerSelection.toLowerCase()) {
    return "None of you are win or lose, cuz it is an equal!";
  }
  if (playerSelection === "rock" && computerSelection === "Scissors") {
    playerScore += 1;
    return "You Win! Rock beats Scissors";
  }
  if (playerSelection === "rock" && computerSelection === "Paper") {
    aiScore += 1;
    return "You Loose! Paper beats Rock";
  }
  if (playerSelection === "paper" && computerSelection === "Scissors") {
    aiScore += 1;
    return "You Loose! Scissors cut Paper";
  }
  if (playerSelection === "paper" && computerSelection === "Rock") {
    playerScore += 1;
    return "You Win! Paper beats Rock";
  }
  if (playerSelection === "scissors" && computerSelection === "Paper") {
    playerScore += 1;
    return "You Win! Scissors cut Paper";
  }
  if (playerSelection === "scissors" && computerSelection === "Rock") {
    aiScore += 1;
    return "You Loose! Rock beats Scissors";
  } else return "U misspelled, try again";
}

function finalScores() {
  if (aiScore > playerScore) {
    return "CONGRATS, AI IS SMARTER THEN YOU!";
  }
  if (playerScore > aiScore) {
    return "CONGRATS, YOU ARE SMARTER THEN AI";
  }
}

for (let i = 0; i < 5; i++) {
  const playerSelection = (prompt("Choose: Rock, Paper or Scissors") ?? "")
    .trim()
    .toLowerCase();
  const computerSelection = computerPlay();
  console.log("AI choose: " + computerSelection);
  console.log(battleRound(playerSelection, computerSelection));
  console.log("AI score: " + aiScore, "Player score: " + playerScore);
}

console.log(finalScores())


推荐阅读