• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[GELÖST] Probleme mit Highscoreeintrag

Tachyon ich habe jetzt alles getrennt gesichert. Und vergleiche jetzt die Versuche nur mit dem Rekord. Mit dem Operator >= nimmt er nur das grösser an aber nicht das gleich. Also wenn die Versuche grösser wie der Rekord sind überschreibt er jetzt nicht mehr den Rekord aber wenn der neue Score gleich dem Rekord ist überschreibt er mit dem neuen Namen,was ja nicht sein dürfte. Da ich in der zweiten if Anweisung überhaupt nichts in die Highscore schreiben lasse. Komisch.
 
Dann lass dir doch mal die Werte in deiner IF-Bedingung ausgeben, die du vergleichst (z.B. mittels alert()).
Sowas in der Art: alert(versuche + " < " + parseInt(div4.textContent, 10) + " ?");
Weil ich vermute, dass du nur glaubst, dass du 2 Zahlen miteinander vergleichst - es aber eine Zahl und Text ist.

Edit: Besser wäre natürlich ein richtiger Debugger ;)
 
Zuletzt bearbeitet von einem Moderator:
Hier ist der Codeabschnitt der nicht funktioniert. Wie gesagt > Vergleich den führt er richtig aus aber bei dem == Vergleich überschreibt er mir den Rekord mit dem neuen Score.

HTML:
if (gz == zz && versuche >= div5.innerHTML) {
        versuche++;
        div2.innerHTML="Sie haben die Zahl richtig getippt!";
        div3.innerHTML="Sie haben " +versuche+ " Versuche gebraucht!";
        location.reload();
        return;
}

Achja im div5 steht der Versucherekord.
 
Zuletzt bearbeitet von einem Moderator:
Aber ich lasse doch die Versuche in div5 schreiben. Und das ist doch eine Zahl. ich kapiers nicht :( . Ich habe den Code doch abgeändert und String und Zahl getrennt. Für die Strings habe ich Extra divs gemacht. Und im sessionStorage ebenfalls getrennt. Und vor allem schreibt er mir ja auch in die Highscore was er ja garnicht dürfte weil ich es wie Du oben im Code sehen kannst, garnicht angegeben habe.
 
Zuletzt bearbeitet von einem Moderator:
Und das ist doch eine Zahl.
In .innerHTML ist immer ein String drin. Wenn du das mit einer Zahl vergleichen willst, musst du ihn mit parseInt() oder parseFloat() in eine Zahl umwandeln.

Aber dein letzter Code ergibt wegen dem location.reload() auch wenig Sinn: warum die Darstellung ändern, wenn du sowieso gleich die Seite neu lädst?

Auch finde ich, dass wir irgendwie im Dunkeln stochern. Hast du keinen Livelink, wo wir uns das Problem ansehen können?


mikdoe: ich habe ausnahmsweise hier und höher mal Code markiert, weil es in diesem Thread sehr um die Syntax Details geht.
 
Zuletzt bearbeitet von einem Moderator:
Hallo kkapsner,

also wenn ich das mit parseInt mache habe ich das gleiche Ergebnis. Geht auch nicht.

Das location.reload() habe ich drin weil das Spiel ja beendet ist wenn die Zahl erraten wurde. Und mit dem wiederladen der Seite starte ich das Spiel neu und erzeuge wieder eine neue Zufallszahl. In meinen Augen hat das schon Sinn weil sich die Darstellung durch das neue laden ja nicht ändert,da ich es ja im sessionStorage gespeichert habe und beim reload wieder reinlade.

Einen Livelink habe ich leider nicht,da ich das Spiel nur lokal auf dem Rechner habe,leider.
 
Zuletzt bearbeitet von einem Moderator:
Aber in dieser if-Abfrage schreibst du doch gar nichts in den sessionStorage...

Kannst du nicht mal den kompletten Code zeigen, wie er jetzt aussieht (am besten nachdem du deine Variablen mal gescheit benannt hast: zz und gz sind komplett aussagelose Namen). Ich habe den Verdacht, dass dein Problem an einer ganz anderen Stelle ist. So ist mir z.B. nicht klar, warum du überhaupt ein reload() brauchst. Alles, was du machen willst, sollte auch ohne reload machbar sein.
 
Hier nochmal der neue überarbeitete Code.

Code:
var minZufallszahl = 1;
var maxZufallszahl = 100;
var zufallszahl = Math.floor(Math.random() * maxZufallszahl + 1);
var versuche = 0;
function Ratespiel() {
       var getippteZahl = document.getElementById("tippfeld").value;
if (getippteZahl == zufallszahl && versuche < rekordVersuche.innerHTML || getippteZahl == zufallszahl && rekordVersuche.innerHTML == "") {
       versuche++;
       textBereich1.innerHTML="Sie haben die Zahl richtig getippt!";
       textBereich2.innerHTML="Sie haben " +versuche+ " Versuche gebraucht!";
       var meinName = prompt("Sie haben einen neuen Rekord aufgestellt! Bitte geben sie ihren Namen ein!");
       rekordName.innerHTML=meinName;
       rekordVersuche.innerHTML=versuche;
       rekordText.innerHTML="Versuche";
       sessionStorage.setItem("speicher1", rekordName.innerHTML=meinName);
       sessionStorage.setItem("speicher2", rekordVersuche.innerHTML=versuche);
       sessionStorage.setItem("speicher3", rekordText.innerHTML="Versuche");
       var speicher1 = sessionStorage.getItem("speicher1");
       var speicher2 = sessionStorage.getItem("speicher2");
       var speicher3 = sessionStorage.getItem("speicher3");
       location.reload();
       return;
}
if (getippteZahl == zufallszahl && versuche >= parseInt(rekordVersuche.textContent,10)) {
        versuche++;
        textBereich1.innerHTML="Sie haben die Zahl richtig getippt!";
        textBereich2.innerHTML="Sie haben " +versuche+ " Versuche gebraucht!";
        location.reload();
        return;
}
else if (getippteZahl == "") {
        textBereich1.innerHTML="Sie haben keine Zahl eingegeben!";
        return;
    }
else if (getippteZahl > zufallszahl) {
        versuche++;
        textBereich1.innerHTML="Die gesuchte Zahl ist kleiner als " + tippfeld.value +"!";
        textBereich2.innerHTML="Dies ist ihr " + versuche + ". Versuch!";
        return;
    }
else { 
        versuche++;
        textBereich1.innerHTML="Die gesuchte Zahl ist grösser als " + tippfeld.value +"!";
        textBereich2.innerHTML="Dies ist ihr " + versuche + ". Versuch!";
        return;
    }
};
 
So hier noch der Html-Code:

Code:
<!DOCTYPE html/>
<html lang="de">
    <head>
        <meta charset="utf-8"/>
        <title>
            Tipp die Zahl
        </title>
        <link href="ratespiel.css" rel="stylesheet"/>
        <script src="ratespiel.js"></script>
    </head>
    <body>
    <header>
        Tipp die Zahl
    </header>
        <strong>
            Rekord:
        </strong>
        <div id="div1">
        <form id="form1">
            <input type="number" id="tippfeld" placeholder="Zahl bis 100 auswählen"/>
            </form>
            <div id="textBereich1">
            </div>
            <button id="button1" onclick="Ratespiel()">
                Tippen
            </button>
             <div id="textBereich2">
        </div>
         </div>
        <div id="rekordName">
        </div>
        <div id="rekordVersuche">
        </div>
        <div id="rekordText">
        </div>
        <script>window.onload=function high() {
                 rekordName.innerHTML = sessionStorage.getItem("speicher1");
                 rekordVersuche.innerHTML = sessionStorage.getItem("speicher2");
                 rekordText.innerHTML = sessionStorage.getItem("speicher3"); 
            };
        </script>
        <footer>
        </footer>
    </body>
</html>
 
OK - ich sehe dein Problem: du vergleichst zuerst und dann erhöhst du erst. Du musst das umdrehen.

Aber dein Code könnte auch eine bessere Qualität haben:
Da ist zuerst die Benennung der Variablen, IDs und sessionStorage-Einträgen. Z.B. "speicher1" sagt doch überhaupt gar nichts aus...
Dann solltest du HTML-Elemente nicht über die automatisch erzeugten globalen Variablen ansprechen. Dieses Feature ist unzuverlässung (wie globale Variablen prinzipiell). Hole dir die Objekte besser mit document.getElementById().
Zu guter letzt vergleichst du immer noch Zahlen mit String (.innerHTML und .value liefern immer einen String zurück). Das kann zu ungewollten Ergebnissen führen:
Code:
alert(2 < "12");
 
kkapsner kannst Du mir gerade mal auf die Sprünge helfen.
Ich stehe gerade auf dem Schlauch.
Welche Stelle oder Stellen meinst Du genau mit Deiner Aussage "OK - ich sehe dein Problem: du vergleichst zuerst und dann erhöhst du erst. Du musst das umdrehen."
 
Hier:
Code:
if (getippteZahl == zufallszahl && versuche < rekordVersuche.innerHTML || getippteZahl == zufallszahl && rekordVersuche.innerHTML == "") {
       versuche++;
 
Zurück
Oben