高分不计算-每次0

时间:2018-11-13 10:13:13

标签: javascript jquery

我创建了一个运行良好的简单“ Clickgame”。我要实现的高分是无效的。游戏结束后,最高分始终为0。有人知道问题出在哪里,因为我对Java语言非常陌生?

这里是代码。一切正常,直到highScore功能。由于我对javascript很陌生,所以找不到错误。

let klick = 0;
let timerId = 0;

$("#start").click(function() { //clickfunktion beim starten.
    $("#start").fadeOut();
    $("#welcome").fadeOut();
    $("#time").fadeIn(900);
    $("#clicker").fadeIn();

    var display = document.querySelector('#time'); //referenz auf das Html attribut Time zum anzeigen.
    var dauer = 5;
    startTimer(dauer, display); //legt die zeit fest, und dass die Funktion gestartet wird.
})

function startTimer(dauer, display) {
    let timer = dauer;
    let sekunden;
    timerId = setInterval(function() {
        sekunden = parseInt(timer); //parseInt gibt eine ganze Zahl zurück
        display.textContent = sekunden; // zeigt sekunden-variable
        --timer; //setzt den timer immer einen herab
        if (timer < 0.00) {
            timer = dauer;
            $("#start").fadeIn();
            $("#welcome").fadeIn();
            $("#time").fadeOut();
            $("#clicker").fadeOut();
            $("#clicker").css("margin-top", "10%");
            $("#clicker").css("margin-left", "50%");

            alert("Sauber du hast " + klick + " klicks in 5 Sekunden geschafft!");
            alert('High Score is ' + highScore());

            klick = 0
            clearInterval(timerId);
        } //wenn timer auf 0 ist, wird alles wieder angezeigt und die Interval-Function beendet
    }, 1000); //zahl gibt an, wie oft die Function pro zeit wiederholt wird. Hier eine Sekunde (1000Millisekunden)
};

$("#clicker").click(function() {
    let zufall = Math.floor(Math.random() * 45) + 1 //setzt eine zufällige höhe für den clicker

    klick = klick + 1 //setzt den zähler beim klicken eins hoch
    $("#clicker").css("margin-top", zufall + "%");
    $("#clicker").css("margin-left", zufall + 45 + "%");
})

function highScore(score) {
    var saved = 0;
    try {
        saved = parseFloat(localStorage.highScore);
    } catch (e) {
        saved = 0;
    }
    if (!(typeof score === 'undefined')) {
        try {
            score = parseFloat(score);
        } catch (e) {
            score = 0;
        }
        if (score > saved) {
            saved = score;
            localStorage.highScore = '' + score;
        }
    }
    if (isNaN(saved)) {
        saved = 0;
        localStorage.highScore = '0';
    }
    return saved;
}
<div>
    <span id="time"></span>
</div>
<div id="welcome">Willkommen zu unserem Reaktionsspiel! Wenn du bereit bist, klicke auf "Start"</div>
<button id="start" type="button">Start</button>
<button id="clicker" type="button">KLICK</button>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

1 个答案:

答案 0 :(得分:3)

问题的部分原因是您从未为highScore()函数提供新的高分,因此始终将其设置为0。还要注意,您可以使用null强制提供默认值,而不是try / catch块。试试这个:

function startTimer(dauer, display) {
  // code... 
  alert('High Score is ' + highScore(klick));
  // more code... 
}

function highScore(score) {
  var saved = 0;
  saved = parseFloat(localStorage.getItem('highScore')) || 0;
  score = parseFloat(score) || 0;

  if (score > saved) {
    saved = score;
    localStorage.setItem('highScore', score);
  }
  return saved;
}

Working fiddle