Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用正则表达式获得扑克手分数_C#_Regex_Poker - Fatal编程技术网

C# 使用正则表达式获得扑克手分数

C# 使用正则表达式获得扑克手分数,c#,regex,poker,C#,Regex,Poker,我正在用C#开发一款扑克游戏。目前,我正在尝试使用RegEx获取玩家的手牌得分。我搜索字符串(由卡片套装和数字组成),并查找套装或数字以匹配RegEx。如果我得到2场比赛,那么球员有一对,3场比赛,他有3场 目前我有3门课,一门牌课(带数字和套装),一门牌组课(包含52张牌)和一门手牌课,从洗牌牌组中获得5张牌 甲板类有一个shuffleDeck(); Hand类具有计算分数的函数(在这些函数中我使用的是RegEx) 我通过添加手上的5套西装和数字来生成我使用的RegEx 这是一个好主意还是我应

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

目前我有3门课,一门牌课(带数字和套装),一门牌组课(包含52张牌)和一门手牌课,从洗牌牌组中获得5张牌

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

我通过添加手上的5套西装和数字来生成我使用的
RegEx

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

谢谢你的帮助


另外,我是一个没有经验的程序员,想用一个新学到的工具来做任何事情

你没有提供太多的细节,但是从我所读到的,我认为你没有把OOP推进太远

我会有一个卡类,有一个等级和适合类实例。然后我会有一个处理洗牌/交易的甲板类

然后我将有一个手类,它将包含你的n张牌对象的扑克手

通过这种方式,您可以建立规则来评估每个手牌对象,从而在将来更灵活、更可扩展……比如,如果您想进行另一种纸牌游戏/添加对另一种扑克的支持


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

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

我同意其他人的看法,正则表达式似乎是一个糟糕的选择。它可能会对成对的人起作用,3对一类,4对一类。然而,一旦你开始观察像潮水、直腿和双掌这样的手,它可能会变得有点棘手(或不可能)


我认为最好的解决办法是从最好的牌到最差的牌进行评估,一旦你找到匹配的牌,那就是你的牌。这样可以确保您不会将一种类型的4误认为是2对。或者直接冲水,或者直接冲水。我会使用mmattax为牌创建一个对象,为手创建一个对象,然后您可以评估每只手牌中的牌,看看它们是否符合每只手牌所需的标准。

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

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

//            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(7^5,因为钻石的颜色素数是7)整除(mod=0)

实际上,用我目前的方法,我可以知道手上是否有2对或一个完整的房子。如果我得到了5个匹配项,我就会搜索第一手牌西装,然后就有了一个同花顺。有了这两个函数,我知道一个玩家可以拥有的大多数手牌,这样做需要做很多工作,正如Kibbee指出的,同花顺有时是直花齐花,正则表达式不适合确定这一点。因为它们是不同的函数,如果我有直花齐花(返回bool)最重要的是,我知道手是直的。关于正则表达式,你能学到的最重要的事情是什么时候不使用它们。我写正则表达式就是为了处理这个问题@理查德-我只想告诉你这是可能的,不好。@Topera-酷;不过我只是在开玩笑;我希望你没有生气。我会删除我的评论以防万一:)@Richard-好的!我的英语不是很好,所以我不能用恰当的方式表达自己。但我没事!:我不确定扑克牌中的牌是否有一个固有的“得分”方面。用这个来计算直杆是很困难的。