2017-04-05 3 views
0

Ich versuche, ein Ratespiel zu erstellen, das eine Zufallszahl generiert, die der Benutzer erraten wird. Dieses Ratespiel muss eine Art Schleife benutzen. Im Moment ist es in einer Funktion eingeschlossen, die aufgerufen wird, wenn der Benutzer auf eine Schaltfläche klickt, und einem Booleschen Wert, der die Anzahl der möglichen Annahmen des Benutzers begrenzt.Ersetzen einer bedingten Anweisung mit einer Schleife

Nach meinem Verständnis läuft eine Schleife ohne anzuhalten, bis ihre Bedingungen erfüllt sind. Wenn ich in dieser Situation eine Schleife hätte, wäre die letzte Ausgabe die letzte Iteration der Schleife. NumGuesses würde einen Wert von 6 haben, weil das war, als die Schleife aufhörte. Wie kann ich die Bedingung durch eine Schleife ersetzen und trotzdem funktionieren lassen?

//Declare variables and constants 
var guessesLeft;        //number of guesses the user has left 
var userGuess;        //user's guess 
var highLimit = 1000;       //high parameter 
var numGuesses = 1;       //number of guesess the user has guessed 
var allowedGuesses = 6;      //number of allowed guesses 
var NL = "\n";        //new line 

    //function to be called when the user presses Submit Guess 
    function guessingGame() { 
     //random number that is generated 
     var randNum = Math.floor(Math.random() * highLimit + 1); 
     if (numGuesses <= allowedGuesses) { 
     userGuess = prompt("Enter a number between 1 and " + highLimit + ": " , "") 
     userGuess = parseInt(userGuess); 
     guessesLeft = (allowedGuesses - numGuesses) + " guesses left."; 
      //If userGuess is in the specified parameters 
      //If userGuess is larger than 1 and smaller than the higher parameter 
      if ((userGuess > 1) && (userGuess < highLimit)) { 

       //If userGuess does not equal randNum 
       if (userGuess !== randNum) { 

        //If userGuess is too low 
        if (userGuess < randNum) { 
         //output 
         document.numForm.gameResults.value = "You guessed too low! Please guess again. " + NL + "Your current number of guesses: " + numGuesses + NL + "You have " + guessesLeft; 
        } 
        //If userGuess is too high 
        else if (userGuess > randNum) { 
         document.numForm.gameResults.value = "You guessed too high! Please guess again. " + NL + "Your current number of guesses: " + numGuesses + NL + "You have " + guessesLeft; 
        }//end if      
       } 
       else { 
        //If userGuess is correct 
        document.numForm.gameResults.value = "You guessed correctly!"; 
       }//end if 
      } 

      else { 
       document.numForm.gameResults.value = "Your guess was out of the specified parameters. Please try again. " + NL + "Your current number of guesses: " + numGuesses + NL + "You currently have " + guessesLeft; 
        //user may have entered their guess wrong 
        numGuesses--; 
      }//end if 
      //add to number of guesses so the program stops when it reaches the allowed number 
      numGuesses++; 
     }//end outer if statement 
     return false; 
    }//end guessingGame() 
+0

Hallo, könnten Sie weitere Informationen geben, wie Sie das Spiel arbeiten möchten, dh wie spielst du das Spiel? Sie Code ist ordentlich genug und Sie erklären es gut .. aber ich habe Mühe, das Ziel zu verstehen. – Seabizkit

Antwort

0

Es klingt wie das Problem Aussage erwartet Sie für eine Benutzereingabe zur Auslösung einer Funktion als Reaktion auf ein DOM-Ereignis im Gegensatz zu blockieren warten.

Werfen Sie einen Blick auf window.prompt

dies in einer Schleife Platzieren der Schleife würde blockiert, bis der Benutzer reagiert.

0

Mit prompt() wie retrohacker und einer do {} while() Schleife vorgeschlagen, der folgende Code diese in Aktion zeigt:

var minNumber = 1;  
 
var maxNumber = 2; 
 
var guessesLeft = 3; 
 

 
var numberToBeGuessed = minNumber + 
 
    (Math.random() * (maxNumber - minNumber + 1) | 0); 
 
var succeeded; 
 
var message = 'Make a guess'; 
 

 
do { 
 
    if (prompt(message) == numberToBeGuessed) { 
 
    alert('Correct, the number is ' + numberToBeGuessed); 
 
    succeeded = true; 
 
    } else { 
 
    guessesLeft--; 
 
    message = 'Try again, ' + 
 
     guessesLeft + 
 
     ' guess' + (guessesLeft > 1 ? 'es' : '') + 
 
     ' left'; 
 
    } 
 
} while (!succeeded && guessesLeft)

Verwandte Themen