Whack-A-Mole javascript返回并且循环不起作用

问题描述 投票:0回答:1

我一直在尝试编写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;
}
javascript html css
1个回答
0
投票

返回塞子

我不清楚回报,但有没有理由你从来没有把stopper4设置为true?你将stopper4设置为false两到三次,但从未设置为true;

循环功能

这是循环两个Cycle函数的方法:

  (function Cycle1() {
    if (stopper1) {
      setTimeout(Trigger, 1000);
    }
  })();

请注意此语法与您拥有的内容之间的区别。该语法将立即执行该函数。模式看起来像这样:

(function(){

})();

(请注意,如果需要,您甚至可以删除函数名称 - 代码中不使用或不需要它们)

您可以研究立即调用函数表达式(IIFE)。请在这里找到一个codepen:https://codepen.io/anon/pen/ZrZBLx

您可能会发现这并不能解决所有问题,但您非常非常接近。很好!

© www.soinside.com 2019 - 2024. All rights reserved.