Hangman spiel

Theroth

Mitglied
Hallo ich lese momentan als Anfänger das buch Java ist auch eine Insel und bin momentan bei Strings und habe im Buch nun ein Beispiel für das Spiel Hangman.

Code:
public class Hangman1
{
  public static void main( String[] args )
  {
    String hangmanWord = "alligatoralley";
    String usedChars = "";

    String guessedWord = "";
    for ( int i = 0; i < hangmanWord.length(); i++ )
      guessedWord += "_";

    for ( int guesses = 1; ; )
    {
      if ( guesses == 10 )
      {
        System.out.printf( "Nach 10 Versuchen ist jetzt Schluss. Sorry! "+
                           "Apropos, das Wort war '%s'.", hangmanWord );
        break;
      }

      System.out.printf( "Runde %d. Bisher geraten: %s. Was wählst du für ein 
                          Zeichen?%n", guesses, guessedWord );
      char c = new java.util.Scanner( System.in ).next().charAt( 0 );
      if ( usedChars.indexOf( c ) >= 0 )
      {
        System.out.printf( "%c hast du schon mal getippt!%n", c );
        guesses++;
      }
      else  // Zeichen wurde noch nicht benutzt
      {
        usedChars += c;
        if ( hangmanWord.indexOf( c ) >= 0 )
        {
          guessedWord = "";
          for ( int i = 0; i < hangmanWord.length(); i++ )
            guessedWord += usedChars.indexOf( hangmanWord.charAt( i ) ) >= 0 ?
                             hangmanWord.charAt( i ) : "_";

          if ( guessedWord.contains( "_" ) )
            System.out.printf( "Gut geraten, '%s' gibt es im Wort. " +
                               "Aber es fehlt noch was!%n", c );
          else
          {
            System.out.printf( "Gratulation, du hast das Wort '%s' erraten!",
                               hangmanWord );
            break;
          }
        }
        else // hangmanWord.indexOf( c ) == –1
        {
          System.out.printf( "Pech gehabt, %c kommt im Wort nicht vor!%n", c );
          guesses++;
        }
      }
    }
  }
}

So sieht das aus nun verstehe ich diese Zeile nicht
Code:
          guessedWord = "";
          for ( int i = 0; i < hangmanWord.length(); i++ )
            guessedWord += usedChars.indexOf( hangmanWord.charAt( i ) ) >= 0 ?
                             hangmanWord.charAt( i ) : "_";

          if ( guessedWord.contains( "_" ) )
            System.out.printf( "Gut geraten, '%s' gibt es im Wort. " +
                               "Aber es fehlt noch was!%n", c );

was genau passiert hier und was bedeutet das
>= 0 ?

für diese lange frage entschuldige ich mich aber ich schreibe ungern etwas ab was ich nicht verstehe.

Vielen vielen dank im Vorraus

Mit freundlichen Grüßen
Dominik
 

husox123

Mitglied
Code:
          guessedWord = "";
          for ( int i = 0; i < hangmanWord.length(); i++ )
            guessedWord += usedChars.indexOf( hangmanWord.charAt( i ) ) >= 0 ?
                             hangmanWord.charAt( i ) : "_";

          if ( guessedWord.contains( "_" ) )
            System.out.printf( "Gut geraten, '%s' gibt es im Wort. " +
                               "Aber es fehlt noch was!%n", c );

was genau passiert hier und was bedeutet das
>= 0 ?

Also ich bin kein Fan von solchen kombinierten Kommandozeilen, weil sie mir auch erschweren, den Code zu verstehen.

Also wenn du hier angekommen bist, heißt es, dass du einen Buchstaben richtig erraten hast. Davor wurde aber der eingetipte Buchstabe in "usedChars" zu einen String addiert.
z.B wenn du schon 3 Buchstaben eingegeben hast: abc, so hat dieser String einen Index, der von 0 bis 2 geht. "012"

guessedWord = ""; hier wird der der String geleert. Davor hatte man das hier "______________" reingespeichert.

dann wird eine for-Schleife konstruiert, die so lange durchläuft, wie die Lände des Strings ist, damit man alle Buchstaben des zu erratenden Wortes vergleichen kann.
for ( int i = 0; i < hangmanWord.length(); i++ )



Grobe Erklärung:
Hat man einen Buchstaben getroffen, so wird er an den String angehängt(Schleifenindex ist entscheidend), sonst ein Strich "_".

z.B wenn Schleifenindex i = 5 ist und du hast einen Buchstaben getroffen, dann wird an der 5.Stelle der Buchstabe angehängt. ____g__________


guessedWord += usedChars.indexOf( hangmanWord.charAt( i ) ) >= 0 ? hangmanWord.charAt( i ) : "_";

hangmanWord.charAt( i ) : liefer den Buchstaben an der i.ten Stelle
usedChars.indexOf( hangmanWord.charAt( i ) ) : liefert die Stelle von dem Buchstaben , falls er in usedChars existiert. Und wenn ja, ist der Index vermutlich größer oder gleich 0 ist.

? hangmanWord.charAt( i ) Bei Treffer wird der Buchstabe an der i.ten Stelle in "guessedWord" hinzugefügt. wenn nicht : "_"; ein Strich.


Java:
 if ( guessedWord.contains( "_" ) )
            System.out.printf( "Gut geraten, '%s' gibt es im Wort. " +
                               "Aber es fehlt noch was!%n", c );

hier wird kontrolliert ob alle Buchstaben erraten wurden oder noch in dem String "guessedWord" einen Strich "_" existiert. Wenn ja entsprechende Meldung, sonst gewonnen.


Ich habe versucht möglich verständlich zu erklären und hoffe konnte helfen.
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Um noch ergänzend hinzuzufügen handelt es sich hierbei

Java:
            guessedWord += usedChars.indexOf( hangmanWord.charAt( i ) ) >= 0 ?
                             hangmanWord.charAt( i ) : "_";

um die Verwendung eines Tenären Operators, dieser ist eine alternative Art eine "einfache" If-Anweisung zu schreiben welche einen booleschen Vergleich repräsentiert, Nachteil hierbei ist das es sehr schnell , sehr kryptisch werden kann sobald die Bedingung komplexer wird.

Syntax ist immer folgende

boolescher Vergleich ? Rückgabewert wenn Vergleich wahr : Rückgabewert wenn vergleich Falsch;

Hier noch schnell ein einfaches Beispiel :

Java:
// Variablen
		int x = 10;
		int y = 12;
		
		// Tenärer Operator
		String res = x == y ? "Wahr" : "Falsch"; 
		
		// ist equivalent zu :
		
		// If-Anweisung 
		String result ="";
		
		if (x == y) {
			result = "Wahr";
		}
		else{
			result = "Falsch";
		}
 
Zuletzt bearbeitet:

Theroth

Mitglied
Wow vielen vielen dank für deine Hilfe habe es verstanden :) . Finde es ein bisschen schade das so etwas im Buch nicht gemacht wird. Aber nochmal vielen dank

Mit freundlichen Grüßen
Dominik
 

Theroth

Mitglied
Ok habe den code nun nach mein Verstand umgestellt und er funktioniert auch bis auf den Anfang wo er mir als Ausgabe dieses hier Liefert

_ _ _ _ _ _ _ d_ _ _ _ _ _ // Mein Wort ist dabei dominik es sind also zuviele "_" .

Code:
public class Hangman{
	
	public static void main(String[] args){
		
		String HangmanWord = "dominik";
		String usedChars = "";
		String guessed = "";
		
		for(int i=0; i<HangmanWord.length(); ++i)
		{
			guessed += "_ ";
		}
		
		
		for(int counter= 0 ; ; )
		{
			
			char input = new java.util.Scanner(System.in).next().charAt(0);
			
			if(usedChars.indexOf( input ) >= 0)
			{
				
				
				System.out.println("Buchstabe bereits Verwendet");
				++counter;
				System.out.println("Versuch " + counter);
			}
			else  //Zeichen nicht benutzt sonst kann es übersprungen werden
			{
				
				usedChars += input;
				
				
				
				for(int i=0; i< HangmanWord.length(); ++i)
				{
					
					
					if( usedChars.indexOf( HangmanWord.charAt(i) ) >= 0 )
					{
						guessed += HangmanWord.charAt(i);
						
					}
						
					
					else
					{
						guessed += "_ ";
						
						
					}
		
				}
				
				
				System.out.println(guessed);
				
				if(!guessed.contains("_ "))
				{
					System.out.println("Gratulation du hast das Wort erraten !");
					break;
				}
				
				guessed = "";
				
				if(counter==5)
				{
					System.out.println("Sie haben verloren !");
					System.out.println("Das Word war "+ HangmanWord);
				}
				
				
				
				
			}
			
			
			
			
			
			
			
			
		}
		

		
		
	}
	
}

Nochmal vielen dank an alle die bereit sind meine Fragen zu beantworten und mein Code zu lesen. Sehe es als nicht Selbstverständlich an und bedanke mich deswegen nochmal an alle :D


Mit freundlichen Grüßen
Dominik
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
ich bin mir grad nicht sicher da ich es nur überflogen habe , aber an dieser stellen

Java:
for(int i=0; i< HangmanWord.length(); ++i)
				{
					
					
					if( usedChars.indexOf( HangmanWord.charAt(i) ) >= 0 )
					{
						guessed += HangmanWord.charAt(i);
						
					}
						
					
					else
					{
						guessed += "_ ";
						
						
					}
		
				}

prüfst du ob ein Buchstabe schonmal verwendet wurde, und fügst dann deinem Wort entweder den Buchstaben hinzu, oder aber wieder ein "_" sprich jedes mal wenn ein Buchstabe schon verwendet wurde wird dein Wort länger, korrekt wäre aber glaube ich keine Aktion, sprich kein else block.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Hangman-Spiel-zufälliges Wort ermitteln Java Basics - Anfänger-Themen 4
Tacofan Hangman als fertiges Spiel Java Basics - Anfänger-Themen 7
M hangman spiel Java Basics - Anfänger-Themen 1
L Hangman! Spiel Java Basics - Anfänger-Themen 5
M Hangman Spiel Java Basics - Anfänger-Themen 17
K Hangman Spiel ! wie immer probleme Java Basics - Anfänger-Themen 25
S Spiel Hangman programmieren - Ausgabe funktioniert nicht!!! Java Basics - Anfänger-Themen 13
F Hangman Java Basics - Anfänger-Themen 14
Tacofan Hangman - ist der Buchstabe vorhanden wenn ja wo kommt er vor Java Basics - Anfänger-Themen 6
K Hangman Programm Java Basics - Anfänger-Themen 12
G Hangman GUI Java Basics - Anfänger-Themen 6
I Hangman CardLayout/repaint? Java Basics - Anfänger-Themen 2
A Hangman in Java programmieren - dringend Java Basics - Anfänger-Themen 8
NoXiD Hangman problem Java Basics - Anfänger-Themen 2
S Hangman! Java Basics - Anfänger-Themen 9
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
I Threads Spiel gol Java Basics - Anfänger-Themen 6
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
J ArrayList vergleichen im spiel Mastermind Java Basics - Anfänger-Themen 2
enesss tictactoe spiel Java Basics - Anfänger-Themen 5
K Java Lotto Spiel; ich komme nicht weiter Java Basics - Anfänger-Themen 15
Jxhnny.lpz TicTacToe Spiel vs Computer. (Probleme) Java Basics - Anfänger-Themen 7
httprt Probleme bei dem erstellen von leveln in meinem Spiel Java Basics - Anfänger-Themen 2
berserkerdq2 Habe ein Spiel entwickelt, dass immer in der 4 Runde einen cast-Fehler erhält Java Basics - Anfänger-Themen 3
berserkerdq2 Spiel hängt sich immer in der 4 Runde auf, obwohl ich jede Runde das gleiche mache Java Basics - Anfänger-Themen 1
Ekooekoo Hilfe spiel Java Basics - Anfänger-Themen 5
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
Kennewick Basketball Spiel Ergebnisse Java Basics - Anfänger-Themen 11
X Erste Schritte Hilfe bei einem kleinen Spiel. Java Basics - Anfänger-Themen 19
D Snake-Spiel ähnliche Aufgabe Hilfe Java Basics - Anfänger-Themen 3
JEP1 Java Dialog Fenster schließen Spiel Java Basics - Anfänger-Themen 0
I Simples Risiko-Spiel Java Basics - Anfänger-Themen 5
Hallolu Pong-Spiel: Schläger schneller werden lassen Java Basics - Anfänger-Themen 9
M Java Spiel wie Wer wird Millionär Java Basics - Anfänger-Themen 1
T Startbildschirm für ein Spiel erstellen Java Basics - Anfänger-Themen 0
Z Kein überprüfen des gesamten Arrays möglich.(Viergewinnt Spiel) Java Basics - Anfänger-Themen 6
G Ufo Spiel programmieren Java Basics - Anfänger-Themen 13
C Java Spiel Java Basics - Anfänger-Themen 3
J Spiel programmieren Java Basics - Anfänger-Themen 16
S Spiel-Programmieren. Wenn ein Objekt den anderen berührt. Java Basics - Anfänger-Themen 6
B Memory Spiel Java Basics - Anfänger-Themen 29
J Memory-Spiel Aktivierung der Methode mit Timer Java Basics - Anfänger-Themen 44
Kamy Ein einfaches "Vier Gewinnt" Spiel für Anfängerin Java Basics - Anfänger-Themen 51
A Breakout-Spiel , Ball mit Platten abprallen lassen Java Basics - Anfänger-Themen 1
S Spiel programmieren mit Java Java Basics - Anfänger-Themen 11
Olis Erste Schritte Simples Memory Spiel möglich? Java Basics - Anfänger-Themen 1
J Spiel mit Button klick starten Java Basics - Anfänger-Themen 9
C Rekursives Backtracking beim Spiel Peg Java Basics - Anfänger-Themen 22
M Spiel programmieren Java Basics - Anfänger-Themen 16
Spencer Reid Feedback zu kleinem Spiel Java Basics - Anfänger-Themen 4
kokojamboo92 Spiel programmieren Java Basics - Anfänger-Themen 1
R Kleines Java Spiel funktioniert nicht. Java Basics - Anfänger-Themen 2
I Spiel Java Basics - Anfänger-Themen 34
H ein einfaches Tic Tac Toe Spiel Java Basics - Anfänger-Themen 1
I Spiel programmieren. Java Basics - Anfänger-Themen 16
B Hilfe bei Escape - Spiel Java Basics - Anfänger-Themen 6
S Java-Spiel Java Basics - Anfänger-Themen 2
M Nim-Spiel geht in den negativen Bereich Java Basics - Anfänger-Themen 1
K Klassen Registrierungsseite für ein Spiel Java Basics - Anfänger-Themen 6
J Programmierung Quiz Spiel Java Basics - Anfänger-Themen 3
J Programmierung Quiz Spiel Java Basics - Anfänger-Themen 2
M Brauche Tipps für ein Spiel Java Basics - Anfänger-Themen 4
S Probleme mit GamGrid Spiel-Erstellung => Actor reagiert nicht auf Tastatur Java Basics - Anfänger-Themen 2
Mxxxt Mosaik Spiel - Steuerpanel wird nicht angezeigt Java Basics - Anfänger-Themen 5
M Erste Schritte Zufallszahl Spiel Problem Java Basics - Anfänger-Themen 7
Z Erste Schritte Kleines 2D. Spiel Objekt Bewegung funktioniert nicht Java Basics - Anfänger-Themen 2
H Spiel Kniffel: Gesamtes Array untersuchen. Java Basics - Anfänger-Themen 15
M Array und Objektorientierung? - TicTacToe Spiel Java Basics - Anfänger-Themen 43
C Klassen Sudoku-Spiel Werte werden nicht gesetzt Java Basics - Anfänger-Themen 4
K Kleines Spiel auf Java programmieren Java Basics - Anfänger-Themen 2
W Tic Tac Toe Spiel ohne Arrays Java Basics - Anfänger-Themen 7
S Im objektorientiertem "Spiel" kämpfen Java Basics - Anfänger-Themen 3
I Klassen Umsetzungsfrage zu Spiel "Zuul" Java Basics - Anfänger-Themen 3
F Mastermind Spiel Java Basics - Anfänger-Themen 9
H Liste ausgeben (Spiel Hey Fisch (software-challenge) ändern Anzahl Fische) Java Basics - Anfänger-Themen 1
F Game-Engine für textbasierendes Spiel: Architektur? Java Basics - Anfänger-Themen 9
K Erste Schritte Frage Antwort Spiel - Fragen zur Planung Java Basics - Anfänger-Themen 2
J Java Spiel Zufallsauswahl für Zugbeginn Java Basics - Anfänger-Themen 3
J Frage Antwort Spiel - Wie Zeitcountdown realisieren? Java Basics - Anfänger-Themen 2
L Erste Schritte Spiel: Glückliches Sieben Java Basics - Anfänger-Themen 3
J 2 Pc's - Spiel gegeneinander ?! Java Basics - Anfänger-Themen 3
V Spiel Programmieren Java Basics - Anfänger-Themen 9
P 2D-Spiel und Bildschirmgröße Java Basics - Anfänger-Themen 2
O Methoden Fehlermeldung(Illegal start of expression) bei 4-Gewinnt-Spiel Java Basics - Anfänger-Themen 5
T Blöcke für ein Jump and Run Spiel Java Basics - Anfänger-Themen 8
S 2D-Spiel mit Threads... Java Basics - Anfänger-Themen 3
S 2D-Spiel im Vollbild an größe anpassen? Java Basics - Anfänger-Themen 3
K JTextField in ein Spiel einfügen Java Basics - Anfänger-Themen 2
S Mosaik Spiel Java Basics - Anfänger-Themen 19
pinar memory spiel Java Basics - Anfänger-Themen 10
T OOP Mein erstes Java-Spiel - Schiffe versenken! Java Basics - Anfänger-Themen 2
K Erste Schritte Wie mache ich weiter? (Spiel-Menü) Java Basics - Anfänger-Themen 9
C Java Applet in html. Pong - old school Spiel Java Basics - Anfänger-Themen 10
J Variablen Invalid Character - Error -> Spiel mit Variablenergebnissen Java Basics - Anfänger-Themen 8
K Schere Stein Papier Spiel Java Basics - Anfänger-Themen 3
A Feedback zum Spiel Java Basics - Anfänger-Themen 5
F Hilfe bei meinem Spiel Java Basics - Anfänger-Themen 3
C Lotto Spiel Java Basics - Anfänger-Themen 23
Jagson Dotcom Spiel - Dots Random setzen Java Basics - Anfänger-Themen 8
Dogge Farben-Spiel Java Basics - Anfänger-Themen 20

Ähnliche Java Themen

Neue Themen


Oben