Hangman

Hallo, wir sollen ein Programm für ein Hangman programmieren

Hab jetzt schon folgenden langen Code:

import java.util.ArrayList;
	import java.util.Random;
	import java.util.Scanner;

public class HangmanGame {

	 public static final String[] Words = {								//Vordefinierte Wörter für das Hangman Spiel
	  "Hallo", "Welt", "Programmieren", "Java", "Python", 
	  "PHP","Hangman","FH","Studieren","Zoom","Deutschland",
	  "Bayern","Coden","Eclipse","Error","Discord","String","Arrays",
	  "Lektion8","Informatik"
	 };

	 public static final Random RANDOM = new Random();
	 
	 public static int MaxVersuche = 15;							//Maximale Versuche -> Auf 15 bestimmt
	
	 String wort;
	
	 char[] wordFound;
	 
	 int eingegeben;
	 
	 private ArrayList < String > letters = new ArrayList < > ();

	
	 String nextWordToFind() {
	  return Words[RANDOM.nextInt(Words.length)];
	 }

	 public void newGame() {							//Methode für das neue Spiel
	  eingegeben = 0;
	  letters.clear();
	  wort = nextWordToFind();
	
	  wordFound = new char[wort.length()];

	  for (int i = 0; i < wordFound.length; i++) {
	   wordFound[i] = '_';
	  }
	 }

	
	 public boolean wordFound() {
		 
	  return wort.contentEquals(new String(wordFound));
	}

	 // Method updating the word found after user entered a character
	 private void enter(String w) {
	  // we update only if c has not already been entered
	  if (!letters.contains(w)) {
	  
	   if (wort.contains(w)) {
	  
	    int index = wort.indexOf(w);

	    while (index >= 0) {
	     wordFound[index] = w.charAt(0);
	     index = wort.indexOf(w, index + 1);
	    }
	   } else {

	    eingegeben++;
	   }

	   letters.add(w);
	  }
	 }

	
	 private String wordFoundContent() {
	  StringBuilder builder = new StringBuilder();

	  for (int i = 0; i < wordFound.length; i++) {
	   builder.append(wordFound[i]);

	   if (i < wordFound.length - 1) {
	    builder.append(" ");
	   }
	  }

	  return builder.toString();
	 }

	 // Play method for our Hangman Game
	 public void play() {
	  try (Scanner input = new Scanner(System.in)) {
	 
	   while (eingegeben < MaxVersuche) {
	    System.out.println("Starte mit einem Buchstaben: ");

	    String str = input.next();

	    if (str.length() > 1) {
	     str = str.substring(0, 1);
	    }

	    enter(str);

	
	    System.out.println("\n" + wordFoundContent());

	   
	    if (wordFound()) {
	     
	    	System.out.println("Gewonnen!");
	    
	    	break;
	    } else {
	    	
	     
	     System.out.println((eingegeben)+". Versuch: " );
	    }
	   }

	   if (eingegeben == MaxVersuche) {
	   
	    System.out.println("Leider Verloren!");
	    System.out.println("Das gesuchte Wort war: " + wort);
	   }
	  }
	 }

	 public static void main(String[] args) {
	  System.out.println("Hangman Spiel");
	 
	  HangmanGame hangmanGame = new HangmanGame();
	 
	  hangmanGame.newGame();
	 
	  hangmanGame.play();
	 }

	}

Kann ich den noch irgendwo kürzen??

Lass das mal mit dem „kürzen“. Code muss leserlich sein. Kurzer Code kann zwar übersichtlicher sein als langer, aber meist bedeutet es keine Hemmung davor zu haben Methoden und Klassen zu definieren und ruhig mal etwas großzügig auszuschreiben.

(Es sei denn natürlich eure Aufgabe ist es den Code so kompakt wie möglich zu schreiben.)

Abgesehen von der Formatierung (zu viele Leerzeichen und merkwürdige Einrückung) sehe ich beim drüber fliegen keine groben Probleme. Ich persönlich hätte die play() Methode noch ein bisschen auseinander genommen, die macht sehr viel auf einmal. Aber du hast ja nach „kurz“ gefragt.

*kopfschüttel*

2 Likes