#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;