我正在用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#的模式匹配功能可以帮助解决的吗?
如果您熟悉函数式语言,那么它们是编写游戏AI的好方法 - 如果您不熟悉,那么学习它的挑战将帮助您成长,并为您留下比您更好的程序员.(对于声明性的Prolog类语言,以及动态脚本/ OO /多范式语言,如Ruby或Python,我可以说实话一样!).
您描述它的任务在任何这些语言组中应该很容易 - 所以选择一个并去寻找它!我们将很乐意帮助解决这些尝试中出现的任何问题(我个人不熟悉F#或Scala,但很乐意帮助Haskell,任何ML家庭语言,Scheme或Erlang - 以及同样适用于其他群体;-).
说真的:完全掌握每个广泛类别中的至少一种语言(程序,功能,声明/条款统一,关系,动态/多范式等)使你成为一个认真更好的程序员 - 麻将分开(这是一个经典的流行游戏在意大利罗马涅地区,靠近我的家乡博洛尼亚;-),可以在这方面添加到您的名册上任何任务以及值得的!