F#是纸牌游戏AI的好语言吗?

时间:2009-07-01 04:20:13

标签: f# artificial-intelligence

我正在用C#编写一个麻将游戏(中国传统游戏,不是纸牌游戏)。在为机器人播放器的AI编写代码时,我想知道像F#这样的函数式语言是否比我目前使用的语言更合适,而C#中有很多Linq。我不太了解F#,这就是我在这里问的原因。

为了说明我试图解决的问题,这里是麻将的快速摘要:

Mahjong有点像Gin Rummy。你手上有13块瓷砖,每转一圈,你画一块瓷砖并丢弃另一块瓷砖,试图改善你的手朝着一个胜利的麻将手,其中包括4套和一对。集合可以是3种(pungs),4种(kongs)或3种连续瓦片(chows)的序列。你也可以偷走另一个玩家的丢弃,如果它可以完成你的一套。

我必须编写的代码来检测机器人是否可以声明3个连续的瓷砖集(chow)是相当繁琐的。我必须找到手中所有独特的瓷砖,然后开始检查手中是否有一个包含3个瓷砖的序列。检测机器人是否可以进入麻将更加复杂,因为它是检测他手中是否有4组和一对的组合。而这只是一个标准的麻将牌。还有许多“特殊”牌可以打破这些规则,但仍然是麻将牌。例如,“13个独特的奇迹”由13个特定的瓷砖组成,“玉帝国”仅包含绿色的瓷砖等。

在一个完美的世界里,我希望能够简单地陈述麻将的“规则”,并且让语言能够将一组13个磁贴与这些规则相匹配,以检索它实现的规则,例如,检查它是麻将牌还是包含4种麻将牌。这是F#的模式匹配功能可以帮助解决的吗?

2 个答案:

答案 0 :(得分:8)

如果您熟悉函数式语言,那么它们是编写游戏AI的好方法 - 如果您不熟悉,那么学习它的挑战将帮助您成长,并为您留下比您更好的程序员。 (对于声明性的Prolog类语言,以及动态脚本/ OO /多范式语言,如Ruby或Python,我可以说实话一样!)。

您描述的任务在任何一组语言中都应该很容易 - 所以选择一个并去做吧!我们将很乐意帮助解决这些尝试中出现的任何问题(我个人不熟悉F#或Scala,但很乐意帮助Haskell,任何ML家庭语言,Scheme或Erlang - 以及其他组也是如此; - )。

说真的:完全掌握每个广泛类别中的至少一种语言(程序,功能,声明/子句统一,关系,动态/多范式等)使你成为认真的更好的程序员 - - 麻将分开(这是意大利罗马涅地区一个经典的流行游戏,靠近我的家乡博洛尼亚;-),任何可以在这方面增加你的名单的任务都是很好值得进行! !

答案 1 :(得分:1)

你无法用另一种语言表达自己。

我之前尝试使用java制作AI,基于我在Prolog中所做的事情。我认为编码会很麻烦。但是,我只是有几种方法可以完成很多繁重的工作,从主要方法中解脱出来,而且效果非常好。

您可能需要重新发明轮子,但在C#中你不能用F#做很多事情。

注意:我之前从未听说过F#,但它不会那么糟糕。我可能/可能没有吹出我自己的屁股。