首页 > 解决方案 > Rock, Paper, Scissors 游戏:我的代码中的循环不断给我相同的随机结果

问题描述

我正在创建一个石头、纸、剪刀游戏,并且只是测试我未完成的代码。游戏是在用户和计算机之间进行的。

如您所见,computerSelection将随机生成“石头”、“纸”或“剪刀”。问题是,在不刷新页面的情况下,每次我在提示符中键入“rock”并点击 OK,我都会在循环中收到相同的 console.log 消息:“干得好!Rock Beats Scissors”或“Sorry!paper beats Rock” ”。换句话说,游戏变得片面了;每次我输入“rock”并点击 OK,要么我总是赢,要么电脑总是赢。

更新:我已经修改了我的代码,但我遇到的另一个问题是有时代码会在 console.log 中重复,而不是添加任何分数。如果你看截图,它已经重复了 2 次代码,但没有添加分数。

在此处输入图像描述

const playerSelection = ''
const computerSelection = computerPlay()
let computerScore = 0;
let playerScore = 0;
console.log(playRound(playerSelection, computerSelection))

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

function playRound(playerSelection, computerSelection) {
  while(true){
    playerSelection = prompt ('Pick your poison');

    if (playerSelection.toLowerCase() === 'rock' && computerPlay() === 'paper'){
      computerScore += 1
      console.log('Sorry! Paper beats Rock')
    } 
    else if (playerSelection.toLowerCase() === 'rock'.toLowerCase() && computerPlay() === 'scissors'){
      playerScore += 1
      console.log('Good job! Rock beats Scissors');
    }
    else 
    {
      console.log('Please type Rock, Paper, or Scissors')
    }

  console.log (`User Selection: ${playerSelection.toUpperCase()} | Player Score: ${playerScore} 
Computer Selection: ${computerSelection.toUpperCase()} | Computer Score: ${computerScore}`);
  }
}

标签: javascript

解决方案


对代码的以下更改将使其工作:

  1. 声明computerSelection方式与playerSelection.

新版本:

const playerSelection = ''
const computerSelection = ''

原始版本:

const playerSelection = ''
const computerSelection = computerPlay()
  1. computerPlay()在函数内调用playRound(playerSelection, computerSelection)函数,因此computerSelection每次玩家选择时也会为变量分配一个值。

新版本:

playerSelection= prompt ('Pick your...');
computerSelection = computerPlay();

原始版本:

 playerSelection= prompt ('Pick your...');

(免责声明:我试图尽可能接近原始代码。)


推荐阅读