F# 适合用来开发卡牌游戏 AI 吗?

我正在用 C# 编写一个麻将游戏(中国的传统麻将,不是纸牌接龙那种)。在编写机器人玩家的 AI 代码时,我想知道像 F# 这样的函数式语言是否比我目前使用的 C#(加上大量的 Linq)更适合。我对 F# 了解不多,所以在这里提问。

为了说明我尝试解决的问题,这里简要概述一下麻将:

麻将有点像 Gin Rummy。你有 13 张牌在手,每回合你抽一张牌并丢弃另一张牌,试图改进你的牌,以获得一副获胜的麻将牌,它由 4 个集合和一个对子组成。集合可以是三个相同牌(碰),四个相同牌(杠)或三个连续牌的序列(吃)。你也可以偷另一位玩家丢弃的牌,如果它能完成你的一个集合。

我必须编写的代码来检测机器人是否可以声明三个连续的牌的集合(吃)非常繁琐。我必须找到手中所有独特的牌,然后开始检查是否有一个包含该牌的 3 张牌的序列。检测机器人是否可以胡牌甚至更复杂,因为它需要检测手中是否存在 4 个集合和一个对子。而这仅仅是标准的麻将牌。还有许多“特殊”牌型打破了这些规则,但仍然是胡牌。例如,“十三幺”由 13 张特定的牌组成,“绿一色”仅由绿色的牌组成,等等。

在理想情况下,我希望能够简单地声明麻将的“规则”,并让语言能够将一组 13 张牌与这些规则进行匹配,以检索它满足哪些规则,例如,检查它是否是胡牌或是否包含四个相同的牌。F# 的模式匹配功能是否可以帮助解决这个问题?


回答:

如果您熟悉函数式语言,它们是编写游戏 AI 的绝佳方式——如果您不熟悉,学习函数式语言的挑战将帮助您成长,并让您成为比以往更好的程序员。(我可以诚实地说,声明式的类 Prolog 语言,以及动态脚本/OO/多范式语言,如 Ruby 或 Python!也是如此)。

正如您描述的那样,您的任务应该在这些语言组中的任何一种中都很容易——所以选择一种并开始使用它!我们将共同乐于帮助解决您在这些尝试中产生的任何问题(我个人不熟悉 F# 或 Scala,但很乐意帮助您使用 Haskell、任何 ML 系列语言、Scheme 或 Erlang——其他组也是如此;-)。

认真地说:全面掌握每个大类(过程式、函数式、声明式/子句统一、关系型、动态/多范式等)中的至少一种语言,会使您成为非常优秀的程序员——抛开麻将(麻将也是意大利罗马涅地区,靠近我的家乡博洛尼亚,一种非常受欢迎的经典游戏;-)不谈,任何能添加到您此方面技能的任务都非常值得承担!!!

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注