Sto scrivendo un gioco di Mahjong in C# (il gioco tradizionale cinese, non il tipo di solitario). Mentre sto scrivendo il codice per l'intelligenza artificiale del robot bot, mi chiedo se un linguaggio funzionale come F # sarebbe una lingua più adatta di quella che uso attualmente, che è C# con un sacco di Linq. Non so molto di F # ed è per questo che chiedo qui.F # è un buon linguaggio per il gioco di carte AI?
Per illustrare quello che cerco di risolvere, ecco un breve riassunto di Mahjong:
Mahjong suona un po 'come Gin Rummy. Hai 13 tessere nella tua mano, e in ogni turno, peschi una tessera e ne scartane un'altra, cercando di migliorare la tua mano verso una mano Mahjong vincente, che consiste in 4 set e una coppia. I set possono essere un 3 di un tipo (pung), 4 di un tipo (kongs) o una sequenza di 3 tessere consecutive (chow). Puoi anche rubare gli scarti di un altro giocatore, se può completare uno dei tuoi set.
Il codice che ho dovuto scrivere per rilevare se il bot può dichiarare 3 set di tessere consecutive (chow) è piuttosto noioso. Devo trovare tutte le tessere uniche nella mano, e poi iniziare a controllare se c'è una sequenza di 3 tessere che contengono quella in mano. Rilevare se il bot può andare Mahjong è ancora più complicato dal momento che è una combinazione di rilevamento se ci sono 4 set e una coppia nella sua mano. E questa è solo una mano Mahjong standard. Ci sono anche numerose mani "speciali" che infrangono quelle regole ma sono ancora una mano del Mahjong. Ad esempio, "13 meraviglie uniche" è composto da 13 tessere specifiche, "Impero Giada" è composto solo da tessere colorate di verde, ecc.
In un mondo perfetto, mi piacerebbe poter solo indicare le "regole" di Mahjong, e avere la lingua in grado di abbinare un set di 13 tessere contro quelle regole per recuperare le regole che soddisfa, ad esempio, controllando se è una mano Mahjong o se include un 4 di un tipo. Questo è qualcosa che la caratteristica di abbinamento del modello di F # può aiutare a risolvere?