2017-02-07 2 views
-1

Was ich versuche zu tun ist ein einfaches Ratespiel, wo der Benutzer kann die Zahl ohne Limit, aber wird am Ende bewertet werden, wenn die Zahl richtig geschätzt basierend auf der Anzahl ihrer Vermutungen. Jedoch, mit meinem Code, wenn ich eine Nummer eingeben und drücken Sie die Taste mehrmals den Hinweis wechselt von "Higher" zu "Lower", auch wenn die Nummer nicht geändert wird auch nicht die Nachricht, die angezeigt werden sollte, wenn die Zahl richtig erraten wird zeigt. Hier ist mein Code, ich bin ein Anfänger, also gibt es sicher Fehler im Code und jede Hilfe wird geschätzt.Erraten Spiel in Javascript

<fieldset> 
    <input type="number" id="guess" /> 
    <button onClick="checknum();">Check Number</button> 
</fieldset> 

<fieldset> 
    <p>Your current status:</p> 
    <output id="status_output">You have yet to guess anything.</output> 
</fieldset> 

<script type="text/javascript"> 

    function checknum(){ 

     var randomNumber = Math.floor((Math.random() * 100) + 1); 
     var guessNumber = document.getElementById("guess").value; 
     //var guessNumber = parseInt(guess.value); 
     var statusOutput = document.getElementById('status_output'); 
     var counter = 0;  
     var isguessed = false; 

     do { 
      counter = (counter + 1) 
      if (guessNumber < randomNumber) { 
       statusOutput.value = ("Higher"); 
      } 
      else if (guessNumber > randomNumber) { 
       statusOutput.value = ("Lower"); 
      } 
      else if (guessNumber = randomNumber) { 
       set (isguessed = true()); 
       statusOutput.value = ("Correct" + mark()); 
      } 
     } 
     while (isguessed = false); 
    } 

    function mark(){ 
     if (counter < 10){ 
      statusOutput.value("Excellent"); 
     } 
     else if (counter > 10 && counter <20){ 
      statusOutput.value("Okay"); 
     } 
     else 
      statusOutput.value("Needs Practice"); 
    } 

</script> 
+0

'while (isguessed = false)' sollte 'sein, während (isguissed === false); '(3 ist gleich 1), das gleiche Problem mit all Ihrer letzten if-Anweisung. – Keatinge

+0

Wenn Sie ** statusOutput ** in beiden Funktionen verwenden möchten, sollten Sie die Variable außerhalb beider Funktionen deklarieren, andernfalls ist sie für "mark()" nicht zugänglich. Siehe JavaScript-Verschlüsse https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures – dommmm

+0

Sie verwenden auch zwei Möglichkeiten, um ** statusOutput **, 'statusOutput.value = (" Higher ") Werte zuzuweisen.); 'und' statusOutput.value ("Excellent"); '. Der erste Weg ist richtig; Der zweite Weg ist der 'jquery'-Stil der Zuweisung von Wert und wird nicht mit Vanille Javascript funktionieren. Sie müssen auch keine Klammer um eine Zeichenkette in Ihrer ersten Methode platzieren, dies ist ausreichend 'statusOutput.value =" Höher ";' – dommmm

Antwort

0

In Ihrer Weile, die Sie der Variablen namens isguessed falsch zuweisen. Sie möchten stattdessen while (isguessed === false) tun. Diese überprüft, ob isguessed auf false gesetzt ist

isguessed = false: ordnet die Zugriffe auf Variablen isguessed auf false

isguessed === false: ein boolescher Ausdruck return true oder false