Advertisement
Guest User

Untitled

a guest
Mar 30th, 2015
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.42 KB | None | 0 0
  1. #include "HandUtil.h"
  2. #include "Card.h"
  3.  
  4. PokerHandValue::PokerHandValue()
  5. {}
  6.  
  7.  
  8. PokerHandValue::Hand pairCount(Card hand[])
  9. {
  10. int pCount = 0;
  11.  
  12. for (int i = 0; i < 4; ++i)
  13. {
  14. for (int j = i + 1; j < 5; ++j)
  15. {
  16. if (hand[i].getRank() == hand[j].getRank())
  17. {
  18. pCount++;
  19. }
  20. }
  21. }
  22.  
  23. switch (pCount)
  24. {
  25. case 0:
  26. return PokerHandValue::HIGH_CARD;
  27. case 1:
  28. return PokerHandValue::PAIR;
  29. case 2:
  30. return PokerHandValue::TWO_PAIR;
  31. case 3:
  32. return PokerHandValue::THREE_OF_A_KIND;
  33. case 4:
  34. return PokerHandValue::FULL_HOUSE;
  35. case 6:
  36. return PokerHandValue::FOUR_OF_A_KIND;
  37. default:
  38. return PokerHandValue::HIGH_CARD;
  39. }
  40.  
  41. }
  42.  
  43. bool isFlush(Card hand[])
  44. {
  45. if (hand[0].getSuite() == hand[1].getSuite() &&
  46. hand[0].getSuite() == hand[2].getSuite() &&
  47. hand[0].getSuite() == hand[3].getSuite() &&
  48. hand[0].getSuite() == hand[4].getSuite())
  49. {
  50. return true;
  51. }
  52. else
  53. {
  54. return false;
  55. }
  56. }
  57.  
  58. bool isStraight(Card hand[])
  59. {
  60. sort(hand, 5);
  61.  
  62. if (
  63. (hand[0].getRank() + 1 == hand[1].getRank() &&
  64. hand[1].getRank() + 1 == hand[2].getRank() &&
  65. hand[2].getRank() + 1 == hand[3].getRank() &&
  66. hand[3].getRank() + 1 == hand[4].getRank())
  67. ||
  68. (hand[1].getRank() + 1 == hand[2].getRank() &&
  69. hand[2].getRank() + 1 == hand[3].getRank() &&
  70. hand[3].getRank() + 1 == hand[4].getRank() &&
  71. hand[4].getRank() - 12 == hand[0].getRank()))
  72. {
  73. return true;
  74. }
  75. else
  76. {
  77. return false;
  78. }
  79.  
  80. }
  81.  
  82. //sort related
  83. int maxPos(Card myArray[], int end)
  84. {
  85. int maximum = 0;
  86.  
  87. for (int i = end; i > 0; --i)
  88. {
  89. if (myArray[maximum].getRank() < myArray[i].getRank())
  90. {
  91. maximum = i;
  92. }
  93. }
  94. return maximum;
  95. }
  96.  
  97. void sort(Card myArray[], int size)
  98. {
  99. for (int i = size - 1; i > 0; --i)
  100. {
  101. int pos = maxPos(myArray, i);
  102.  
  103. std::swap(myArray[pos], myArray[i]);
  104. }
  105. }
  106.  
  107.  
  108. PokerHandValue::Hand checkWining(Card hand[])
  109. {
  110. sort(hand, 5);
  111.  
  112. if (pairCount(hand) != PokerHandValue::HIGH_CARD)
  113. {
  114. return pairCount(hand);
  115. }
  116. else if (isStraight(hand) && isFlush(hand))
  117. {
  118. if (hand[4].getRank() == Card::KING && hand[0].getRank() == Card::ACE)
  119. {
  120. return PokerHandValue::ROYAL_FLUSH;
  121. }
  122. else
  123. {
  124. return PokerHandValue::STRAIGHT_FLUSH;
  125. }
  126. }
  127. else if (isFlush(hand))
  128. {
  129. return PokerHandValue::FLUSH;
  130. }
  131. else if (isStraight(hand))
  132. {
  133. return PokerHandValue::STRAIGHT;
  134. }
  135. else
  136. {
  137. return PokerHandValue::HIGH_CARD;
  138. }
  139. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement