将 2 条信息粘合到一个变量中几乎总是一个坏主意。类可以轻松跟踪卡片的各种数据:
Public Class Card
Private Shared Faces() As String = {"Jack", "Queen", "King", "Ace"}
Private Shared Names() As String = {"Ace", "Deuce", ..."King"}
Public Property Value As Int32
Public Property Rank As Int32
Public Property Suit As String
Public Property Img As Image
Public Property Name As String
Public Overrides Function ToString() As String
Return String.Format("{0} of {1}", Names(Rank - 1), Suit)
End Function
End Class
有一个Value
and a Rank
因为一张牌总是具有相同的等级,但根据游戏的不同,其价值可能会发生变化(例如尤克牌和百家乐)。 Deck 类可以使用Stack(Of Card)
一只手可以是List(Of Card)
或数组,具体取决于游戏。
给定 5 张牌的数组,使用 linq 对扑克牌进行排名很简单(假设是扑克):
Dim pairs = cards.
GroupBy(Function(v) v.Value,
Function(key, values) New With {
Key .Rank = key,
Key .Count = values.Count()
}).
OrderByDescending(Function(o) o.Count).
ThenByDescending(Function(r) r.Rank).
ToArray()
If pairs.Count
是 4,有四种;同样 2pair 当Count=2
当计数为一时为一对。如果pairs(0).Count = 3
然后你就有旅行了。
If pairs.Count = 2 AndAlso pairs(0).Count = 3
,那么你就有了一个 FullHouse。非常简单的是,对花色进行分组以确定同花,然后将它们放在一起以查看它是否是顺子。
请务必从高到低测试手牌:当确实是葫芦时,您不想返回 2 对。