Whack-A-Mole javascript返回并且循环不起作用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Whack-A-Mole javascript返回并且循环不起作用相关的知识,希望对你有一定的参考价值。
我一直在尝试编写Wack-A-Mole,但有一些问题。我目前有两个返回语句,但是当我将stop3和stop4设置为true并重新运行Trigger中的函数时。这是行不通的。另外,我写了diwn两个函数来重复检查stop1和stop2是否为真,如果它们是真的然后运行,但我不知道如何循环它们。我不想要一天,setTimeout不会工作,我不懂回调。
我问的是如何循环2循环函数以及为什么返回语句在函数的stop(s)再次设置为true后不会取消返回。
<!DOCTYPE html>
<html>
<head>
<title>Whack-A-Mole</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<center>
<p>Try to hit the Wack-a-moles!</p>
<button id="start">Click here to start!</button>
<button id="restart">Restart</button>
<button id="pause">Pause</button>
<button id="resume">Resume</button>
<p id= highscore>Highscore: 0 points!</p>
<p id="time"></p>
<div id="game">
<br>
<img src="moleman.png" alt="Please refresh" id="b1">
<img src="moleman2.png" alt="Please refresh" id="bb1">
<img src="moleman.png" alt="Please refresh" id="b2">
<img src="moleman2.png" alt="Please refresh" id="bb2">
<img src="moleman.png" alt="Please refresh" id="b3">
<img src="moleman2.png" alt="Please refresh" id="bb3">
<br>
<img src="moleman.png" alt="Please refresh" id="b4">
<img src="moleman2.png" alt="Please refresh" id="bb4">
<img src="moleman.png" alt="Please refresh" id="b5">
<img src="moleman2.png" alt="Please refresh" id="bb5">
<img src="moleman.png" alt="Please refresh" id="b6">
<img src="moleman2.png" alt="Please refresh" id="bb6">
<br>
<img src="moleman.png" alt="Please refresh" id="b7">
<img src="moleman2.png" alt="Please refresh" id="bb7">
<img src="moleman.png" alt="Please refresh" id="b8">
<img src="moleman2.png" alt="Please refresh" id="bb8">
<img src="moleman.png" alt="Please refresh" id="b9">
<img src="moleman2.png" alt="Please refresh" id="bb9">
</div>
<p>Your score is:</p>
<p id="T">0 points!</p>
<script type= "text/javascript">
document.getElementById("b1").addEventListener("click", Score);
document.getElementById("b2").addEventListener("click", Score);
document.getElementById("b3").addEventListener("click", Score);
document.getElementById("b4").addEventListener("click", Score);
document.getElementById("b5").addEventListener("click", Score);
document.getElementById("b6").addEventListener("click", Score);
document.getElementById("b7").addEventListener("click", Score);
document.getElementById("b8").addEventListener("click", Score);
document.getElementById("b9").addEventListener("click", Score);
document.getElementById("start").addEventListener("click", Start);
document.getElementById("pause").addEventListener("click", Pause);
document.getElementById("resume").addEventListener("click", Resume);
document.getElementById("restart").addEventListener("click", Restart);
var score = 0;
function Score() {
score++;
if(score == 1){
document.getElementById("T").innerHTML = score + ' point!';
} else {
document.getElementById("T").innerHTML = score + ' points!';
}
document.getElementById('b1').style.display = "none";
document.getElementById('bb1').style.display = "inline";
document.getElementById('b2').style.display = "none";
document.getElementById('bb2').style.display = "inline";
document.getElementById('b3').style.display = "none";
document.getElementById('bb3').style.display = "inline";
document.getElementById('b4').style.display = "none";
document.getElementById('bb4').style.display = "inline";
document.getElementById('b5').style.display = "none";
document.getElementById('bb5').style.display = "inline";
document.getElementById('b6').style.display = "none";
document.getElementById('bb6').style.display = "inline";
document.getElementById('b7').style.display = "none";
document.getElementById('bb7').style.display = "inline";
document.getElementById('b8').style.display = "none";
document.getElementById('bb8').style.display = "inline";
document.getElementById('b9').style.display = "none";
document.getElementById('bb9').style.display = "inline";
Highscore();
}
function Score0() {
score = 0;
document.getElementById("T").innerHTML = '0 points!';
}
var highscore = 0;
function Highscore() {
if(score > highscore) {
highscore = score;
}
if(highscore == 1){
document.getElementById("highscore").innerHTML = 'Highscore: ' + highscore + ' point!';
} else {
document.getElementById("highscore").innerHTML = 'Highscore: ' + highscore + ' points!';
}
}
var stopper1;
var stopper3;
var stopper4;
function Trigger() {
document.getElementById('b1').style.display = "inline";
document.getElementById('bb1').style.display = "none";
document.getElementById('b2').style.display = "inline";
document.getElementById('bb2').style.display = "none";
document.getElementById('b3').style.display = "inline";
document.getElementById('bb3').style.display = "none";
document.getElementById('b4').style.display = "inline";
document.getElementById('bb4').style.display = "none";
document.getElementById('b5').style.display = "inline";
document.getElementById('bb5').style.display = "none";
document.getElementById('b6').style.display = "inline";
document.getElementById('bb6').style.display = "none";
document.getElementById('b7').style.display = "inline";
document.getElementById('bb7').style.display = "none";
document.getElementById('b8').style.display = "inline";
document.getElementById('bb8').style.display = "none";
document.getElementById('b9').style.display = "inline";
document.getElementById('bb9').style.display = "none";
if(stopper3 === false) {
return;
}
document.getElementById("b1").style.visibility = "hidden";
document.getElementById("b2").style.visibility = "hidden";
document.getElementById("b3").style.visibility = "hidden";
document.getElementById("b4").style.visibility = "hidden";
document.getElementById("b5").style.visibility = "hidden";
document.getElementById("b6").style.visibility = "hidden";
document.getElementById("b7").style.visibility = "hidden";
document.getElementById("b8").style.visibility = "hidden";
document.getElementById("b9").style.visibility = "hidden";
document.getElementById("bb1").style.visibility = "hidden";
document.getElementById("bb2").style.visibility = "hidden";
document.getElementById("bb3").style.visibility = "hidden";
document.getElementById("bb4").style.visibility = "hidden";
document.getElementById("bb5").style.visibility = "hidden";
document.getElementById("bb6").style.visibility = "hidden";
document.getElementById("bb7").style.visibility = "hidden";
document.getElementById("bb8").style.visibility = "hidden";
document.getElementById("bb9").style.visibility = "hidden";
if(stopper4 === false) {
return;
}
var x = Math.floor((Math.random() * 9) + 1);
if (x == 1) {
document.getElementById("b1").style.visibility = "visible";
document.getElementById("bb1").style.visibility = "visible";
} else if (x == 2){
document.getElementById("b2").style.visibility = "visible";
document.getElementById("bb2").style.visibility = "visible";
} else if (x == 3){
document.getElementById("b3").style.visibility = "visible";
document.getElementById("bb3").style.visibility = "visible";
} else if (x == 4){
document.getElementById("b4").style.visibility = "visible";
document.getElementById("bb4").style.visibility = "visible";
} else if (x == 5){
document.getElementById("b5").style.visibility = "visible";
document.getElementById("bb5").style.visibility = "visible";
} else if (x == 6){
document.getElementById("b6").style.visibility = "visible";
document.getElementById("bb6").style.visibility = "visible";
} else if (x == 7){
document.getElementById("b7").style.visibility = "visible";
document.getElementById("bb7").style.visibility = "visible";
} else if (x == 8){
document.getElementById("b8").style.visibility = "visible";
document.getElementById("bb8").style.visibility = "visible";
} else if (x == 9){
document.getElementById("b9").style.visibility = "visible";
document.getElementById("bb9").style.visibility = "visible";
}
function Cycle1() {
if (stopper1) {
setTimeout(Trigger,1000);
}
}
}
var stopper2;
var showtime = 61;
function Time() {
showtime--;
if(showtime == 1){
document.getElementById('time').innerHTML = showtime + " second left!";
} else {
document.getElementById('time').innerHTML = showtime + " seconds left!";
}
if (showtime < 0) {
document.getElementById('time').innerHTML = "Time's up!";
stopper1 = false;
stopper2 = false;
document.getElementById('pause').style.display = "none";
document.getElementById('resume').style.display = "none";
}
function Cycle2() {
if (stopper2) {
setTimeout(Time,1000);
}
}
}
function Time61() {
showtime = 61;
}
function Start() {
stopper1 = true;
stopper3 = true;
stopper4 = true;
Trigger();
stopper2 = true;
Time();
document.getElementById("start").style.display = "none";
document.getElementById("pause").style.display = "inline";
document.getElementById("restart").style.display = "inline";
document.getElementById("time").style.display = "inline";
}
function Pause() {
document.getElementById('resume').style.display = "inline";
document.getElementById('pause').style.display = "none";
stopper1 = false;
stopper2 = false;
stopper3 = false;
}
function Resume() {
document.getElementById('pause').style.display = "inline";
document.getElementById('resume').style.display = "none";
stopper1 = true;
stopper2 = true;
stopper3 = true;
}
function Restart() {
document.getElementById("start").style.display = "inline";
document.getElementById("pause").style.display = "none";
document.getElementById("resume").style.display = "none";
document.getElementById("restart").style.display = "none";
document.getElementById("time").style.display = "none";
Score0();
Time61();
stopper1 = false;
stopper2 = false;
stopper4 = false;
}
</script>
</center>
</body>
</html>
CSS
:html {
font-size:40px;
}
#time {
}
button#start {
margin-top:-100px;
font-size:24px;
width:300px;
height:100px;
}
button#pause {
display:none;
}
button#resume {
display: none;
}
button#restart {
display: none;
}
img {
width:100px;
height:65px;
}
#b1 {
visibility: hidden;
}
#b2 {
visibility: hidden;
}
#b3 {
visibility: hidden;
}
#b4 {
visibility: hidden;
}
#b5 {
visibility: hidden;
}
#b6 {
visibility: hidden;
}
#b7 {
margin-left:-12px;
visibility: hidden;
}
#b8 {
visibility: hidden;
}
#b9 {
visibility: hidden;
}
#bb1 {
display: none;
visibility: hidden;
}
#bb2 {
display: none;
visibility: hidden;
}
#bb3 {
display: none;
visibility: hidden;
}
#bb4 {
display: none;
visibility: hidden;
}
#bb5 {
display: none;
visibility: hidden;
}
#bb6 {
display: none;
visibility: hidden;
}
#bb7 {
margin-left:-12px;
display: none;
visibility: hidden;
}
#bb8 {
display: none;
visibility: hidden;
}
#bb9 {
display: none;
visibility: hidden;
}
#T {
margin-top:-50px;
text-decoration: underline;
}
答案
返回塞子
我不清楚回报,但有没有理由你从来没有把stopper4
设置为true
?你将stopper4
设置为false
两到三次,但从未设置为true
;
循环功能
这是循环两个Cycle函数的方法:
(function Cycle1() {
if (stopper1) {
setTimeout(Trigger, 1000);
}
})();
请注意此语法与您拥有的内容之间的区别。该语法将立即执行该函数。模式看起来像这样:
(function(){
})();
(请注意,如果需要,您甚至可以删除函数名称 - 代码中不使用或不需要它们)
您可以研究立即调用函数表达式(IIFE)。请在这里找到一个codepen:https://codepen.io/anon/pen/ZrZBLx
您可能会发现这并不能解决所有问题,但您非常非常接近。很好!
以上是关于Whack-A-Mole javascript返回并且循环不起作用的主要内容,如果未能解决你的问题,请参考以下文章