我正在创建一个石头剪刀布游戏,其中有一个 playRound() 函数。我正在尝试创建一个 game() 函数,我可以多次调用此 playRound() 函数并得到不同的结果。

我想使用这个 game() 函数进行多轮比赛,以找到获胜者,但我仍然坚持让 playRound() 多次运行。

使用我当前的代码, playRound() 函数仅在控制台中运行一次。

这是我的代码:

function playRound(playerSelection, computerSelection) {
  const lose = "You Lose! Paper beats rock";
  const win = "You Win! rock beats paper";
  const tie = "its a tie";
  console.log(`Your selection is : ${playerSelection}`);

  console.log(`PC selection is : ${computerSelection}`);
  if (playerSelection === playerSelection && computerSelection === "paper") {
    return lose;
  } else if (
    playerSelection === playerSelection &&
    computerSelection === "scissors"
  ) {
    return win;
  } else {
    return tie;
  }
}

function game() {
  for (let i = 0; i < 3; i++) {
    return playRound(playerSelection, computerSelection);
  }
}

function computerPlay() {
  let choices = ["rock", "paper", "scissors"];
  let choice = choices[Math.floor(Math.random() * choices.length)];
  return choice;
}
const string = "ROck";

const playerSelection = string.toLowerCase() || string.toUpperCase();

const computerSelection = computerPlay();

console.log(game());

您的 game() 函数不仅返回该回合的结果,从而离开循环...而且您仅在调用 game() 函数之前设置 computerSelection 一次...因此,playerSelection 或 ComputerSelection 都不会改变。

我稍微重新排列了你的代码并添加了总体游戏得分。看一看。

function playRound(playerSelection, round) {
  console.log("Round " + round);
  const computerSelection = computerPlay();
  console.log(`Your selection is : ${playerSelection}`);
  console.log(`PC selection is : ${computerSelection}`);
  if (playerSelection === playerSelection && computerSelection === "paper") {
    return 'lose';
  } else if (
    playerSelection === playerSelection &&
    computerSelection === "scissors"
  ) {
    return 'win';
  } else {
    return 'tie';
  }
}

function game() {
  const lose = "You Lose! Paper beats rock";
  const win = "You Win! Rock beats scissors";
  const tie = "It's a tie";
  let playerScore = 0;
  let computerScore = 0;
  for (let i = 1; i < 4; i++) {
    const result = playRound(playerSelection, i);
    switch (result) {
      case 'win':
        console.log(win);
        playerScore++;
        break;
      case 'lose':
        console.log(lose);
        computerScore++;
        break;
      default:
        console.log(tie);
        playerScore++;
        computerScore++;
        break;
    }
  }
  console.log("Final Results: Player: " + playerScore + " Computer: " + computerScore);
  if (playerScore > computerScore) {
    console.log("You win the game!");
  } else if (playerScore < computerScore) {
    console.log("You lose the game.");
  } else {
    console.log("The game was an overall tie.");
  }
}

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

const playerSelection = "rock";
game();


不要return在 for 循环中 - 因为它会在该循环的第一次迭代中退出该函数

这将是生成器函数的巧妙应用。

你们知道如何让回合显示不同的结果,而不只是重复相同的结果 3 次吗?

在函数中,您将返回对您发布的代码中不存在的game函数的调用。playRound

您使用的这意味着它在一次调用后return playRound(...)退出功能。您应该对 的返回值求和,而不是 return。也许是这样的。game()playRound();playRound()sum += playRound(...);

这太棒了,非常感谢你,我明天要开始的下一个项目是使用 dom 操作将视觉前端连接到此