我正在用C#编写麻将游戏(中国传统游戏,而不是纸牌)。在编写机器人玩家的人工智能代码时,我想知道一个函数式语言F#是否比我当前使用的大量Linq的C#更适合。我对F#了解不多,这就是为什么我在这里提问。
为了说明我的解决方法,以下是麻将的简要概述:
麻将有点像Gin Rummy。你手中有13张牌,在每个回合中,你抽一张牌并丢弃另一张牌,试图将自己的手牌改进到一个赢得麻将的手牌,其中包括4个集和一对牌。集可以是3个相同的(碰),4个相同的(杠)或3张连续牌的序列(吃)。如果它可以完成你的集之一,你还可以从另一个玩家那里偷取废弃物。
我必须写的代码来检测机器人是否能够宣布三个连续的牌组(“吃”)相当乏味。我必须找到手中所有独特的牌,然后开始检查是否存在一个包含手中那个牌的3张牌的序列。检测机器人是否能够去麻将更加复杂,因为它是检测他的手中是否有4个集和一对牌的组合。而且这只是一个标准的麻将手牌。还有许多“特殊”手,打破了这些规则,但仍然是麻将手。例如,“13个独特的奇观”由13个特定的牌组成,“玉皇朝”仅包含绿色染色的牌等。
在完美的世界里,我希望能够简单地指出麻将的“规则”,并使语言能够将13张牌组与这些规则匹配,以获取它满足哪些规则,例如,检查它是否为麻将手或是否包含4个相同的牌。 F#的模式匹配功能可以解决这个问题吗?