Guest User

Untitled

a guest
Feb 12th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.30 KB | None | 0 0
  1. class Poker
  2. {
  3. int flush; //Whether It's a flush or not.
  4. int straight; //Whether It's a straight, if so highest card val, else zero.
  5. int pair; //Pair Value = (highest_pair_val)*14^n +
  6. //(next_highest_pair_val)*14^n-1 and so on.
  7.  
  8. int three; //Three value = highest_three_kind_value.
  9. int four; //Same as above.
  10. int highval; //High Card Value = (highest_card_value)*13^n +
  11. //(next_highest_card)*13^n-1 and so on.
  12. public:
  13. void setpoker(string &cards); //Fill the contents of the object based on the input string.
  14. int winorloose(Poker &b); //Determines whether current object wins or looses.
  15. };
  16.  
  17. void Poker::setpoker(string &a)
  18. {
  19. vector <int> hands, cval;
  20. hands.assign(4, 0); //each array element gives the number of cards of
  21. //these type: club, or, diamond, or, heart, or spade.
  22.  
  23. cval.assign(13, 0); //each array element gives the number of cards of
  24. //having value: 2, 3 ...
  25. //(indexing starts at 0, so 2 is at 0 and Ace is at 12)
  26.  
  27. /*
  28. **Code of filling of hands and cval comes here.
  29. */
  30.  
  31. flush = 0; straight = 0; highval = 0;
  32. three = 0; pair = 0; four = 0;
  33.  
  34. for (int i = 0; i < 4; i++)
  35. if (hands[i] == 5)
  36. flush = 1;
  37.  
  38. int stchk = 0; //checks how many cards we have seen straight yet.
  39. int HN = 1, PN = 1;
  40. for (int i = 0; i < 13; i++)
  41. {
  42. if (cval[i] > 0) {
  43. highval += i*HN;
  44. HN *= 13;
  45. if (cval[i] == 2) {
  46. pair += (i+1)*PN;
  47. PN *= 14; //I chosed it to be 14 to be able to distinguish
  48. //between pair of 2(at cval[0]) and no pair.
  49. }
  50. if (cval[i] == 3)
  51. three = i;
  52. if (cval[i] == 4)
  53. four == i;
  54. if (stchk == 4)
  55. straight = i;
  56. else
  57. stchk++;
  58. }
  59. else
  60. stchk = 0;
  61.  
  62. }
  63. }
  64.  
  65. int Poker::winorloose(Poker &b)
  66. {
  67. //royal flush
  68. if (flush && straight == 12)
  69. return 1;
  70. if (b.flush && b.straight == 12)
  71. return 0;
  72.  
  73. //straight flush
  74. if (flush && straight)
  75. if (flush > b.flush || straight > b.straight)
  76. return 1;
  77.  
  78. if (b.flush && b.straight)
  79. if (b.flush > flush || b.straight > straight)
  80. return 0;
  81. //four of kind
  82. if (four > b.four)
  83. return 1;
  84. if (b.four > four)
  85. return 0;
  86.  
  87. //full house
  88. if (three && pair)
  89. if (!(b.three && b.pair) || three > b.three)
  90. return 1;
  91.  
  92. if (b.three && b.pair)
  93. if (!(three && pair) || b.three > three)
  94. return 0;
  95.  
  96. //Flush
  97. if (flush > b.flush)
  98. return 1;
  99. if (b.flush > flush)
  100. return 0;
  101.  
  102. //straight
  103. if (straight > b.straight)
  104. return 1;
  105. if (b.straight > straight)
  106. return 0;
  107.  
  108. //three of kind
  109. if (three > b.three)
  110. return 1;
  111. if (b.three > three)
  112. return 0;
  113.  
  114. //pair
  115. if (pair > b.pair)
  116. return 1;
  117. if (b.pair > pair)
  118. return 0;
  119.  
  120. //highest value card
  121. if (highval > b.highval)
  122. return 1;
  123. if (b.highval > highval)
  124. return 0;
  125. }
Add Comment
Please, Sign In to add comment