Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "HandUtil.h"
- #include "Card.h"
- PokerHandValue::PokerHandValue()
- {}
- PokerHandValue::Hand pairCount(Card hand[])
- {
- int pCount = 0;
- for (int i = 0; i < 4; ++i)
- {
- for (int j = i + 1; j < 5; ++j)
- {
- if (hand[i].getRank() == hand[j].getRank())
- {
- pCount++;
- }
- }
- }
- switch (pCount)
- {
- case 0:
- return PokerHandValue::HIGH_CARD;
- case 1:
- return PokerHandValue::PAIR;
- case 2:
- return PokerHandValue::TWO_PAIR;
- case 3:
- return PokerHandValue::THREE_OF_A_KIND;
- case 4:
- return PokerHandValue::FULL_HOUSE;
- case 6:
- return PokerHandValue::FOUR_OF_A_KIND;
- default:
- return PokerHandValue::HIGH_CARD;
- }
- }
- bool isFlush(Card hand[])
- {
- if (hand[0].getSuite() == hand[1].getSuite() &&
- hand[0].getSuite() == hand[2].getSuite() &&
- hand[0].getSuite() == hand[3].getSuite() &&
- hand[0].getSuite() == hand[4].getSuite())
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- bool isStraight(Card hand[])
- {
- sort(hand, 5);
- if (
- (hand[0].getRank() + 1 == hand[1].getRank() &&
- hand[1].getRank() + 1 == hand[2].getRank() &&
- hand[2].getRank() + 1 == hand[3].getRank() &&
- hand[3].getRank() + 1 == hand[4].getRank())
- ||
- (hand[1].getRank() + 1 == hand[2].getRank() &&
- hand[2].getRank() + 1 == hand[3].getRank() &&
- hand[3].getRank() + 1 == hand[4].getRank() &&
- hand[4].getRank() - 12 == hand[0].getRank()))
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- //sort related
- int maxPos(Card myArray[], int end)
- {
- int maximum = 0;
- for (int i = end; i > 0; --i)
- {
- if (myArray[maximum].getRank() < myArray[i].getRank())
- {
- maximum = i;
- }
- }
- return maximum;
- }
- void sort(Card myArray[], int size)
- {
- for (int i = size - 1; i > 0; --i)
- {
- int pos = maxPos(myArray, i);
- std::swap(myArray[pos], myArray[i]);
- }
- }
- PokerHandValue::Hand checkWining(Card hand[])
- {
- sort(hand, 5);
- if (pairCount(hand) != PokerHandValue::HIGH_CARD)
- {
- return pairCount(hand);
- }
- else if (isStraight(hand) && isFlush(hand))
- {
- if (hand[4].getRank() == Card::KING && hand[0].getRank() == Card::ACE)
- {
- return PokerHandValue::ROYAL_FLUSH;
- }
- else
- {
- return PokerHandValue::STRAIGHT_FLUSH;
- }
- }
- else if (isFlush(hand))
- {
- return PokerHandValue::FLUSH;
- }
- else if (isStraight(hand))
- {
- return PokerHandValue::STRAIGHT;
- }
- else
- {
- return PokerHandValue::HIGH_CARD;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement