Hello!
You’ve seen the pair (two of a kind), three of a kind, so guess what’s coming next?
Yep… four of a kind! (:
Programming the match for this hand is very similar to that of a three of a kind.
Ok first, you can review the poker hands that have already been covered by following any of the links below:
- Pair (jacks or higher only)
- Two pair
- Three of a kind
- Straight
- Flush
- Full house
- Four of a kind (you are here)
- Royal flush (an ace-high straight flush)
Setup
Before we begin writing the main code, here are some data structures you’ll be using. They are briefly discussed here, but if you’d like the full details, check out this link. Otherwise, if you’d like to skip ahead, please click here.
Card values
CardValues = {
two: 2,
three: 3,
four: 4,
five: 5,
six: 6,
seven: 7,
eight: 8,
nine: 9,
ten: 10,
jack: 11,
queen: 12,
king: 13,
ace: 14,
wild: 100
};
Card suits
CardSuits = {
hearts: 1,
diamonds: 2
clubs: 3,
spades: 4
};
Card
Card = function(value, suit) {
this.value = value;
this.suit = suit;
};
Hand
A “hand” is not a custom data structure like the ones above, but an array of Card
objects:
var hand = [
new Card([card value 1], [card suit 1]),
new Card([card value 2], [card suit 2]),
...
new Card([card value 5], [card suit 5])
];
Writing The Code To Identify A Four Of A Kind
A four of a kind is similar very much like a three of a kind. We’re looking for four cards of the same value (rank) instead of three.
First, sort the cards by their rank, in descending order. We previously defined a “utilities” file, named CardMatchUtils.js
, and added a function to it called, CardMatchUtils.SortCardsByDescendingValue
, which can perform the sorting. If you’re just joining this series, CardMatchUtils.js
is a file that is shared by all the poker hand matching functions, because it contains a several functions that they all use. CardMatchUtils.SortCardsByDescendingValue
is one of those functions, because sorting a hand by the ranks of its cards in descending order helps to make the poker hand matching much easier.
The CardsHaveSameValue
utilities function, previously written here, determines if a certain number of cards in the hand have the same rank. In this case, we want to check for four cards.
We’re also using the “wild card”, which is a card that can assume the rank of any card. So, the following hand would also qualify as a four of a kind:
After sorting the cards by their card rank in descending order, the hand looks like:
There are a pair of fives already, and the two wilds will assume another pair of fives.
The pseudocode for matching a four of a kind looks like:
FourOfAKind = FUNCTION(hand) {
SORT the hand by descending card value and store in a variable called sortedHand
IF CardsHaveSameValue(sortedHand, 4)
//we have a three of a kind!
RETURN TRUE
//no four of a kind in this hand
RETURN FALSE
}
The CardsHaveSameValue
function does most of the work here, and you can review that function to see how it functions.
Build Your Own Hand
You can use the controls below to create your own hand to see if it is a four of a kind. It will also recognize previous poker hands we’ve covered up to this point. Have fun playing around with it!
If you have any questions about recognizing a four of a kind, or the above interaction, please let me know at cartrell@gameplaycoder.com.
That’s all for this article. Thanks, and stay tuned as this series continues!
– C. out.
Wildcards aside, assembling a 4 of a kind takes extraordinary fortune and/or somebody with the taste of deception.