Private Function GetPokerHandValue(hand As colHand) As Type_PokerHand
Dim cardSuit As Long
Dim cardFaceValue As Long
GetPokerHandValue.HighCard = hand(5).facevalue
'Check for straight flush
If hand(1).suit = hand(2).suit And hand(1).suit = hand(3).suit And hand(1).suit = hand(4).suit And hand(1).suit = hand(5).suit Then
If hand(1).facevalue + 1 = hand(2).facevalue Then
If hand(2).facevalue + 1 = hand(3).facevalue Then
If hand(3).facevalue + 1 = hand(4).facevalue Then
If hand(4).facevalue + 1 = hand(5).facevalue Or (hand(1).facevalue = Value_2 And hand(5).facevalue = Value_Ace) Then
GetPokerHandValue.HandType = PokerHand_StraightFlush
If hand(1).facevalue = Value_2 And hand(5).facevalue = Value_Ace Then
GetPokerHandValue.HighCard = hand(4).facevalue
End If
Exit Function
End If
End If
End If
End If
End If
'Check for Four of a kind
If (hand(1).facevalue = hand(2).facevalue And hand(1).facevalue = hand(3).facevalue And hand(1).facevalue = hand(4).facevalue) Or _
(hand(2).facevalue = hand(3).facevalue And hand(2).facevalue = hand(4).facevalue And hand(2).facevalue = hand(5).facevalue) Then
GetPokerHandValue.HandType = PokerHand_FourOfAKind
If hand(4).facevalue = hand(5).facevalue Then
GetPokerHandValue.HighCard = hand(5).facevalue
Else
GetPokerHandValue.HighCard = hand(4).facevalue
End If
Exit Function
End If
'Check for a Full House
If (hand(1).facevalue = hand(2).facevalue And hand(1).facevalue = hand(3).facevalue And hand(4).facevalue = hand(5).facevalue) Or _
(hand(3).facevalue = hand(4).facevalue And hand(3).facevalue = hand(5).facevalue And hand(1).facevalue = hand(2).facevalue) Then
GetPokerHandValue.HandType = PokerHand_FullHouse
Exit Function
End If
'Check for a flush
If hand(1).suit = hand(2).suit And hand(1).suit = hand(3).suit And hand(1).suit = hand(4).suit And hand(1).suit = hand(5).suit Then
GetPokerHandValue.HandType = PokerHand_Flush
Exit Function
End If
'Check for a straight
If hand(1).facevalue + 1 = hand(2).facevalue Then
If hand(2).facevalue + 1 = hand(3).facevalue Then
If hand(3).facevalue + 1 = hand(4).facevalue Then
If hand(4).facevalue + 1 = hand(5).facevalue Or (hand(1).facevalue = Value_2 And hand(5).facevalue = Value_Ace) Then
GetPokerHandValue.HandType = PokerHand_Straight
If hand(1).facevalue = Value_2 And hand(5).facevalue = Value_Ace Then
GetPokerHandValue.HighCard = hand(4).facevalue
End If
Exit Function
End If
End If
End If
End If
'Check for Three of a kind
If (hand(1).facevalue = hand(2).facevalue And hand(1).facevalue = hand(3).facevalue) Or _
(hand(2).facevalue = hand(3).facevalue And hand(2).facevalue = hand(4).facevalue) Or _
(hand(3).facevalue = hand(4).facevalue And hand(3).facevalue = hand(5).facevalue) Then
GetPokerHandValue.HandType = PokerHand_ThreeOfAKind
If hand(1).facevalue = hand(2).facevalue Then
GetPokerHandValue.HighCard = hand(3).facevalue
ElseIf hand(4).facevalue = hand(5).facevalue Then
GetPokerHandValue.HighCard = hand(5).facevalue
Else
GetPokerHandValue.HighCard = hand(4).facevalue
End If
Exit Function
End If
'Check for two pairs
If (hand(1).facevalue = hand(2).facevalue And hand(3).facevalue = hand(4).facevalue) Or _
(hand(1).facevalue = hand(2).facevalue And hand(4).facevalue = hand(5).facevalue) Or _
(hand(2).facevalue = hand(3).facevalue And hand(4).facevalue = hand(5).facevalue) Then
GetPokerHandValue.HandType = PokerHand_TwoPairs
If (hand(1).facevalue = hand(2).facevalue And hand(3).facevalue = hand(4).facevalue) Then
GetPokerHandValue.HighCard = hand(4).facevalue
Else
GetPokerHandValue.HighCard = hand(5).facevalue
End If
Exit Function
End If
'Check for one pair
If hand(1).facevalue = hand(2).facevalue Or _
hand(2).facevalue = hand(3).facevalue Or _
hand(3).facevalue = hand(4).facevalue Or _
hand(4).facevalue = hand(5).facevalue Then
GetPokerHandValue.HandType = PokerHand_OnePair
If hand(1).facevalue = hand(2).facevalue Then
GetPokerHandValue.HighCard = hand(2).facevalue
Else
If hand(2).facevalue = hand(3).facevalue Then
GetPokerHandValue.HighCard = hand(3).facevalue
Else
If hand(3).facevalue = hand(4).facevalue Then
GetPokerHandValue.HighCard = hand(4).facevalue
Else
GetPokerHandValue.HighCard = hand(5).facevalue
End If
End If
End If
Exit Function
End If
'highest card
GetPokerHandValue.HandType = PokerHand_HighCard
End Function