Hallo Leute,
bin gerade dabei Mastermind zu programmieren und bin jetzt an der kniffligen Stelle des Vergleiches der beiden Arrays code (also der vom Computer errechnete) und versuch (also dem, was der User getippt hat).
Für die, die Mastermind nicht kennen:
- 2 Spieler spielen gegeneinander
- Spieler 1 (Computer) denkt sich einen Code aus, der aus Farben besteht (in diesem Fall habe ich 4 verschiedene, was aber noch auf 8 erweitert wird)
~in dem Code dürfen Farben doppelt verwendet werden
- Spieler 2 versucht nun diesen Code zu erraten
- Hat Spieler 2 einen Versuch beendet, muss ihm Spieler 1 sagen, ob er einen VOLLTREFFER (richtige Farbe UND richtige Position), einen Treffer (richtige Farbe ABER falsche Position) oder eine falschen (falsche Farbe und falsch Position = nicht vorhanden) hat.
Ein Volltreffer ist relativ leicht zu bestimmen und das ist auch nicht das Problem:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| for i := 0 to length(versuch) -1 do begin if (versuch[i] = code[i]) then richtig[i] := 'richtig' else richtig[i] := 'falsch'; end; |
So, nun geht's aber weiter:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| for I := 0 to Length(richtig) - 1 do begin if (richtig[i] = 'falsch') then begin for X := 0 to length(versuch) - 1 do begin if ((versuch[i] = code[x]) AND (richtig[x] <> 'richtig')) then begin richtig[i] := 'treffer'; break; end; end; end; end; |
Treffer werden jetzt, genau so wie richtige, super angezeigt. Das Problem ist nur, dass er "(richtig[x] <> 'richtig')" iwie übersieht.
Habt ihr ne Idee, warum?
Falls ihr noch eine andere Methode kennt, dann sagt mir diese doch auch ^^
Gr33tZ
Rn
Edit:---->
okay, ich hab jetzt festgestellt, dass das Problem auftritt, wenn ich von einer Farbe 2 Vorkommen im Code habe, einen richtig tippe und die anderen 2 auf die falschen Positionen setze. Dann generiert er mir 2 Treffer, obwohl ich ja nur noch einen habe.
Jemand einen Ahnung, wie ich das verhindern kann?