m3c
m3c

Reputation: 31

Javascript small game

Right now I am learning some Javascript but got many problems right now since my skills are low. I need some help with several problems in this code.

I am trying to write a game called "hit the fish". It has a timer, score and onclick. Onlclick the fish should disappear and 1 point will be added in the score. There is a timer limit of 60 seconds.

Here is the whole code.

<html>  
<head>  
    <title>  
        Hit the fish!
    </title>  
    <style>
        table{
            margin-left: auto;
            margin-right: auto;
            width: 70%;
            height: 90%;
            background-color:#66ff00;
        }
        #playground input{
            position: inherit;
            height: 100px;
            width: 100px;
            margin-left: 20px;
            margin-right: 20px;
            margin-bottom: 20px;
        }
        #input {
            height:40px;
        }
        #area {
            background-color:#888;
            position:absolute;
            left:0px;
            right:0px;
            top:50px;
            bottom:0px;
        }
        #area button {
            width:150px;
            height:30px;
            position:absolute;
        }
        .red {
            color:red;
        }

    </style>

    <script language="Javascript">
        function one () {
            document.play.one.value="";
            // get the counter element
            var score = document.getElementById("score");
            // get it's value
            var value = parseInt(score.innerHTML);
            // increase it
            value = value + 1;
            // write the new value back
            score.innerHTML=value;
        }

        function two () {
            document.play.two.value="";
            // get the counter element
            var score = document.getElementById("score");
            // get it's value
            var value = parseInt(score.innerHTML);
            // increase it
            value = value + 1;
            // write the new value back
            score.innerHTML=value;
        }

        function three () {
            document.play.three.value="";
            // get the counter element
            var score = document.getElementById("score");
            // get it's value
            var value = parseInt(score.innerHTML);
            // increase it
            value = value + 1;
            // write the new value back
            score.innerHTML=value;
        }

        function four () {
            document.play.four.value="";
            // get the counter element
            var score = document.getElementById("score");
            // get it's value
            var value = parseInt(score.innerHTML);
            // increase it
            value = value + 1;
            // write the new value back
            score.innerHTML=value;
        }

        function five () {
            document.play.five.value="";
            // get the counter element
            var score = document.getElementById("score");
            // get it's value
            var value = parseInt(score.innerHTML);
            // increase it
            value = value + 1;
            // write the new value back
            score.innerHTML=value;

        }

        function six () {
            document.play.six.value="";
            // get the counter element
            var score = document.getElementById("score");
            // get it's value
            var value = parseInt(score.innerHTML);
            // increase it
            value = value + 1;
            // write the new value back
            score.innerHTML=value;
        }

        function seven () {
            document.play.seven.value="";
            // get the counter element
            var score = document.getElementById("score");
            // get it's value
            var value = parseInt(score.innerHTML);
            // increase it
            value = value + 1;
            // write the new value back
            score.innerHTML=value;
        }

        function eight () {
            document.play.eight.value="";
            // get the counter element
            var score = document.getElementById("score");
            // get it's value
            var value = parseInt(score.innerHTML);
            // increase it
            value = value + 1;
            // write the new value back
            score.innerHTML=value;
        }

        function nine () {
            document.play.nine.value="";
            // get the counter element
            var score = document.getElementById("score");
            // get it's value
            var value = parseInt(score.innerHTML);
            // increase it
            value = value + 1;
            // write the new value back
            score.innerHTML=value;
        }


        function count()
        {         
            stop();
            // get the counter element
            var counter = document.getElementById("counter");
            // get it's value
            var value = parseInt(counter.innerHTML);
            // increase it
            value = value + 1;
            // write the new value back
            counter.innerHTML=value;
            // limitation
            if(value===60){
                alert("Time Out!");
                clearInterval(countTimer);
                document.getElementById("counter").innerHTML="0";
                document.getElementById("score").innerHTML="0";
            }
        }

        function start () {
            stop();
            var countTimer = setInterval("count()",1000);
            document.play.four.value=">(  °3°)";
            document.play.three.value=">(  °3°)"; 
            setTimeout("nextone ()");
            var score = document.getElementById("score");
        }
        function score(){
            // get the counter element
            var score = document.getElementById("score");
            // get it's value
            var value = parseInt(score.innerHTML);
            // increase it
            value = value + 1;
            // write the new value back
            score.innerHTML=value;
        }
        function nextone () {
            document.play.four.value="";
            document.play.five.value=">(  °3°)"; 

            setTimeout("nexttwo ()",400);
        }

        function nexttwo () {
            document.play.three.value=""; 
            setTimeout("nextthree()",400);
        }

        function nextthree () {
            document.play.seven.value=">(  °3°)";
            document.play.one.value=">(  °3°)";
            document.play.six.value=">(  °3°)"; 
            setTimeout("nextfour ()",700);
        }

        function nextfour () {
            document.play.one.value="";
            document.play.six.value="";
            document.play.two.value=">(  °3°)"; 
            setTimeout("nextfive ()",700);
        }

        function nextfive () {
            document.play.seven.value="";
            document.play.two.value="";
            document.play.four.value=">(  °3°)"; 
            setTimeout("nextsix ()",800);
        }

        function nextsix () {
            document.play.eight.value=">(  °3°)";
            document.play.two.value=">(  °3°)"; 
            setTimeout("nextseven ()",700);
        }

        function nextseven () {
            document.play.eight.value="";
            document.play.five.value=">(  °3°)"; 
            setTimeout("nexteight ()",400);
        }

        function nexteight () {
            document.play.nine.value=">(  °3°)"
            document.play.four.value=">(  °3°)"; 
            setTimeout("nextnine ()",500);
        }

        function nextnine () {
            document.play.five.value="";
            document.play.four.value="";
            document.play.one.value=">(  °3°)"; 
            setTimeout("nextten ()",200);
        }

        function nextten () {
            document.play.three.value=">(  °3°)";
            document.play.six.value=">(  °3°)"; 
            setTimeout("nexteleven ()",600);
        }

        function nexteleven () {
            document.play.one.value="";
            document.play.seven.value=">(  °3°)"; 
            setTimeout("nexttwelve ()",500);
        }

        function nexttwelve () {
            document.play.two.value=">(  °3°)";
            document.play.nine.value=">(  °3°)"; 
            setTimeout("nextthirteen ()",700);
        }

        function nextthirteen () {
            document.play.one.value=">(  °3°)";
            document.play.nine.value="";
            document.play.seven.value=""; 
            setTimeout("start ()",600);
        }

        function stop () {
            clearInterval(countTimer);
            document.play.one.value="";
            document.play.two.value="";
            document.play.three.value="";
            document.play.four.value="";
            document.play.five.value="";
            document.play.six.value="";
            document.play.seven.value="";
            document.play.eight.value="";
            document.play.nine.value="";
        }
        function reset()
        {
            document.getElementById("counter").innerHTML="0";
            document.getElementById("score").innerHTML="0";
        }

        // get the counter element
        var score = document.getElementById("score");
        // get it's value
        var value = parseInt(score.innerHTML);
        // increase it
        value = value + 1;
        // write the new value back
        score.innerHTML=value;


    </script> 
</head>  

<body>
    <div id="input">
        <button onclick="start()">start</button>
        <button onclick="stop()">stop</button>
        <button onclick="reset()">reset</button>
        <div style="font-size:10em" id="counter">0</div><br>
        <p>Your score:</p><div style="font-size:5em" id="score">0</div>
        <script>
            var countTimer = setInterval('count()',1000);
        </script>
    </div>
    <div id="playground">
        <table border=100 cellpadding=0 cellspacing=0>
            <tr>
                <td>
                    <form name="play">
                        <center>  
                            <INPUT TYPE="button" NAME="one" OnClick="one ()" id="one" value="      ">  
                            <INPUT TYPE="button" NAME="two" OnClick="two ()" id="two" value="      ">  
                            <INPUT TYPE="button" NAME="three" OnClick="three ()" id="three" value="      ">
                            <br>  
                            <INPUT TYPE="button" NAME="four" OnClick="four ()" id="four" value="      ">  
                            <INPUT TYPE="button" NAME="five" OnClick="five ()" id="five" value="      ">  
                            <INPUT TYPE="button" NAME="six" OnClick="six ()" id="six" value="      ">
                            <br>  
                            <INPUT TYPE="button" NAME="seven" OnClick="seven ()" id="seven" value="      ">  
                            <INPUT TYPE="button" NAME="eight" OnClick="eight ()" id="eight" value="      ">  
                            <INPUT TYPE="button" NAME="nine" OnClick="nine ()" id="ten" value="      ">
                            <br>
                            </td>
                            </tr>
                            </table>  
                            </div>
                            </body>  
                            </html>

The problem is the counter goes too fast after 20 - 30, after click the button the fish doesn't disappear and no points are added on score.

Upvotes: 2

Views: 1932

Answers (1)

Stuart
Stuart

Reputation: 9858

In no particular order...

(1) The problems with the counter are due to the way you call it and where you store the countTimer variable. Because you want several functions to be able to access countTimer, you should declare it in a way they can all access it; the simplest way is for it to be a global variable, which you can do just by having

var countTimer;

at the top of the script, and not using var when referring to countTimer elsewhere. You call the function start from the function nextThirteen, and start sets the timer again. What this does is actually set a new timer on top of the old one, which is why the count appears to speed up.

(2) Your html is also not valid which may cause some problems; make sure you close the form and center tags. (You are not supposed to use the center tag any more, anyway).

(3) Your code is in the head but most of it runs straight away, before the page has loaded. So the following line:

var score = document.getElementById("score");

(outside of any of the functions) causes an error because the element score has not been written yet. The simplest way to avoid this is to put your script at the end of the body of the page.

(4) The functions one, two, three need to have different names from the inputs in the form. That is why none of the buttons work.

Some general points as you learn more:

  • avoid repetition. There's no need for all the one, two, three functions etc. You could use a loop or a single event handler that finds out which button has been pressed.
  • use your browser's console to check for errors that are being produced. Your code was causing the error object is not a function, and searching for that is how I found out why the buttons were not working.
  • read about variable scope

Upvotes: 2

Related Questions