Mastermind Treffer abfrage (Ich bin am Verzweifeln) ungelöst

Status
Nicht offen für weitere Antworten.

desperade

Neues Mitglied
Hi,
ich bin dabei Mastermind zu programmieren und bis auf eine Sache läuft es. Das wichtigste, die Treffer abfrage läuft noch nicht wie gewünscht und Abgabetermin ist auch noch morgen :### .

Einen absoluten Treffer bekomme ich ohne Probleme, doch wenn das siegMuster z.B. "gelb" "gelb" "gruen" "gruen" ist un der Spieler "gelb" und 3-mal "rot" eingibt, bekomme ich einen absoluten (schwarzes pinnchen) Treffer (ist ja auch klar, weil an der Stelle [0] beides "gelb" ist), aber auserdem bekomme ich einen halben (weisses pinnchen) Treffer.

Hier die Methode dazu:
! siegMuster ist das random Muster, welches man erraten muss, !
! spielFeldString ist das vom Spieler eingegebene Muster. !
Code:
private void treffer() {
		genaueTreffer = 0;
		halbeTreffer = 0;
		for (int i = 0; i < siegMuster.length; i++) {
			if (siegMuster[i].equals(spielfeldString[i][spielRunden])) {
				genaueTreffer++;
			} else
				for (int j = 0; j < siegMuster.length; j++) {
					if (j == i) {
						continue;
					}
					if (siegMuster[i].equals(spielfeldString[j][spielRunden])) {
						halbeTreffer++;
					}
				}
		}
		if (genaueTreffer == 4) {
			getSiegDialog();
		}
	}

Bedanke mich schon mal,
Lenny!

EDIT:
Habe es hinbekommen :applaus:
Code:
private void treffer() {
		genaueTreffer = 0;
		halbeTreffer = 0;
		for (int i = 0; i < siegMuster.length; i++) {
			if (siegMuster[i].equals(spielfeldString[i][spielRunden])) {
				genaueTreffer++;
				siegMuster[i]=siegMuster[i]+"a";
				spielfeldString[i][spielRunden]=spielfeldString[i][spielRunden]+"z";
			} else
				for (int j = 0; j < siegMuster.length; j++) {
					if (j == i) {
						continue;
					}
					if (siegMuster[i].equals(spielfeldString[j][spielRunden])) {
						halbeTreffer++;
					}
				}
			if (siegMuster[i].charAt(siegMuster[i].length()-1) == 'a'){
				siegMuster[i] = siegMuster[i].substring(0, siegMuster[i].length()-1);
			}
		}
		
		if (genaueTreffer == 4) {
			getSiegDialog();
		}
	}
 

desperade

Neues Mitglied
Leider ist es so noch nicht wirklich korrekt.

mit den genauenTreffer klappt jetzt alles, aber ich bekomme ein Problem mit den halbenTreffern. Wenn ich z.B. "gelb" "gelb" "rot" "rot" habe und "blau" "rot" "blau" "blau" eingebe, bekomme ich nicht einen halbenTreffer, sondern 2.

Jemand ne Idee? ???:L
 

The_S

Top Contributor
Ohne jetzt deinen Code durchgeguckt zu haben, hier die Methode, mit der ich bei meinem MasterMind Versuche hinzufüge und diese auch gleich überprüfe:

Code:
	public void addTry(byte[] oneTry) {
		
		tries[curPos] = oneTry;
		oneTry = new byte[tries[curPos].length];
		byte[] temp = new byte[target.length];
		for (byte i = 0; i < oneTry.length; i++) {
			oneTry[i] = tries[curPos][i];
			temp[i] = target[i];
		}
		byte l = 0;
		for (byte i = 0; i < oneTry.length; i++) {
			if (oneTry[i] == temp[i]) {
				matches[curPos][0]++;
				matches[curPos][1]++;
				oneTry[i] = 0;
				temp[i] = 10;
				l++;
			}
		}
		for (byte i = 0; i < oneTry.length; i++) {
			for (byte j = 0; j < oneTry.length; j++) {
				if (temp[i] == oneTry[j]) {
					matches[curPos][1]++;
					oneTry[j] = 0;
					temp[i] = 10;
				}
			}
		}
		curPos++;
	}

evtl. hilfts was :D
 
Status
Nicht offen für weitere Antworten.

Oben