F# 是卡牌游戏 AI 的好语言吗? [关闭]

2024-04-29

我正在用 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(使用前将#替换为@)

F# 是卡牌游戏 AI 的好语言吗? [关闭] 的相关文章

  • 不可变数据结构性能

    我不明白作为一个集合的东西怎么可能是不可变的并且仍然具有可接受的性能 根据我在 F Sets 中读到的内容 内部使用红黑树作为其实现 如果每次我们想要向红黑树添加新内容时 我们基本上都必须重新创建它 那么它如何才能具有良好的性能呢 我在这里
  • F# 设置带有参数的 SQLCommand 的最佳方法

    我的 F 程序需要与 SQL Server 通信 在一部分中我有这样的事情 let workFlowDetailRuncommand new SqlCommand query econnection workFlowDetailRuncom
  • 使用 MinMax 和 Alpha-Beta 剪枝找到最佳移动

    我正在为游戏开发 AI 我想使用MinMax算法与Alpha Beta 修剪 我对它的工作原理有一个粗略的了解 但我仍然无法从头开始编写代码 所以我花了两天的时间在网上寻找某种伪代码 我的问题是 我在网上找到的每个伪代码似乎都是基于寻找最佳
  • F# 中的异步 EF 查询

    在使用 EF6 的 C 中 我可以轻松地进行如下异步操作 using var context new MyDbContext var item await context SomeEntities Where e gt e Id 1 Fir
  • 如何在 F# 列表和 F# 元组之间进行转换?

    有没有办法在 F List 和 F Tuple 之间进行转换 例如 1 2 3 gt 1 2 3 1 2 3 4 gt 1 2 3 4 我需要两个函数来做到这一点 let listToTuple list let tupleToList t
  • 如何使用 printf 自定义自定义类型的输出?

    我已经阅读了很多内容专家 F 并正在致力于构建一个实际的应用程序 在调试时 我已经习惯了传递这样的 fsi 命令 以使 repl 窗口中的内容清晰可见 fsi AddPrinter fun x myType gt myType ToStri
  • F# 中使用抽象类还是接口?

    从 C 背景开始摸索 F 在 C 中 决定何时使用接口和何时使用抽象类有明显的区别 在 F 中 我发现两者几乎合而为一 我知道 就 CLR 而言 F 中的做法与 C 中的做法相同 但是在 F 中编程时使用的 最佳实践 是什么 我应该完全避免
  • 在 Blazor 中显示计时器

    我正在尝试在服务器端 Blazor 应用程序中显示倒计时器 我的代码同时使用 F 和 C 语言 该代码在某种程度上可以工作 但计时器永远不会按预期停止 并且计时器显示偶尔不会呈现所有数字 这是我第一次尝试 Blazor 服务器端应用程序 我
  • 如何在插件场景中实现程序集绑定重定向?

    我有一个plugin P延伸和application A NET40 我无法控制 P 程序集 NET40 有一个shared dependency D NET35 P和D都依赖于FSharp Core 但版本不同 P是针对FSharp Co
  • 在 F# 中“合并”受歧视的联合?

    继从这个问题 https stackoverflow com questions 53506325 result vs raise in f async 我在组合不同类型时遇到问题Result类型在一起 以下是一个人为的示例 不是真实的代码
  • F# 中类型约束的顺序

    这适用于 F 4 0 type Something lt a b when b gt seq lt b gt gt 这不会 type Something lt b when b gt seq lt b gt a gt 类型名称中出现意外的符
  • 如何在 F# 中捕获任何异常(System.Exception)而不发出警告?

    我试图捕获异常 但编译器给出警告 此类型测试或向下转型将始终保持 let testFail try printfn Ready for failing failwith Fails with System ArgumentException
  • F# 编码练习

    我一直在 Visual Studio 2010 中涉足 F 我是一名在 C 和 Java 等面向对象语言方面拥有更多代码 架构设计经验的开发人员 为了扩展我的技能并帮助做出更好的决策 我正在尝试使用不同的语言来做不同的事情 特别是掌握使用函
  • F# 类型提供程序与 Lisp 宏

    我一直在阅读有关 F 3 0 类型提供程序的内容 例如here http msdn microsoft com en us library hh156509 aspx 并且它们似乎基于一种编译时代码生成 在这方面我想知道它们与 Lisp 宏
  • 该表达式的类型为 int,但此处与 unit 类型一起使用

    我试图在 F 中获得与此 vb net 代码完全相同的 非功能性的 Function FastPow ByVal num As Double ByVal exp As Integer As Double Dim res As Double
  • 如何在 Keras 中将多个数据集与一个模型一起使用?

    我正在尝试使用 LSTM 网络通过 Keras 和 Tensorflow 进行外汇预测 我当然希望它能够在很多天的交易中进行训练 但要做到这一点 我必须给它提供具有大跳跃和无运动阶段的连续数据 当市场收盘时 这并不理想 因为它变得由于这些跳
  • 将属性应用于返回值 - 在 F# 中

    在 C 中 可以将属性应用于方法的返回 return DynamicAttribute public object Xyz return new ExpandoObject 这在 F 中可能吗 背景 我想要一个用 F 编写的库的方法 该方法
  • F# 中的数组初始化

    如何根据给定的记录类型在 F 中创建和初始化数组 假设我想创建一个包含 100 个 record1 记录的数组 e g type record1 value1 string value2 string let myArray Array i
  • “不等于”的 F# 语法是什么?

    在 C 代码中 它会是这样的 if c 0 some code 那么在 F 中呢 From MSDN 有关 F 算术运算符的页面 http msdn microsoft com en us library dd469493 aspx 看起来
  • F# 命名约定

    F 是否有 官方 命名 大小写约定 我总是怀疑是否使用 C 风格 Class MyFunctionName or Module my function name 在 F 中 您应该混合 BCL 类和 F 库类 它们具有不同的大小写 并且代码

随机推荐