hangman

madzalicious

Grünschnabel
Hallo Zusammen
Ich hab mal versucht hangman mit 2 spieler zu programmiere, wil jetzt aber dafür sorgen, dass man nur eine bestimmte anzahl versuche hat und dass wenn ein buchstabe mehrmals vorkommt es auch auf den richtige platz angezeigt wird. Ich habe schon vieles versucht aber nichts hat bis jetzt funktioniert...ich wäre froh um tips!
Unten habe ich mein bisherige Code!
danke im vorhinaus
greetz, madz

PS. sorry für mein grammatik bzw. rechtschreibung, bin nicht muttersprachig deutsch

Code:
package games;
import java.util.Vector;
import javax.swing.*;
public class Hangman {
 public static void main (String [] args){
  Hangman one = new Hangman();
  one.game();
 }
 String player1;
 String player2;
 String wordcorrect;
 String place = "";
 String s = "";
 char letter;
 String input;
 String dashes = "";
 String dashes2 = "";
 Vector letters = new Vector();
 Vector correctWord = new Vector();
 Vector word = new Vector();
 public void game(){
  JOptionPane.showMessageDialog(null, "HI! Welcome to Hangman!");
  player1 = JOptionPane.showInputDialog("Player 1, please enter your name:");
  player2 = JOptionPane.showInputDialog("Player 2, please enter your name:");
  play();
 }
 
 public void play(){
  wordcorrect = JOptionPane.showInputDialog(player1 + " please enter a word for " + player2 + " to guess:");
  int i = 0;
  JOptionPane.showMessageDialog(null, player2 + " You have " + wordcorrect.length() + " guesses!");
  while (i != wordcorrect.length()){
   letters.add(wordcorrect.charAt(i));
   correctWord.add(wordcorrect.charAt(i));
   word.add("_");
   dashes = dashes + "_ ";
   i++;
  }
  String text = player2 + " the word to guess has "+ wordcorrect.length() + " letters\n" + dashes;
  JOptionPane.showMessageDialog(null, text);
  int j = 0;
  while (letters.isEmpty() != true){
     input = JOptionPane.showInputDialog(player2 + "\nPlease enter a letter: ");
     letter = input.charAt(0);
  while (letters.contains(letter) != true){
   input = JOptionPane.showInputDialog(null, "Sorry, that was wrong! Please try again!" + "\n Enter a new letter");
      letter = input.charAt(0);
     }
  if(letters.contains(letter) == true){
      JOptionPane.showMessageDialog(null, "Correct!! " + letter + " is at space " + (correctWord.indexOf(letter)+ 1));
      word.remove(correctWord.indexOf(letter));
      word.add(correctWord.indexOf(letter), letter);
      s = word.toString();
      JOptionPane.showMessageDialog(null, s);
      letters.remove(letters.indexOf(letter));
  }
  }
  }
}
 
Ein paar Anmerkunge habe ich noch was du schöner schreiben könntest:
Java:
while (letters.isEmpty( ) != true) {
lesbarer ist
Java:
while (!letters.isEmpty( )) {

Ich würde das überhaupt nicht mit Vektoren machen. char[] eignen sich hierfür wunderbar. Dann ist es auch sehr einfach die richtige Stelle zum einfügen zu ermitteln. Übrig bleiben dann auch nur noch correctWord und word als char []. Einen String ein ein solches Array umzuwandeln geht mit toCharArray.

Java:
int i = 0;
  JOptionPane.showMessageDialog(null, player2 + " You have " + wordcorrect.length() + " guesses!");
  while (i != wordcorrect.length()){
   letters.add(wordcorrect.charAt(i));
   correctWord.add(wordcorrect.charAt(i));
   word.add("_");
   dashes = dashes + "_ ";
   i++;
  }

In so einem Fall bitte keine while, sondern eine for-Schleife benutzen. Ein While ist zu fehleranfällig, da es passieren könnte dass du die i++ Zeile löscht und dann hast du eine Endlosschleife.

Also besser:
for(int i = 0; i < wordcorrect.length;i++)

Die beiden while-Schleifen die du da unten ineinander geschaltelt hast machen keinen Sinn. Dadurch ist es auch schwieriger die Anzahl der Versuche die bereits gemacht wurden zu ermitteln. Statt dem inneren while-if kannst du ein if-else benutzen und statt dem showInputDialog machst du ein showMessageDialog und überlasst das Abfragen von Eingaben der äußeren while-Schleife.

Dann kannst du nämlich unten in der while-Schleife die Anzahl der Versuche mitzählen lassen.

Und nutze nur Felder wenn diese auch nötig sind. Dies ist meiner Meinung nach nur für player1 und player2 sinnvoll. Den Rest kannst du in den Methoden deklarieren.
 
Zurück