计分器无法正确计算分数

时间:2019-01-19 17:50:33

标签: javascript

首先,我不得不说我对Javascript和程序设计非常陌生,因此该问题很可能与我(当前)的知识不足有关。

我尝试制作一个简单的游戏,其中计算机认为一个介于0到10之间的随机数,并且用户尝试通过在文本字段中键入自己的猜测来猜测该数字。如果该数字正确,则用户将收到消息,他们猜测正确的数字;否则,将收到消息,表明数字不正确。

第一部分按预期工作。问题是分数计数器。

这是我为计数器编写的HTML代码的一部分:

<p id="points">Number of points: </p><span id="points-number">0</span>

这是我在JS中编写的代码:

        <script type="text/javascript">
        document.getElementById("instructions").onclick = function() {
            alert("You need to guess the number that your computer imagined. Viable numbers are between 0 and 10. Every time you guess the number, score increases by 1 and every time you miss, you will lose a point")
        } 

        document.getElementById("guess-number").onclick = function() {

            var ourNumber;
            var randomNumber;
            var pointsNumber = 0;

            randomNumber = Math.floor(Math.random() * 10);

            ourNumber = document.getElementById("input").value;



            if (ourNumber == randomNumber) {
                alert("The numbers are equal!");


                 pointsNumber+=1;
                var result = document.getElementById("points-number");
                result.innerHTML = pointsNumber;



            } else {
                alert("The numbers are not equal! The number that your computer imagined is:" + randomNumber + ", and our number is: " + ourNumber);

                pointsNumber-=1;
                var result = document.getElementById("points-number");
                result.innerHTML = pointsNumber;



            }







        }


        </script>

现在是问题所在……每当用户错过数字时,点数将变为-1。但是,如果他第二次错过比赛,则停留在-1,不会进一步减少。用户猜出数字后,该值从-1变为1。但是,如果他再次猜到,该值不会增加到2,而是保持为1。然后,他错过时,它跳回到-1,反之亦然

所以,我认为我在这里缺少什么,我应该怎么做才能使计数器按预期工作?换句话说,要使用户每次猜测随机数时分数都增加1,而每次用户弄错随机数时分数都降低1?

谢谢。

2 个答案:

答案 0 :(得分:1)

您需要在函数外部声明pointsNumber

var pointsNumber = 0;
document.getElementById("guess-number").onclick = function() {

        var ourNumber;
        var randomNumber;

否则,每次调用onclick函数时,都要声明pointsNumber并将其设置为0。然后根据if / else的不同,它会变为+1或-1。解释您正在观察的行为。

答案 1 :(得分:1)

基本上,您总是从

开始
var pointsNumber = 0;

相反,您应该使用:

var pointsNumber = + document.getElementById("points-number").innerHTML;

奖金: 是的,而不是:

randomNumber = Math.floor(Math.random() * 10);

使用:

randomNumber = Math.floor(Math.random() * 11);

因为Math.random()位于0(含)和1(排他)之间,所以永远不会达到10。

查看更多有关Math.random()的信息:https://www.w3schools.com/js/js_random.asp