我正在用 C# 编写一个麻将游戏(中国传统游戏,不是纸牌游戏)。在为机器人玩家的 AI 编写代码时,我想知道像 F# 这样的函数式语言是否比我目前使用的带有大量 Linq 的 C# 更合适。我对 F# 不太了解,这就是我在这里问的原因。
为了说明我试图解决的问题,以下是麻将的快速摘要:
麻将有点像金罗美牌。您手上有 13 张牌,每回合抽一张牌并弃掉另一张牌,尝试将您的牌提高到获胜的麻将牌,该牌由 4 组和一对组成。套装可以是 3 个同种牌 (pungs)、4 个同种牌 (kongs) 或 3 个连续牌的序列 (chows)。如果其他玩家的弃牌可以完成您的一组,您也可以窃取该弃牌。
我必须编写的代码来检测机器人是否可以声明 3 个连续的图块集 (chow),这非常乏味。我必须找到手中所有独特的牌,然后开始检查是否存在 3 个牌的序列包含手中的牌。检测机器人是否可以打麻将就更复杂了,因为它需要检测他手中是否有 4 组和一对。这只是一手标准的麻将手牌。还有许多“特殊”手牌违反了这些规则,但仍然是麻将手牌。例如,“十三奇观”由 13 块特定的瓷砖组成,“翡翠帝国”仅由绿色瓷砖组成等。
在一个完美的世界中,我希望能够陈述麻将的“规则”,并且让该语言能够将一组 13 个麻将牌与这些规则进行匹配,以检索它满足哪些规则,例如,检查是否这是一手麻将牌,或者是否包含 4 种牌。 F# 的模式匹配功能可以帮助解决这个问题吗?
如果您熟悉函数式语言,那么它们是编写游戏 AI 的好方法,如果您不熟悉,学习一门语言的挑战将帮助您成长,并让您成为比以前更好的程序员。 (我可以诚实地说,对于类似 Prolog 的声明性语言,以及动态脚本/面向对象/多范式语言,例如 Ruby 或 Python,也是如此!-)。
您所描述的任务对于这些语言组中的任何一种来说都应该很容易 - 所以选择一种并开始吧!我们将很乐意帮助解决这些尝试中出现的任何问题(我个人不熟悉 F# 或 Scala,但很乐意为 Haskell、任何 ML 系列语言、Scheme 或 Erlang 提供帮助 - 并且其他组也类似;-)。
认真地说:完全掌握每个大类中的至少一种语言(过程、功能、声明/从句统一、关系、动态/多范式等)使您成为严重地更好的程序员——除了麻将(这是意大利罗马涅地区的一种经典流行游戏,靠近我的家乡博洛尼亚;-),任何可以在这方面添加到您的名册中的任务都是well值得承担!!!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)