Камень Ножницы-бумага и одна загадочная ошибка в ответе

#javascript #if-statement #dom-events

Вопрос:

В настоящее время я работаю над своей игрой «камень-ножницы-бумага». В частности, я работаю над eventListeners тем, чтобы убедиться, что, когда кто-то нажимает кнопку «камень», запускается функция, позволяющая компьютеру случайным образом выбрать камень, бумагу или ножницы, а затем создать новый абзац внутри контейнера с объединенным ответом, таким как «Вы выиграли, бумага бьет камень». Все мои ответы, кроме одного, работают.

let results = playerWin rockWin; это единственный ответ, который по какой-то причине не работает. Там должно быть написано: «Ты победил, камень бьет ножницы». Вместо этого он возвращается и говорит, что это была ничья. Я должен console.log был проверить, происходило ли это без eventlistener прилагаемого. По какой-то причине это работает, но когда я хочу, чтобы он печатался при срабатывании, он просто не работает. Можете ли вы помочь мне найти то, чего мне не хватает? Я определенно могу предоставить больше своего кода, если проблема не в том коде, который у меня есть. Я просто не хотел забивать свой пост несвязанным кодом.

 const options = ["rock", "paper", "scissors"];
const rock = options[0];
const paper = options[1];
const scissors = options[2];
const rockWin = "Rock beats scissors.";
const paperWin = "Paper beats rock.";
const scissorsWin = "Scissors beats paper";
const tie = "It was a tie";
const playerWin = "You won! ";
const computerWin = "You lose! ";
const oops = "Please try again";
let computerPoints = 0;
let playerPoints = 0;

//eventListeners to html

const btn = document.querySelectorAll('btn');
const rockbtn = document.querySelector('#rockbtn');
const paperbtn = document.querySelector('#paperbtn');
const scissorsbtn = document.querySelector('#scissorsbtn');
const resultContainer = document.querySelector('#resultContainer')
const resultPara = document.querySelector('#resultPara')
//Computer's choice

function computerPlay(){
let compChoice = options[Math.floor(Math.random() * options.length)];
return compChoice;
}


//One round of the game
    function playRound(playerSelection, computerSelection){
        if (playerSelection === computerSelection){
            let results = tie;
            resultPara.textContent = results;
            console.log(playerSelection,playerPoints);
            console.log(computerSelection, computerPoints);
            return tie;
        }

        else if(playerSelection === rock amp;amp; computerSelection === paper){
            computerPoints = computerPoints   1;
            let results = computerWin   paperWin;
            resultPara.textContent = results;
            console.log(playerSelection,playerPoints);
            console.log(computerSelection,computerPoints);
            return computerWin   paperWin;
        }

        else if(playerSelection === rock amp;amp; computerSelection === scissors){
            playerPoints = playerPoints   1;
            let results = playerWin   rockWin;
            console.log(playerSelection,playerPoints);
            console.log(computerSelection,computerPoints);
            return playerWin   rockWin;
 

Дальше у меня есть мои списки событий.

 paperbtn.addEventListener('click', paperPlay);
scissorsbtn.addEventListener('click', scissorsPlay);

function rockPlay(){
    playRound(rock, computerPlay());
}


function paperPlay(){
    playRound(paper, computerPlay());
}
function scissorsPlay(){
    playRound(scissors, computerPlay());
}


 

Комментарии:

1. вы проигнорировали несколько возможных комбинаций

Ответ №1:

Я точно не знаю, почему он говорит, что это галстук. Вы действительно забыли указать комбо playerSelection === paper , но я не думаю, что именно отсюда возникает указанная вами проблема. В включенных слушателях событий вы забыли один для рока, который должен быть rockbtn.addEventListener('click', rockPlay) . Я не знаю, поможет ли что-либо из этого решить вашу проблему, но это то, что я заметил, посмотрев на то, что вы предоставили. Ниже у меня есть ваша if/else if цепочка, которую вы используете для определения результатов. Я добавил в комбо для playerSelection === paper , и я добавил любые другие заметки, которые я мог придумать. Я надеюсь, что это каким-то образом поможет!

 if (playerSelection === computerSelection){
            let results = tie;
            resultPara.textContent = results;
            console.log(playerSelection,playerPoints);
            console.log(computerSelection, computerPoints);
            return tie;
        }

        else if(playerSelection === rock amp;amp; computerSelection === paper){
            computerPoints  = 1;
            let results = computerWin   paperWin;
            resultPara.textContent = results;
            console.log(playerSelection,playerPoints);
            console.log(computerSelection,computerPoints);
            return results; // use results variable because you can
        }

        else if(playerSelection === rock amp;amp; computerSelection === scissors){
            playerPoints  = 1; // I recommend using the  = operator for this
            let results = playerWin   rockWin;
            console.log(playerSelection,playerPoints);
            console.log(computerSelection,computerPoints);
            return results;

        // adding the combos where playerSelection == paper
        
        else if(playerSelection === paper amp;amp; computerSelection === rock){
            playerPoints  = 1; 
            let results = playerWin   paperWin;
            console.log(playerSelection,playerPoints);
            console.log(computerSelection,computerPoints);
            return results;

        else if(playerSelection === paper amp;amp; computerSelection === scissors){
            computerPoints  = 1;
            let results = computerWin   rockWin;
            console.log(playerSelection,playerPoints);
            console.log(computerSelection,computerPoints);
            return results;