Mastermind NPC


#1
Hi,
ich suche für mein Mastermindspiel ein paar Lösungsalgorithmen, sprich der NPC soll den von mir vorgegebenen Farbcode ermitteln.
Durch das stöbern in Wikipedia bin ich auf 2 Algorithmen gestoßen:
- Six-guess algorithm
- Five-guess algorithm
Da ich durch googlen keinen Javacode gefunden habe frage ich hier nach. Wenn keiner einen Javacode hat, würde mir auch eine umsetzbare Beschreibung genügen.

Danke im Vorraus
 
#2
Hi und Willkommen bei tutorials.de :)

Die Beschreibung steht doch dort?
Bei welchem Punkt/welchen Punkten hast du Probleme?

Hast du einen eigenen Codeversuch?
 

HonniCilest

Erfahrenes Mitglied
#4
Für einen Computer-Gegner würde ich auf jeden Fall den Six-Guess Algorithm nehmen, ich denke niemand mag es, wenn der eigene Code immer so früh erraten werden würde ;)

Ein Hinweis von mir vorab, ich würde Abstand davon nehmen einen Buchstaben bei der Erklärung einer festen Farbe zuzuordnen, also musst du auf jeden Fall in jeder Runde die Zuordnung immer neu festlegen. Da Fallen mir Stichworte wie Random oder Shuffle ein.

Dann generierst du die Liste, kategoriesortiert, innerhalb der Kategorie alphabetisch sortiert. Ich würde dazu 4 einzelne ArrayLists für die Kategorien und eine für die verbleibenden Lösungen wählen. Letztere baust du zusammen mit addAll() und kannst du später mit remove() bzw. removeAll() kürzen.

Dann nimmst du abcd. In folgenden 3 Fällen kannst du die Liste so stark kürzen, dass du mit dieser weiterabreiten kannst:
a) Alle schwarz --> Gewonnen
b) Alle schwarz/weiß oder weiß -->
- Kategorie 2, 3 und 4 werden entfernt
- alle Lösungen aus Kategorie 1 mit e oder f werden entfernt
- weiter mit dem ersten Eintrag der verbleibenden Liste welcher nach den Farbangaben möglich ist
c) Alle Leer -->
- Kategorie 1 wird entfernt
- alle Lösungen aus Kategorie 2, 3 und 4 werden entfernt, welche andere Buchstaben enthalten als e und f
- weiter mit dem ersten Eintrag der verbleibenden Liste welcher nach den Farbangaben möglich ist
d) mixed -->
- weiter mit bcde

Bei dem Punkt "weiter mit dem ersten Eintrag der verbleibenden Liste welcher nach den Farbangaben möglich ist" kann man sich sicher streiten, ob man alle nicht mehr möglichen Einzelnen Lösungen löscht und dann den ersten Eintrag nimmt, oder diese erstmal alle drin lässt und eben immer nur die Lösung überprüft, welche man gerade einfügen möchte. Aber ich denke die genannte Variante ist weitaus performanter.
Der Vorgang weiderholt sich insgesamt 4 mal, falls bei den ersten 3 Fälllen d auftreten sollte. Beim vierten Mal gibt es dann eine Fallunterscheidung anhand der ersten möglichen Lösung.

Näheres ist sicher in deinem guide beschrieben.

Hoffe es konnte dir eine Orientierung bieten.