2016-09-29 8 views
0

Ich erstelle ein kleines Mini-Spiel von Hangman. Der Benutzer hat 10 Chancen zu erraten, aber nur 5 Leben.Java: Hangman-Spiel, 10 Chancen, aber nur 5 Leben

Die App funktioniert, wird aber nach dem 5. Leben weitergehen, obwohl ich gehofft hatte, es würde den Spieler aus dieser Schleife werfen.

Die instanziierbare Klasse (Hangman.java) funktioniert ohne Probleme.

Das geheime Wort ist "julie" wie in der instanziierbaren Klasse beschrieben.

Meine App-Klasse:

import javax.swing.JOptionPane; 

    public class HangmanApp { 

    public static void main(String args[]) { 
    String input, secret, result, playAgain; 
    char guess; 
    int i, j, k, lives; 

    Hangman myHangman = new Hangman(); 

    do{ 
     JOptionPane.showMessageDialog(null, "Hello, welcome to Hangman! You have 10 chances but only 5 lives! Best of luck"); 

     lives = 5; 

     for (j = 10; j > 0; j--) { 

      while (lives >= 0){ 
       input = JOptionPane.showInputDialog(null, "Please enter a letter"); 
       guess = input.charAt(0); 

       //process 
       myHangman.setGuess(guess); 
       myHangman.compute(); 
       result = myHangman.getResult(); 

       if ((input.charAt(0) == 'j') || (input.charAt(0) == 'u') || (input.charAt(0) == 'l') || (input.charAt(0) == 'i') || (input.charAt(0) == 'e')) { 
        JOptionPane.showMessageDialog(null, "That letter is in the word! Current correct letters: " + result + "."); 
       } else { 
        lives--; 
        JOptionPane.showMessageDialog(null, "Sorry, that letter is not there. Current correct letters: " + result + "."); 
       } 

       //output 
       //JOptionPane.showMessageDialog(null, "Current correct letters: " + result); 

      }; 
      lives = -1; 
     } 
     result = myHangman.getResult(); 
     secret = myHangman.getSecret(); 

     if (secret.equals(result)) { 
      JOptionPane.showMessageDialog(null, "Congratulations, you got it!! The word was " + secret + "."); 
     } else { 
      JOptionPane.showMessageDialog(null, "Sorry, you didn't get it, better look next time! The word was " + secret + "."); 
     } 

     playAgain = JOptionPane.showInputDialog("Do you want to play again? yes/no"); 

    }while (playAgain.equals("yes")); 
} 

}

+0

Haben Sie Thro laufen ugh deinen Code mit einem Debugger? – Thomas

+0

Es ist nicht wirklich klar, was Sie mit "10 Chancen" meinen. Wie bereits geschrieben, sobald "Leben" -1 erreicht, unterbricht es die Schleife, und dann läuft die 'for (j = 10' Schleife noch 9 mal, tut nichts jedes Mal. Wirklich, diese for Schleife macht nichts. –

+0

Ja, ran es ist ein Debugger (mit NetBeams). Keine Fehler. 10 Chancen, 5 Leben bedeutet, dass der Spieler eine maximale Chance von 10 Runden hat, vorausgesetzt, dass jede Annahme richtig zu bekommen. Überall in diesen 10 Chancen, wenn alle Leben verloren sind, Das Spiel endet –

Antwort

3

Versuchen Sie, die folgende Änderung:

while (lives > 0){ 

Sie bei 5 beginnen und dann nach unten gehen zu 4 3 2 1 und 0 mit der Änderung wird dies bei 0 stoppen 0

+0

Ich habe beide Do-Loops und While-Loops ausprobiert, aber keiner funktioniert. Aber danke.;) –

0
// don't need two nested cycles, you can do it in a single one 
    // The cycle exits if any one of the conditions fail 
    // max attempts exhausted or all the lives are lost 
    // -------------------v  v------------------------    
    for (j = 10, lives=5; j > 0 && lives > 0 ; j--) { 
     // -------------------------------------^ 
     // j - the number of attempt is decremented for each trial, 
     // no matter if successful or not 

     //... the rest of cycle logic, which will decrement the lives 
     // only in cases of unsuccessful attempts 

    } 
+0

Bitte erklären Sie Ihre Antwort, anstatt nur etwas Code zu verschwenden. –

+0

Funktioniert perfekt, genau das, was ich brauchte, ich verstehe, wo ich falsch gelaufen bin. Vielen Dank. –

+0

Erkläre meine Antwort? Ich verstehe nicht, was du meinst. Ich habe gesagt, was mit dem Code nicht stimmt und was ich darüber hinaus versuchen wollte. ;) –

Verwandte Themen