我正在写一个麻将游戏在C#(中国传统游戏,而不是那种纸牌)。虽然写了机器人球员的AI代码,我不知道是否像F#函数式语言会比我目前使用的是C#有很多的LINQ更合适的语言。我不知道很多关于F#这就是为什么我在这里问。

要说明我的努力解决,这里的麻将的快速摘要:

麻将起着有点像金罗美。你在你的手中13张牌,并且每一轮,你画一个砖和丢弃一个又一个,试图改善你的手走向一个成功的麻将手,其中包括或4台和一对。套可以是一个种类的3(pungs),4种类(kongs)或连续3瓦(松狮)的序列组成。您还可以窃取其他玩家的弃牌,如果它可以完成你的集之一。

我不得不写的代码,以检测是否机器人可以声明设置3个连续的块(食物)是相当乏味。我必须找到在手的所有独特的地砖,然后开始检查,如果有中包含3个块的顺序一个在手。如果检测机器人可以去麻将是更为复杂,因为它的检测,如果有4套,并在他的手一对组合。而这仅仅是一个标准麻将。还有许多“特殊”双手指打破这些规则,但仍然是一个麻将手。例如,“13个独特奇观”由13个特定瓦片,“玉帝国”仅由颜色为绿色,等等瓦片

在一个完美的世界,我很想能够只是说出麻将的“规则”,并有语言能够一组13张牌对阵这些规则来检索它满足哪些规则,例如,检查它是否是一个麻将手,或者如果它包括一种4。这是不是F#的模式匹配功能可以帮助解决?

有帮助吗?

解决方案

如果你熟悉函数式语言,他们写的游戏认可的好办法 - 如果你不是,一个学习的挑战会帮助你成长,让你更好的程序员比你。 (我可以如实地说为声明性的Prolog类语言相同,动态脚本/ OO /多范式语言如Ruby或Python! - )。

您的任务,因为你描述它应该在这些群体的语言很容易 - 所以挑一个去了!我们将共同乐意帮助应该从这些尝试春天有任何问题(我与F#或斯卡拉亲自陌生,但会很乐意帮助Haskell中,任何ML家族语言,计划,或二郎 - 和类似地,对于其它基团; - 。)

严重:在每个大类(程序,功能,声明/子句统一,关系,动态/多范等)的至少一种语言的完整的命令使你一个严重更好的程序员 - - 除了麻将(和它在意大利罗马涅区的经典流行的游戏,靠近我的家乡博洛尼亚;-),可以在这方面添加到您的名册上任何任务的以及的值得的! !

其他提示

有这么出现在另一种语言什么你不能使自己。

我试图让AI之前使用Java,基于关什么我在序言完成。我认为这将是一个婊子的代码。不过,我只是有一对夫妇的是做了很多繁重的工作方法,同时它的主要方法,它表现的很出色。

您可能需要推倒重来,但不应该有太多你无法在C#中做到这一点,你可以在F#。

请注意:我从来没有听说过F#的面前,但不能说不好。我可以/不可以被吹灭我自己的屁股。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top