Mastermind programmieren

Du hast eine Idee für ein Projekt?
Antworten
BlackJack

@Riebers: So ein ”umgekehrtes” Mastermind, wo der Rechner die Kombination raten muss, ist nicht wirklich schwer zu programmieren. Du siehst ja, dass das Programm nicht lang ist. :-)

Das Vorgehen ist folgendermassen:

❶ Erzeuge alle Kombinationen.

❷ Nimm die erste der noch verbleibenden Kombinationen als Tipp und frage den Spieler wie viele Zahlen richtig sind, und wie viele richtig und am richtigen Platz sind.

❸ Wenn alle Zahlen richtig geraten und am richtigen Platz sind → Fertig!

❹ Dann wird ein Filter auf die restlichen Kombinationen gesetzt der nur noch solche durchlässt bei denen ein Vergleich mit dem Tipp die gleiche Anzahl von richtigen Zahlen und die gleiche Anzahl an Zahlen am richtigen Platz ergibt. Alle anderen können als Ergebnis ja nicht in Frage kommen.

❺ Weiter bei ❷

Falls bei ❷ keine Kombinationen mehr übrig sind, dann hat der Spieler entweder eine Kombination vorher falsch bewertet, oder im Programm ist ein Fehler, weil *eine* von allen Kombinationen *muss* der Treffer sein.

Bezüglich offizieller Richtlinien zu Kommentaren: das was Sirius3 geschrieben hat und der Style Guide for Python Code. Bei Melewo ist das Beispiel vielleicht auch ungünstig gewählt, weil das Matheformeln sind und da üblicherweise deutlich mehr an Information und nötigen Domänenwissen hinter steht als zum Beispiel bei dem Mastermind. An solchen Stellen schreibe ich üblicherweise als Kommentar einen Verweis auf Literatur, also Webseite oder Buch, wo eine ausführliche Beschreibung zu beispielsweise der Formel für die Bezierkurve steht. Denn ich würde mir auch in einem Extradokument nicht zutrauen das mathematisch besser zu beschreiben als eine gute, vorhandene Quelle.

Ratschlag zur GUI wäre sich OOP anzuschauen und dann die Version ohne GUI so umzuschreiben, dass die Spiellogik und die Benutzerinteraktion komplett getrennt sind, und das in der Spiellogik keine Schleife enthalten ist die das Spiel antreibt, sondern das die im Code für die Benutzerinteraktion steckt. Denn das ist dann bei der GUI auch so.

Im Moment ist das ja noch überhaupt nicht getrennt. Alle drei Funktionen enthalten Code der etwas mit der Text-GUI zu tun hat. Entweder direkt (`print()`/`input()`) oder indirekt in dem nicht nur etwas berechnet wird, sondern auch gleich Zeichenketten für die Ausgabe erstellt werden.
Antworten