Mastermind

So, langsam wirds peinlich....:rolleyes:
Ich habe eine Methode, die mir einen 4-stelligen Zufallscode erstellt (und die auch funktioniert):

Java:
	private void makeCode()
	{
		// To be implemented
		String randomColor = "";

		int codeLength = 1;
		while (codeLength <= 3)
		{
			int colorValue = (int)(Math.random() * 6) + 1;
			switch (colorValue)
				{
				case 1:
					randomColor = "y";
					break;
				case 2:
					randomColor = "o";
					break;
				case 3:
					randomColor = "r";
					break;
				case 4:
					randomColor = "b";
					break;
				case 5:
					randomColor = "g";
					break;
				case 6:
					randomColor = "p";
					break;
				}
			codeLength = codemaker.length();
			if(!codemaker.contains(randomColor))
				{
				codemaker = codemaker + randomColor;
				codeLength = codemaker.length();
				}
		}
		System.out.println(codemaker);
	}

So. Nun habe ich eine Methode, die eine Lösung des Spielers einliesst und diese auf Richtigkeit überprüft. Maximal sind 8 Vorschläge möglich. Auch die funktioniert:

Java:
	private void breakCode()
	{
		// To be implemented
		while(inc < 4 && guesses < MAX_GUESSES)
		{
		Scanner scn = new Scanner(System.in);
		String codebreaker = scn.nextLine();
		char firstcolor = codebreaker.charAt(0);
		char secondcolor = codebreaker.charAt(2);
		char thirdcolor = codebreaker.charAt(4);
		char fourthcolor = codebreaker.charAt(6);

		
		if(codemaker.indexOf(firstcolor) != -1)
			{
			char first = codemaker.charAt(0);
			if (first == firstcolor)
				{
				System.out.println("Schwarz");
				inc++;
				}
			else
				{
				System.out.println("Weiss");
				}
			}
		if(codemaker.indexOf(secondcolor) != -1)
			{
			char second = codemaker.charAt(1);
			if (second == secondcolor)
				{
				System.out.println("Schwarz");
				inc++;
				}
			else
				{
				System.out.println("Weiss");
				}		
			}
		
		if(codemaker.indexOf(thirdcolor) != -1)
		{
		char third = codemaker.charAt(2);
		if (third == thirdcolor)
			{
			System.out.println("Schwarz");
			inc++;
			}
		else
			{
			System.out.println("Weiss");
			}		
		}
		
		if(codemaker.indexOf(fourthcolor) != -1)
		{
		char fourth = codemaker.charAt(3);
		if (fourth == fourthcolor)
			{
			System.out.println("Schwarz");
			inc++;
			}
		else
			{
			System.out.println("Weiss");
			}		
		}
		guesses++;
		if (inc != 4)
			{
			inc = 0;
			}

	}
	}

So. Nun wurde uns eine Methode vorgegeben, die den Ablauf einer einzelnen Spielrunde festlegt. Diese Methode ruft die beiden obengenannten Methoden auf, zusätzlich noch die printRoundResult()-Methode, die am Ende das Ergebnis bekannt gibt (und die ich noch schreiben muss):

Java:
 	private void doRound()
	{	
		makeCode();
		breakCode();
		printRoundResult();
	}

So. Jetzt ist es meine Aufgabe, diese Methoden alle in einer play()-Methode zu vereinen:

Java:
	public void play()
	{
		System.out.println("Let's play Mastermind!");
		System.out.println("For you guesses, write \"x x x x\" where x is a color code:");
		System.out.println("y: Yellow \no: Orange \nr: Red\nb: Blue\ng: Green\np: Purple");
		// TODO: Implement acutal loop
		Scanner scan = new Scanner (System.in);
		String cont = "y";
		while (cont.equalsIgnoreCase("y"))
		{
		doRound();	
		System.out.println("Play another round? (y/n)");
		cont = scan.nextLine();
		}
		System.out.println(guesses);
	}

Man soll am Ende einer Spielrunde entscheiden, ob man eine weitere Runde spielen will oder nicht. Komisch ist jetzt aber: Ist eine Spielrunde abgeschlossen, wird kein neuer Code generiert, sondern der alte bleibt erhalten (ich lasse den Code auf die Konsole ausgeben, um das Testen zu vereinfachen).
Sieht jemand den Fehler?

Vielen Dank bereits im Voraus!
gruss
 
Du solltest dir mal angewöhnen mit Debug-Ausgaben zu arbeiten, um solche Fehler zu finden.

Ich denke es liegt daran, dass codemaker ein Feld ist und du dieses vor einer neuen Runde nicht zurücksetzt.
 

Neue Beiträge

Zurück