Некоторая помощь для JS-игры для нереста, обработки результатов и переключения звуков.
Я работаю над игрой для изучения JavaScript и у меня есть некоторые проблемы:
1.я хочу удалить 1 очко из счета игрока, когда игрок пропустил зомби. Я попробовал что-то с функцией score, которая вызывается после settimeout (), но она не работает.
2.я хочу добавить звуковой эффект, когда игрок нажимает кнопку. Этот звуковой эффект изменится (как и изображение оружия), когда счет достигнет 7, а затем 3. Я не могу добиться того и другого, и теперь игра сломана (не могу ее запустить).
3.с функцией всплывающего окна зомби. Я хочу, чтобы зомби не мог появиться в том же кадре, что и предыдущий (потому что, когда это происходит, игрок на самом деле не осознает, что это новый зомби). Я также хочу предотвратить появление на экране более одного зомби (что происходит через несколько секунд).
Небольшая схема, чтобы помочь вам понять
window.onload = build; /* Variables*/ var zombie; var timer; var invasion; var score = 10; var sound1 = new Audio("sound/magnum.mp3"); var sound2 = new Audio("sound/crossbow.mp3"); var sound3 = new Audio("sound/baseball-bat.mp3"); /* Var survived = a time to count the time survived before score = 0*/ document.querySelector('.score__counter__number').innerHTML = 10; var kill = true; /* Add event listener 'click' on gameboard__zombie, call hitzombie() which is set to false */ function build() { zombie = document.querySelectorAll('.gameboard__zombie'); for (var x = 0; x < zombie.length; x++) { zombie[x].addEventListener('click', hitzombie, false); } } /* Launch the game */ function start() { popup(); } /* Set kill to true, a random window will create a zombie in a random time. The zombie disappears, call hidezombie(), also in a random time */ function popup() { kill = true; invasion = zombie[Math.floor(Math.random() * zombie.length)]; invasion.classList.add('zombie--popup'); var zTime = 2000; timer = setTimeout(hidezombie, zTime); } /* The class which set opacity to 1 in css is removed, and popup() is called to create a new zombie */ function hidezombie() { if (score >= 1) { invasion.classList.remove('zombie--popup'); popup(); score(); weapon(); } else { end(); } } /* Reduce score -1 when a zombie disappears.*/ function score() { score--; document.querySelector('.score__counter__number').innerHTML = score; } /* Remove the zombie, kill = false to avoid multiply clicks, score -1, call popup() to create a new zombie */ function hitzombie() { if (score > 7) { sound1.play(); event.target.classList.remove('zombie--popup'); if (kill) { kill = false; score = score; } } else if (score <= 7) { sound2.play(); event.target.classList.remove('zombie--popup'); if (kill) { kill = false; score = score; } } else if (score >= 3 || score >= 1) { sound3.play(); event.target.classList.remove('zombie--popup'); if (kill) { kill = false; score = score; } popup(); } else { end(); } /* Switch weapon image depending on the score */ function weapon() { if (score == 7) { document.getElementsById('weapon__image').src = "images/DarylCrossbow.png"; } if (score == 3) { document.getElementsById('weapon__image').src = "images/NeganBat.png"; } } /* End the game */ function end() { invasion.classList.remove('zombie--popup'); timeSurvived = document.querySelector('.score__survive'); timeSurvived.style.fontSize = "5rem"; var blinkSpeed = 3000; var blinkInterval = setInterval(function () { var ele = document.querySelector('.score__start'); ele.style.visibility = (ele.style.visibility == 'hidden' ? '' : 'hidden'); }, blinkSpeed); }
Спасибо Вам за вашу помощь ;)
Что я уже пробовал:
Я пытался в течение нескольких часов найти решение и действительно нуждался в некоторых подсказках, чтобы найти решение самостоятельно.