Hangman! Spiel

loxa789

Mitglied
Hallo hänge mal wieder etwas bei Programmieren vielleicht könnt ihr mir erklären wo das Problem in meinem Programm liegt. Versuche derzeit viel mit statischen Variablen zu Programmieren. Kann bei meinen Programm zwar einen Char ins Programm einlesen und er wird auch an der richtigen Stelle ausgegeben aber leider merkt sich das Array nicht die letzten gefundenen Zeichen. Habe bei jedem neuen Aufruf wieder ein Array mit nur '*'.
lg Loxa789

Java:
public class hangman1{

	static int rand, winGame;
	static int errorTrys;
	static char[] searchTerm, starArray;
	static char letterToTest;

	public static void main (String[] args){

		String st3 = "hansmoser"; // String für Funkiontest soll durch random ersetzt werden
		int n=0;

		char choice;
		do{

			searchTerm = stringToArray(st3); //parse Hangmanwort für Tests
			printCharArray(searchTerm);		 // ausgabe Hangman char für Tests
			printStars();   		//nur für erstausgabe

		  do{

			searchTerm = stringToArray(st3);

			letterToTest = createPlayer();
			createField1();
			printWordWithStars();
			createField1();

			if(winGame == searchTerm.length){

				Out.println();
				Out.println("Gewonnen");
				Out.println("Das gesuche Wort war "+st3);
				Out.println();
				break;
			}
			n++;

		 }while(n <= searchTerm.length+7);

			Out.println();
			Out.print("Weiterspielen (j/n) ");
			choice = In.readChar();

		}while(choice == 'j');

	} // end main

		static void printCharArray(char[] searchTerm){ // nur für Tests
			Out.println("\n");
			for(int i = 0; i < searchTerm.length;i++){
				Out.print(" "+searchTerm[i]);
			}   Out.println();

		} // endprintArray

		static char[] printStars(){ // nur für die Erstausgabe

			Out.println("\n");
			starArray = new char[searchTerm.length];
			for(int i = 0; i < searchTerm.length;i++){
				starArray[i] = '*';
				Out.print(" "+starArray[i]);
			}
			Out.println("\n");

			return starArray;
		}

		static char[] createField1(){

				for(int i = 0; i < searchTerm.length;i++){
					if(letterToTest == searchTerm[i]){
						searchTerm[i] = 't';
						starArray[i] = searchTerm[i];
					}else{
						searchTerm[i] = 'f';
					}
				}
				return searchTerm;
		}// createField1

		static char[] printWordWithStars(){

			for(int i = 0; i < searchTerm.length;i++){
				if(searchTerm[i] == 't'){
				   searchTerm[i] = letterToTest;
				   Out.print(" "+searchTerm[i]);
				   winGame++;
				}else{
					Out.print(" *");
				}
			} return searchTerm;
			
		}// printWordWithStars

		static char createPlayer(){

			Out.println();
		  	Out.print("Geben sie bitte einen Kleinbuchstaben ein! = ");

			char letter = In.readChar();

		return letter;

		}
		static char[] stringToArray(String st3){

			char[] a = st3.toCharArray(); // parse string to charArray

			return a;
		}// end stringToArray
}
 
Hallo ich muss das nächste mal schneller etwas Posten. Bin jetzt auf meine Fehler draufgekommen.

Möchte für das Spiel eine Liste mit Hangmanwörtern erstellen, dieses solle mit dem Zufallsgenerator ausgewählt werden.
da werd ich dann wahrscheinlich eure Hilfe brauchen. Da ich nun meine Methoden etwas umgeschrieben habe geht das Gewinnen und verlieren derzeit nicht mehr. Da wird mir aber sich noch was einfallen.

Danke
 
Zuletzt bearbeitet:
Hallo ich muss das nächste mal schneller etwas Posten. Bin jetzt auf meine Fehler draufgekommen.

Möchte für das Spiel eine Liste mit Hangmanwörtern erstellen, dieses solle mit dem Zufallsgenerator ausgewählt werden.
da werd ich dann wahrscheinlich eure Hilfe brauchen.

Danke

ArrayList mit den (Strings)Wörtern und per Math.random() war das glaub ich, ne Zahl zwischen 0-max auswählen lassen....
z.b. (int)(Math.random()*ArrayListe.size()) is jetzt son Beispiel was mir einfällt
 
Zuletzt bearbeitet:
Hallo versuche mich gerade an meiner String Liste. Leider funktioniert sie noch nicht so wie sie soll. Plan ist eine Randomzahl von 1 bis 20 zu erzeugen. Diese Zahl soll nun in meiner Methode readList nur jenen String ausgeben der von der Random Zahl erzeugt wurde. Ich bekomme aber immer den gleichen ersten oder zweiten String zurück. Verstehe glaube auch warum nur habe ich noch keine Ahnung wie ich das ändern kann.
lg Michael

Java:
     static int creatRandom(){

		cRandom = (int) (20 * Math.random()+1);

		return cRandom;
	}

	static String readList(){

		int cnt=1;
		Out.println(cRandom);
		In.open("namensListe.txt");
		s2 = In.readWord();
		while(In.done()){
			//s2 = In.readWord();
			if(cnt<=cRandom){
			  s2 = In.readWord();

			} break;
		}
		In.close();
		return s2;
	}
	static void readList2(){

		Out.println("test "+s2);

	}

Ps.: Ansonsen funktioniert man Hangman ganz gut!!!
 
deine Code und deine aktuelle Frage sind unverständlich,
was passiert wann wo wie oft,

wird readList() mehrfach aufgerufen? noch komplett unklar,
die Methode verwendet dann die statische Variable cRandom, die sich von selber sicher nicht ändert,
damit cRandom einen anderen Wert erhält, muss creatRandom() aufgerufen werden, was in deinem Code nirgendwo passiert

gehts darum?

edit:
das break; in Zeile 19 wird die Schleife immer sehr früh abbrechen, steht nicht in einem if oder else,
das ist wohl dein Problem
 
Danke SlaterB.
Ja das kommt davon wenn man immer wieder kleine "Testprogramme" schreibt die dann in das Hauptprogramm eingebaut werden. Habe aber einige Fehler gefunden. Dachte wenn man so einfach programmiert ist der Code auch leicht verständlich. Habe die If-Anweisung in eine While-Schleife verwandelt und cnt++ beim verändern leider gelöscht. Ich bekomme nun, nur noch einen String wie gewünscht zurückgeliefert.
Nun funktioniert mein Hangman fast so wie es soll noch nicht ganz fehlerfrei aber das wird noch. lg Michael
 

Zurück
Oben