0

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

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

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

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

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

感谢您的帮助

PS。我是没有经验的程序员之一,想要使用新学的工具来处理所有事情

4

5 回答 5

13

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

于 2008-10-28T17:29:26.757 回答
7

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

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

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

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

使用正则表达式来完成所有这些似乎是一个非常糟糕的选择。

于 2008-10-28T17:23:51.060 回答
2

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

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

于 2008-10-28T17:40:46.890 回答
2

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

//            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)

于 2010-12-16T09:52:55.293 回答
1

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

于 2008-10-28T17:50:45.890 回答