Камень, ножницы, бумага Javascript (проект Odin)

Привет всем, это мой первый вопрос здесь, так что извините, если он не соответствует всем правилам. Я пытаюсь сделать игру «камень-ножницы-бумага» из проекта Odin в javascript, и у меня проблемы с выводом результата, потому что он не отображает то, что должен. Если компьютер играет рок для e. и я играю рок, я должен получить ничью, но я все время получаю что-то случайное. Текущий код использует prompt() для пользовательского ввода, но я попытался ввести фиксированную строку, например «бумага», и это было то же самое, я также подумал, что это из-за того, что я неправильно указал toLowerCase(), поэтому я полностью удалил его, и это тем не менее, я был бы признателен за вашу помощь!

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

console.info(computerPlay());

function playRound(playerSelection, computerSelection) {
  if (playerSelection === computerSelection) {
    return ("It's a draw!");
  } else if ((playerSelection === "rock") && (computerSelection === "scissors")) {
    return ("You win! Rock beats scissors");
  } else if (playerSelection === "rock" && computerSelection === "paper") {
    return ("You lose! Paper beats rock");
  } else if (playerSelection === "paper" && computerSelection === "rock") {
    return ("You win! Paper beats rock");
  } else if (playerSelection === "paper" && computerSelection === "scissors") {
    return ("You lose! Scissors beat paper");
  } else if (playerSelection === "scissors" && computerSelection === "paper") {
    return ("You win! Scissors beat paper");
  } else if (playerSelection === "scissors" && computerSelection === "rock") {
    return ("You lose!Rock beats scissors");
  }

}

let computerSelection = computerPlay();
let playerSelection = prompt("Choose your weapon");
console.info(playRound(playerSelection, computerSelection));

Каждый раз, когда вы звоните computerPlay(), вы получаете новую игру. Таким образом, игра, которая зарегистрирована в console.info(computerPlay()), не совпадает с той, которая назначена в computerSelection = computerPlay();

Barmar 05.05.2022 17:58

Используйте console.info(computerSelection) после задания, чтобы увидеть пьесу, с которой вы соревнуетесь.

Barmar 05.05.2022 17:59
Поведение ключевого слова "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
2
35
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Сначала вы выполняете console.info функцию computerPlay(), которая возвращает определенное значение. После этого вы играете в раунд и снова вызываете функцию computerPlay(), которая вычисляет раунд с другим значением, чем в первом console.info.

Попробуйте этот код ниже

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


function playRound(playerSelection, computerSelection) {
  if (playerSelection === computerSelection) {
    return ("It's a draw!");
  } else if ((playerSelection === "rock") && (computerSelection === "scissors")) {
    return ("You win! Rock beats scissors");
  } else if (playerSelection === "rock" && computerSelection === "paper") {
    return ("You lose! Paper beats rock");
  } else if (playerSelection === "paper" && computerSelection === "rock") {
    return ("You win! Paper beats rock");
  } else if (playerSelection === "paper" && computerSelection === "scissors") {
    return ("You lose! Scissors beat paper");
  } else if (playerSelection === "scissors" && computerSelection === "paper") {
    return ("You win! Scissors beat paper");
  } else if (playerSelection === "scissors" && computerSelection === "rock") {
    return ("You lose!Rock beats scissors");
  }

}

let computerSelection = computerPlay();
let playerSelection = prompt("Choose your weapon");
console.info(computerSelection)
console.info(playRound(playerSelection, computerSelection));

Вы можете упростить свои условия таким образом

const choices = ["Rock", "Paper", "Scissors"]
const computerPlay = () => choices[Math.floor(Math.random() * choices.length)]


function playRound(playerSelection, computerSelection) {
  const difference = (choices.length + choices.indexOf(playerSelection) - choices.indexOf(computerSelection) )% choices.length
  switch(difference){
   case 0:
       return "It's a draw!"
    case 2:
       return `You lose! ${computerSelection} beats ${playerSelection}`
    default:
       return `You win! ${playerSelection} beats ${computerSelection}`
  }
 
}

let computerSelection = computerPlay();
let playerSelection
while(!choices.includes(playerSelection)){
  const selected = prompt("Choose your weapon").trim().toLowerCase();
  
  playerSelection = selected[0].toUpperCase()+selected.slice(1)
 
}
console.info(playRound(playerSelection, computerSelection));

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