2008-10-28 86 views
0

我正在用C#开发一个扑克游戏。目前我正试图让玩家使用RegEx获得比分。我搜索字符串(由卡套装和数字组成)并查找适合或数字以匹配RegEx。如果我得到2场比赛,那么球员有一对,3场比赛他有3种。使用RegEx获得扑克手比分

我有3个班的那一刻,一个卡类(数字和花色),甲板类(包含52张)和手工类,得到五张牌从洗牌甲板。

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

我产生上,我加入了5服和数字,用手摸有使用正则表达式的字符串。

这是一个好主意,或者我应该做的另一种方式,如果是这样,怎么样?

谢谢你的帮助

PS。我是想用刚学会的工具,一切

+0

我不知道手在扑克具有固有“得分”的方面他们。 – user44511 2009-01-12 03:33:22

回答

13

我不认为正则表达式是解决这个问题的恰当方法。您可能应该使用比弦更复杂的表示形式。

+6

你可以学习正则表达式的最重要的事情是何时不使用它们。 – 2008-10-30 03:20:51

+0

我写了正则表达式来处理这个。 http://stackoverflow.com/questions/3463964/regex-to-calculate-straight-poker-hand – Topera 2010-08-12 15:37:10

+0

@Richard - 我只是想告诉大家,它的可能,也不好。 – Topera 2010-08-12 15:50:15

7

您没有提供太多细节,但什么从我已阅读雏程序员之一,我认为你不推OOP很远......

我会说有点数和花色类实例一卡类。那么我有一个处理洗牌/处理甲板类...

我会再有一个手工类,将包含n个卡对象的你的牌手...

通过这种方式,你可以建立规则来评估每手对象物,因此在未来更灵活,更具扩展性...说,如果你不想再拍卡游戏/增加对扑克的另一种变体的支持...

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

2

我同意其他人的意见,即Regex看起来是一个不好的选择。它可能与一对,3种一样,4种。然而,一旦你开始看像冲水,直道和2双手,它可能会有点棘手(或不可能)。

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

1

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

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)

这样一个entiere独特甲板或combinaison由标识素*素*素*素*素

如果有钻石的一个齐平,的5张牌甲板的素数ID必须由divisble(MOD = 0)由菱形ID的冲水(7^5因为钻石色素是7)