Ich schreibe ein Mahjong-Spiel in C# (das chinesische traditionelle Spiel, nicht die Solitaire-Art). Während ich den Code für die KI des Bot-Spielers schreibe, frage ich mich, ob eine funktionale Sprache wie F # eine geeignetere Sprache wäre als die, die ich momentan verwende, nämlich C# mit einer Menge Linq. Ich weiß nicht viel über F #, weshalb ich hier frage.Ist F # eine gute Sprache für die Kartenspiel-KI?
Um zu zeigen, was ich versuche, zu lösen ist hier eine kurze Zusammenfassung von Mahjong:
Mahjong ein bisschen wie Gin Rommé spielt. Du hast 13 Plättchen in deiner Hand, und in jedem Spielzug ziehst du ein Plättchen und wirfst ein anderes Plättchen aus, um deine Hand zu einer gewinnenden Mahjong-Hand zu verbessern, die aus 4 Sätzen und einem Paar besteht. Sets können 3 (Pungs), 4 (Kongs) oder 3 aufeinanderfolgende Kacheln (Chows) sein. Du kannst auch den Abwurf eines anderen Spielers stehlen, wenn er einen deiner Sets vervollständigen kann.
Der Code, den ich schreiben musste, um festzustellen, ob der Bot 3 aufeinanderfolgende Kacheln (chow) deklarieren kann, ist ziemlich mühsam. Ich muss alle einzigartigen Kacheln in der Hand finden und dann prüfen, ob es eine Folge von 3 Kärtchen gibt, die diese in der Hand enthalten. Es ist noch komplizierter, zu erkennen, ob der Bot gehen kann, denn es ist eine Kombination aus dem Erkennen, ob 4 Sätze und ein Paar in seiner Hand sind. Und das ist nur eine Standard-Mahjong-Hand. Es gibt auch zahlreiche "spezielle" Hände, die diese Regeln brechen, aber immer noch eine Mahjong-Hand sind. Zum Beispiel, "13 einzigartige Wunder" besteht aus 13 spezifischen Fliesen, "Jade Empire" besteht nur aus Fliesen grün gefärbt, etc.
In einer perfekten Welt würde ich gerne in der Lage sein, nur die "Regeln" zu sagen von Mahjong, und die Sprache in der Lage sein, einen Satz von 13 Kacheln mit diesen Regeln abzustimmen, um herauszufinden, welche Regeln er erfüllt, zum Beispiel, ob es eine Mahjong-Hand ist oder ob es eine 4 von einer Art enthält. Ist das etwas, das F # 's Muster-Matching-Funktion helfen kann zu lösen?