Datensstrukturen für Mastermind in Delphi 5

Also wenn ich das Spiel „Mastermind“ (teilweise auch unter „Logik“ bekannt) programmiere. welceh datenstruckturen und so sollte ich da am besten verwenden und warum??

kurz zu dem spiel - wer es nicht kennt. Also man hat 7 farben zur auswahl, der Computer entwickelt dann eine zufällige Farbreihnfolge aus 5 unterschiedlichen Farben (Farben werde nicht mehrfach verwendet). der Benutzer muss nun durch raten und logisches denken über 10 runden die entsprechende zahlenreihnfolge ermitteln. wenn die geratenen zahlen an der richtigen position stehen und die richtige farbe (entsprechend der zufälligen farbreihnfolge) hat gibt der computer einen schwarzen punkt aus, ist nur die farbe richtig, aber an der falschen position so wird ein weißer punkt angezeigt. so kann man dann über logisches denken die reihenfolge ermitteln. Bekommt man sie über die 10 Runden nicht raus hat man verloren

Ein Bekannter meinte das es mit Array ganz praktisch wäre. Also dass man die auszuwählenden Farben darunter speichert.

Dannach würde ich eine procedur schreiben die sich einen zufälligen farbcode merkt - wie könnte man das am bessten umsetzten (also mit welchen datenstruckturen und so), und warum?

der benutzer sollte dann am besten in einem stringgrid die jeweiligen farben einstellen können, die ausgabe ob die geratenen Zahlen an der richtigen position ist bzw. die richtige farbe haben… da dachte ich dass sich eine if-Funktion am bessten eignet in der art von

if StringGrid1.Cells[1,1]=1. Position und Farbe des zufälligen Farbcodes

then färbe StringGrid2.Cells[1,1] schwarz

if StringGrid1.Cells[1,1]= Farbe in zufälligen Farbcodes enthalten

then färbe StringGrid2.Cells[1,1] weiß

oder kann man dass vllt. irgendwie mit ner rekursion vereinfachen?

bzw. wie kann ich das verallgemeiner dass wenn man auf einen Button „Vergleichen“ klickt. die jeweilige runde verglichen wird. oder muss ich dass dann doch alles einzeln mit der oben beschriebene if-Funktion machen??

hoffe ihr könnte mir helfen und tipps geben ^-^

Ein Bewertungsalgorithmus für Superhirn
War auch eines der ersten Spiele, die ich mit 15 programmiert habe. Damals war allerdings das zugehörige Brettspiel gerade populär.

Die einfachere Version ist das Knacken des vom Computer ausgedachten Codes durch den Menschen.
Und die simpelste Variante ist noch mit 4 Löchern, 6 Farben und ohne Mehrfache.
Was Du willst, ist schon die „bessere“ Professionell-Version des Spiels.

Realisiert habe ich das Ganze damals mit Arrays.

Wenn man die originalen Werte von Geheimnis und Versuch noch nach der Prüfung benötigt (Anzeige und weitere Versuche), muss man beide Arrays (Geheimnis und Versuch) erst einmal jeweils in ein Array umkopieren.
Am besten innerhalb einer Prüffunktion in zwei lokale Arrays: test_1 und test_2

Für die Farben hatte ich die Werte 1 bis Anz_F. Die 0 brauchte ich zum Überschreiben, um zu markieren, dass ich die Position schon bewertet hatte. Deshalb auch das Zwischenspeichern.

Im ersten Durchlauf habe ich die Stecker gewertet, bei denen Position und Farbe identisch sind.
Einfach einmal mit der for-Schleife alle Positionen test_1[i] und test_2[i] verglichen und das mit 0 initialisierte stecker_schwarz hochgezählt.

Grundsätzlich sind bei allen Treffern die beiden Vergleichskandidaten in test_1 und test_2 auf 0 gesetzt worden. Damit verhindert man, dass die gleiche Farbe weitere Male in die Bewertung der weißen Stecker einfließt.

Dann analog die weißen Stecker in zwei verschachtelten Schleifen, bei denen ich test_1[i] und test_2[j] verglichen habe.

That’s it.

Damals wäre es selbstverständlich gewesen, dass man Speicher gespart hätte und aus schwarz und weiß einen int-Rückgabewert gebildet hätte: schwarz * Anz_P + weiss.

Ich wüsste nicht, welchen Sinn es gäbe, da etwas mit Rekursion zu machen.

Allerdings gäbe es eine sinnvolle Anwendbarkeit, wenn Du mal die umgekehrte Richtung programmieren willst.
Wobei es mit modernen Computern sogar effiziente Lösungsverfahren gibt, da Du heute die (zig)millionenfache Rechenleistung und Speicherkapazität zur Verfügung hast, als ich bei meiner Lösung damals.

Inzwischen hat man dieses Spiel dahingehend entzaubern, dass man schon den optimalen Lösungsweg ausgerechnet hat. Entsprechend kann man heute sogar gleich diesen Lösungsalgorithmus nachprogrammieren. Weiß aber nicht mehr, ob und wo er veröffentlicht wurde.

Ciao, Allesquatsch