Как запрашивать у пользователя ввод данных после каждого раунда в игре «Камень-ножницы-бумага»?

Игра работает нормально после 1 раунда. Я пытаюсь сыграть 5 раундов. Я пробовал цикл for перед циклом while. Но он по-прежнему запрашивает у пользователя ввод только один раз.

let computerPlay = () => {
      let compChoices = ["rock", "paper", "scissors"]; //array storing computer possible actions
      let i = Math.floor(Math.random() * 3);
      let choice = compChoices[i];
    
      return choice;
    };
    
    //
    let playerChoice = prompt("Select your action").toLowerCase();
    let computerChoice = computerPlay();
    
    let playRound = (playerSelection, computerSelection) => {
      let winner = "";
      if (playerSelection === computerSelection) {
        winner = "tie";
      } else if (playerSelection > computerSelection) {
        winner = "player";
      } else {
        winner = "computer";
      }
    
      return console.info(winner);
    };
    
    let i = 0;
    while (i < 5) {
      playRound(playerChoice, computerChoice);
      i++;
    }

После того, как вы сыграете раунд, снова вызовите computerPlay (переименуйте его во что-то другое, например round). Это потому, что начало computerPlay содержит логику, необходимую для перезапуска раунда.

kellys 17.03.2022 15:37
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
30
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

ОБНОВЛЕНО

В качестве требования автор просит сохранить параметры playerSelection и computerSelection для playRound. Я бы предложил исправить это, поместив playerChoice и computerChoice в цикл while

let computerPlay = () => {
      let compChoices = ["rock", "paper", "scissors"]; //array storing computer possible actions
      let i = Math.floor(Math.random() * 3);
      let choice = compChoices[i];
    
      return choice;
    };
    
    let playRound = (playerSelection, computerSelection) => {
      let winner = "";
      if (playerSelection === computerSelection) {
        winner = "tie";
      } else if (playerSelection > computerSelection) {
        winner = "player";
      } else {
        winner = "computer";
      }
    
      return console.info(winner);
    };
    
    let i = 0;
    while (i < 5) {
      //here is the change
      let playerChoice = prompt("Select your action").toLowerCase();
      let computerChoice = computerPlay();
      playRound(playerChoice, computerChoice);
      i++;
    }

СТАРЫЙ ОТВЕТ

Твоя проблема в том, что ты пропускаешь prompt за пределы своего playRound. playerSelection и computerSelection тоже должны быть в playRound, что поможет сбрасывать значения компьютера и ваш выбор в каждом раунде.

let computerPlay = () => {
      let compChoices = ["rock", "paper", "scissors"]; //array storing computer possible actions
      let i = Math.floor(Math.random() * 3);
      let choice = compChoices[i];
    
      return choice;
    };
    
    let playRound = () => {
      let playerSelection = prompt("Select your action").toLowerCase();
      let computerSelection = computerPlay();
      let winner = "";
      if (playerSelection === computerSelection) {
        winner = "tie";
      } else if (playerSelection > computerSelection) {
        winner = "player";
      } else {
        winner = "computer";
      }
    
      return console.info(winner);
    };
    
    let i = 0;
    while (i < 5) {
      playRound();
      i++;
    }

Инструкции по назначению заключались в том, чтобы передать playerSelection и computerSelection в качестве параметров в playRound(). Как я могу сбрасывать после каждого раунда, делая это таким образом?

medOnline5 17.03.2022 16:05

@medOnline5 вам просто нужно передать playerChoice и computerChoice в цикле while. Кстати, я тоже обновил свой ответ.

Nick Vu 17.03.2022 16:10

В вашем ответе можно ли передать playerChoice и computerChoice в качестве параметров, даже если playRound не указал параметры?

medOnline5 17.03.2022 16:13

Извините, не обращайте внимания на предыдущий вопрос. Я смотрел на старый ответ. Спасибо Ник!!

medOnline5 17.03.2022 16:14

Если это сработает, не могли бы вы помочь мне отметить это как ответ? это помогло бы и другим людям :D

Nick Vu 17.03.2022 16:24

Да. Извините, все еще привыкаю к ​​stackOverflow, ха-ха

medOnline5 17.03.2022 20:16

Другие вопросы по теме