#javascript
#javascript
Вопрос:
Я создаю одну игру, в которую могут играть два игрока, поэтому, если один игрок заканчивает свой ход, тот же прослушиватель событий должен быть присоединен к игроку tow, но это не переключение между двумя игроками.
В моем коде я создал одну переменную ‘changeTurn’, которая хранит логическое значение хода игрока, если true, то игрок один ход, а если false, то игрок два хода. но при условии, что значение changeTurn равно false, все равно выполняется ‘If (changeTurn === true)’, которое не должно выполняться. может кто-нибудь помочь мне с этим, пожалуйста, почему это так?
GAME RULES:
- The game has 2 players, playing in rounds
- In each turn, a player rolls a dice as many times as he whishes. Each
result get added to his ROUND score
- BUT, if the player rolls a 1, all his ROUND score gets lost. After that,
it's the next player's turn
- The player can choose to 'Hold', which means that his ROUND score gets
added to his GLBAL score. After that, it's the next player's turn
- The first player to reach 100 points on GLOBAL score wins the game.
*/
const rollDice = document.querySelector('.btn-roll');
const diceImage = document.querySelector('.dice');
const hold = document.querySelector('.btn-hold');
const newGame = document.querySelector('.btn-new');
let changeTurn = true;
let randomNumber = 0;
let loop = true;
let totalScore = 0;
document.querySelector('#score-0').textContent = totalScore;
document.querySelector('#score-1').textContent = totalScore;
let currentScore = 0;
document.querySelector('#current-0').textContent = currentScore;
document.querySelector('#current-1').textContent = currentScore;
//while(loop){
//newGame.addEventListener('click',function(){
// loop = false;
//})
if(changeTurn){
rollDice.addEventListener('click',function(){
randomNumber = Math.floor((Math.random()*6) 1);
for(i = 1; i <=6 ; i ){ // selecting image by changing src name
console.log(randomNumber);
if(randomNumber === i ){
diceImage.setAttribute('src',`dice-${i}.png`);
break;
}
}
currentScore = randomNumber;
document.querySelector('#current-0').textContent = currentScore; // adding current score to player-1
if(randomNumber === 1){
document.querySelector('#current-0').textContent = 0; //reseting player-1 current score cotent to 0
currentScore = 0; //reseting current score variable to 0
changeTurn = false;
}
})
hold.addEventListener('click',function(){
totalScore = currentScore; // adding total score to toatal variable
document.querySelector('#score-0').textContent = totalScore; // adding total to score content
document.querySelector('#current-0').textContent = 0; // reseting current score content to 0
currentScore = 0; // resetting current score variable
changeTurn = false; //changning turn
})
}
//============================================================================
if(!changeTurn){
rollDice.addEventListener('click',function(){
randomNumber = Math.floor((Math.random()*6) 1);
for(i = 1; i <=6 ; i ){ // selecting image by changing src name
console.log(randomNumber);
if(randomNumber === i ){
diceImage.setAttribute('src',`dice-${i}.png`);
break;
}
}
currentScore = randomNumber;
document.querySelector('#current-1').textContent = currentScore;
if(randomNumber === 1){
document.querySelector('#current-1').textContent = 0;
currentScore = 0;
changeTurn = true;
}
})
hold.addEventListener('click',function(){
console.log('hi')
totalScore = currentScore;
document.querySelector('#score-1').textContent = totalScore;
document.querySelector('#current-1').textContent = 0;
currentScore = 0;
changeTurn = true;
})
}
Ответ №1:
Проблема в том, что у вас есть проверка во время настройки прослушивателя событий, но обратный вызов прослушивателя событий не выполняет никаких проверок, следовательно, запускаются оба события. Вы могли бы изменить это на:
rollDice.addEventListener('click',function(){
randomNumber = Math.floor((Math.random()*6) 1);
for(i = 1; i <=6 ; i ){ // selecting image by changing src name
console.log(randomNumber);
if(randomNumber === i ){
diceImage.setAttribute('src',`dice-${i}.png`);
break;
}
}
var id = changeTurn? 0: 1;
currentScore = randomNumber;
document.querySelector(`#current-${id}`).textContent = currentScore; // adding current score to player-1
if(randomNumber === 1){
document.querySelector(`#current-${id}`).textContent = 0; //reseting player-1 current score content to 0
currentScore = 0; //reseting current score variable to 0
changeTurn = !changeTurn;
}
})
hold.addEventListener('click',function(){
var id = changeTurn? 0: 1;
totalScore = currentScore; // adding total score to total variable
document.querySelector(`#score-${id}`).textContent = totalScore; // adding total to score content
document.querySelector(`#current-${id}`).textContent = 0; // reseting current score content to 0
currentScore = 0; // resetting current score variable
changeTurn = !changeTurn; //changing turn
})