2017-06-28 3 views
0

Ich erstelle ein Hangman-Spiel in Java. Ich habe keine Ahnung, wie ich es überprüfe und ersetze. Alles funktioniert, das String-Wort ist korrekt und das Spielbrett ist in Ordnung. So gibt mir das Spielbrett beispielsweise die Länge eines Wortes als "_ _ _ _ _".Hangman prüfen, ob String im Wort enthalten ist und ersetzen?

Einfach meine Frage ist, wie ich bekomme ich die Position von String-Wort durch die Benutzereingabe überprüft und gehen Sie zu Battleboard und ändern Sie die "Unterstreichung (_)" mit dem Wort, das in der Position finden.

public void gameStart(int topic) { 
    String[] wordList = this.wordList.chooseTopicArray(topic); 
    String word = this.wordList.pickRandom(wordList); 
    String gameboard = spielbrettvorbereiten(word); 
    Scanner userInput = new Scanner(System.in); 

    for (int i = 0; i <= 16;) { 

    System.out.println(gameboard); 
    System.out.print("Write a letter "); 

    String input = userInput.next(); 
    int length = input.length(); 
    boolean isTrue = letters.errateWortEingabe(length); 

    if (isTrue == true) { 
    if (word.contains(input)) { 

    } 


    } else { 
     i = i - 1; 
    } 


    i++; 
    } 

Ich hoffe, euch kann mir helfen ich so hart bin struggeling.

Mit freundlichen Grüßen MichaelDev

+0

Ihre Frage sehr unklar ist. Kannst du genauer sein? – shmosel

+0

Vielleicht ist das das Problem 'if (isTrue == true)'? – ACV

+0

Ich denke, er bezieht sich auf die Hauptlogik, die das Wort anzeigt, zum Beispiel als _ _ _ _ e _ _ und erinnert sich an die richtigen Zeichen. – Zabuza

Antwort

1

Es gibt mehrere Möglichkeiten, um Henkers zu implementieren. Ich werde Ihnen einen Ansatz zeigen, der leicht verständlich ist und keinen Fokus auf Effizienz legt.

Sie müssen das letzte Wort kennen und alle Zeichen erinnern, dass der Benutzer erraten hat:

final String word = ... // the random word 
final Set<Character> correctChars = new HashSet<>(); 
final Set<Character> incorrectChars = new HashSet<>(); 

Nun, wenn ein Benutzer errät ein Zeichen sollten Sie die Daten-Strukturen aktualisieren:

final char userGuess = ... // input from the user 
if (correctChars.contains(userGuess) || incorrectChars.contains(userGuess) { 
    System.out.println("You guessed that already!"); 
} else if (word.contains(userGuess)) { 
    correctChars.add(userGuess); 
    System.out.println("Correct!"); 
} else { 
    incorrectChars.add(userGuess); 
    System.out.println("Incorrect!"); 
} 

Und zuletzt brauchen Sie etwas, das das Wort als _ _ _ _ und so weiter druckt. Wir tun dies, indem alle Zeichen ersetzt, die nicht in correctChars enthalten sind:

String replacePattern = "(?i)[^"; 
for (Character correctChar : correctChars) { 
    replacePattern += correctChar; 
} 
replacePattern += "]"; 

final String wordToDisplay = word.replaceAll(replacePattern, "_"); 
System.out.println("Progress: " + wordToDisplay); 

Die replacePattern dann wie (?i)[^aekqw] aussehen. Die (?i) stimmt nicht mit der Groß-/Kleinschreibung überein, die [...] ist eine Gruppe von Symbolen, die übereinstimmen müssen, und die ^ negiert die Gruppe. So werden alle Zeichen ersetzt, die nicht innerhalb der [...] enthalten sind.

Und eine kleine Überprüfung, ob das Spiel beendet:

if (wordToDisplay.equals(word)) { 
    System.out.println("You won!"); 
} else if (incorrectChars.size() > 10) { 
    System.out.println("You guessed wrong 10 times, you lost!"); 
} else { 
    ... // Next round starts 
} 
+0

Ich versuche mein aber ty – MichaelDev

Verwandte Themen