【问题标题】:Using RegEx to get Poker Hand score使用 RegEx 获得扑克手分数
【发布时间】:2010-09-19 15:16:29
【问题描述】:

我正在用 C# 开发一个扑克游戏。目前我正在尝试使用RegEx 获取玩家手牌得分。我搜索字符串(由卡片花色和数字组成)并查找与RegEx 匹配的花色或数字。如果我得到 2 场比赛,那么球员有一对,3 场比赛他有 3 场同类。

目前我有 3 个类,一个 Card 类(带有数字和花色),一个 Deck 类(包含 52 张牌)和一个从洗好的牌堆中获得 5 张牌的 Hand 类。

Deck 类有一个shuffleDeck(); Hand 类具有计算分数的功能(在我使用 RegEx 的这些功能中)。

我通过添加手的 5 个花色和数字来生成我使用 RegEx 的字符串。

这是一个好主意还是我应该以其他方式来做,如果是,怎么做?

感谢您的帮助

PS。我是没有经验的程序员之一,想在所有事情上都使用新学的工具

【问题讨论】:

  • 我不确定扑克中的手牌是否有固有的“分数”方面。

标签: c# regex poker


【解决方案1】:

我不认为正则表达式是处理这个问题的合适方法。您可能应该使用比字符串更复杂的手形表示。

【讨论】:

  • 关于正则表达式的最重要的一点是什么时候不使用它们。
  • 我写了正则表达式来处理这个问题。 stackoverflow.com/questions/3463964/…
  • @Richard - 我只想说它可能,不好。
  • @Topera - 酷;不过,我只是在开玩笑;我希望你没有冒犯。我会删除我的评论以防万一:)
  • @Richard - 好的!我的英语不是很好,所以我不能用适当的方式表达自己。但我没事! :D
【解决方案2】:

您没有提供太多细节,但从我所阅读的内容来看,我认为您并没有将 OOP 推得太远......

我会有一个 Card 类,它有一个 Rank 和 Suit 类实例。然后我会有一个处理洗牌/发牌的甲板类......

然后我会有一个 Hand 类,其中包含 n 个 Card 对象的扑克手...

通过这种方式,您可以建立规则来评估每个手牌对象,从而在未来更加灵活和可扩展......比如说,如果您想制作另一个纸牌游戏/添加对另一种扑克变体的支持......

使用正则表达式来做这一切似乎是一个很糟糕的选择。

【讨论】:

    【解决方案3】:

    我同意其他人的观点,Regex 似乎是一个糟糕的选择。它可能适用于对,3个,4个。然而,一旦你开始研究同花、顺子和 2 对等牌,它可能会变得有点棘手(或不可能)。

    我认为最好的解决方案是从最好的牌到最差的牌来评估牌,as shown here,一旦你找到匹配的牌,那就是你的牌。这样可以确保您不会将 4 种误认为 2 对。或同花顺只是顺子,或只是同花。我会使用 mmattax 并为卡片创建一个对象,并为手牌创建一个对象,然后您可以评估每手牌中的牌,看看它们是否符合每手牌所需的标准。

    【讨论】:

    • 实际上用我目前的方法,我可以知道手上是否有 2 对或满堂彩。对于同花,我会搜索第一手牌,如果我得到 5 个匹配,就会出现同花。有了这两个功能,我知道玩家可以拥有的大部分手牌
    • 这样做的工作量很大,正如 Kibbee 指出的那样,同花有时是同花顺,而正则表达式不适合确定这一点。
    • 因为它们是不同的功能,如果我有顺子和同花(返回布尔值),我会知道这手牌有同花顺
    【解决方案4】:

    我认为素数是一个很好的解决方案。 考虑:

    //            D H S C    
    colors =    [7,5,3,2]
    
    //           A  Q  K  J  T  9  8  7  6  5  4  3  2    
    ranks =     [61,59,53,43,41,37,31,29,23,19,17,13,11,61]
    

    唯一的卡片由颜色素数 * 等级素数标识。 (例如,截至钻石:素数 = 7 * 61)

    因此,整个独特的牌组或组合由素数 * 素数 * 素数 * 素数 * 素数标识

    如果有同花钻石,则 5 张牌的素数 ID 必须被同花钻石 ID 整除 (mod = 0) (7 ^ 5,因为钻石的素数是 7)

    【讨论】:

    • 用这个很难计算直道。
    【解决方案5】:

    使用字符串来表示手似乎是一个糟糕的决定。我的建议是使用一个 Enum 来表示花色,另一个来表示卡片的数值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-04
      • 1970-01-01
      • 2014-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-25
      • 1970-01-01
      相关资源
      最近更新 更多