我正在用C#写一个麻将游戏(中国传统游戏,不是纸牌游戏).在为机器人播放器的AI编写代码时,我想知道像F#这样的函数式语言是否比我目前使用的语言更合适,而C#中有很多Linq.我不太了解F#,这就是我在这里问的原因.
为了说明我试图解决的问题,这里是麻将的简要总结:
麻将有点像Gin Rummy.你手上有13块瓷砖,每转一圈,你画一块瓷砖并丢弃另一块瓷砖,试图改善你的手牌,以获得麻将牌,包括4套和一对.集合可以是3种(pungs),4种(kongs)或3种连续瓦片(chows)的序列.你也可以偷走另一个玩家的丢弃,如果它可以完成你的一套.
我必须写的代码来检测机器人是否可以声明3个连续的瓷砖集(chow)是相当繁琐的.我必须找到手中所有独特的瓷砖,然后开始检查手中是否有一个包含3个瓷砖的序列.检测机器人是否可以去麻将更加复杂,因为它是检测他手中是否有4组和一对的组合.而这只是一个标准的麻将牌.还有许多"特殊"牌可以打破这些规则,但仍然是麻将牌.例如,"13个独特的奇迹"由13个特定的瓷砖组成,"玉帝国"仅由绿色瓷砖等组成.
在一个完美的世界里,我希望能够简单地陈述麻将的"规则",并且让语言能够将一组13个区块与这些规则相匹配,以检索它实现的规则,例如,检查是否它是一个麻将手或者它包括4种类型.这是F#的模式匹配功能可以帮助解决的吗?