2008-10-28 45 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)