fork download
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <random>
  4. #include <string>
  5. using namespace std;
  6.  
  7. enum class Suit
  8. {
  9. Club,
  10. Diamond,
  11. Heart,
  12. Spade,
  13. count
  14. };
  15.  
  16. enum class Rank
  17. {
  18. Two,
  19. Three,
  20. Four,
  21. Five,
  22. Six,
  23. Seven,
  24. Eight,
  25. Nine,
  26. Ten,
  27. Jack,
  28. Queen,
  29. King,
  30. Ace,
  31. count
  32. };
  33.  
  34. struct card
  35. {
  36. int rank;
  37. int suit;
  38. };
  39.  
  40. void
  41. print_card(const card* this_card)
  42. {
  43. switch (this_card->rank) {
  44. case int(Rank::Two):
  45. cout << "Two";
  46. break;
  47. case int(Rank::Three):
  48. cout << "Three";
  49. break;
  50. case int(Rank::Four):
  51. cout << "Four";
  52. break;
  53. case int(Rank::Five):
  54. cout << "Five";
  55. break;
  56. case int(Rank::Six):
  57. cout << "Six";
  58. break;
  59. case int(Rank::Seven):
  60. cout << "Seven";
  61. break;
  62. case int(Rank::Eight):
  63. cout << "Eight";
  64. break;
  65. case int(Rank::Nine):
  66. cout << "Nine";
  67. break;
  68. case int(Rank::Ten):
  69. cout << "Ten";
  70. break;
  71. case int(Rank::Jack):
  72. cout << "Jack";
  73. break;
  74. case int(Rank::Queen):
  75. cout << "Queen";
  76. break;
  77. case int(Rank::King):
  78. cout << "King";
  79. break;
  80. case int(Rank::Ace):
  81. cout << "Ace";
  82. }
  83. cout << " of ";
  84. switch (this_card->suit) {
  85. case int(Suit::Club):
  86. cout << "clubs.";
  87. break;
  88. case int(Suit::Diamond):
  89. cout << "diamonds.";
  90. break;
  91. case int(Suit::Heart):
  92. cout << "Heart";
  93. break;
  94. case int(Suit::Spade):
  95. cout << "Spade";
  96. }
  97. cout << ".\n";
  98. }
  99.  
  100. int
  101. get_value(const card* c)
  102. {
  103. int result;
  104.  
  105. switch (c->rank) {
  106. case int(Rank::Two)... int(Rank::Ten):
  107. return c->rank + 2;
  108. case int(Rank::Jack)... int(Rank::King):
  109. return 10;
  110. case int(Rank::Ace):
  111. return 11;
  112. default:
  113. cerr << "Internal error" << endl;
  114. exit(-1);
  115. }
  116. }
  117.  
  118. void
  119. initialize_deck(card* d)
  120. {
  121. int card_number = 0;
  122. for (int r = 0; r < int(Rank::count); r++) {
  123. for (int s = 0; s < int(Suit::count); s++) {
  124. d[card_number] = card{ r, s };
  125. cout << "Initializing ";
  126. cout << get_value(&d[card_number]) << " ";
  127. print_card(&(d[card_number]));
  128. card_number++;
  129. }
  130. }
  131. cout << "Initialization of " << card_number << " cards complete." << endl;
  132. }
  133.  
  134. /*
  135. *Takes two cards and swaps their values
  136. */
  137. void
  138. swap_card(card* card1, card* card2)
  139. {
  140. cout << "Swapping:\n";
  141. print_card(card1);
  142. print_card(card2);
  143. swap(card1->rank, card2->rank);
  144. swap(card1->suit, card2->suit);
  145. cout << "Done. New values:\n";
  146. print_card(card1);
  147. print_card(card2);
  148. }
  149.  
  150. void
  151. shuffle_deck(card* d, int len)
  152. {
  153. for (int i = 0; i < len; i++) {
  154. srand(i);
  155. swap_card(&(d[i]), &d[rand() % 51]);
  156. }
  157. }
  158.  
  159. int
  160. main()
  161. {
  162. card* deck = new card[52];
  163. initialize_deck(deck);
  164.  
  165. delete[](deck);
  166.  
  167. return 0;
  168. }
  169.  
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
Initializing 2 Two of clubs..
Initializing 2 Two of diamonds..
Initializing 2 Two of Heart.
Initializing 2 Two of Spade.
Initializing 3 Three of clubs..
Initializing 3 Three of diamonds..
Initializing 3 Three of Heart.
Initializing 3 Three of Spade.
Initializing 4 Four of clubs..
Initializing 4 Four of diamonds..
Initializing 4 Four of Heart.
Initializing 4 Four of Spade.
Initializing 5 Five of clubs..
Initializing 5 Five of diamonds..
Initializing 5 Five of Heart.
Initializing 5 Five of Spade.
Initializing 6 Six of clubs..
Initializing 6 Six of diamonds..
Initializing 6 Six of Heart.
Initializing 6 Six of Spade.
Initializing 7 Seven of clubs..
Initializing 7 Seven of diamonds..
Initializing 7 Seven of Heart.
Initializing 7 Seven of Spade.
Initializing 8 Eight of clubs..
Initializing 8 Eight of diamonds..
Initializing 8 Eight of Heart.
Initializing 8 Eight of Spade.
Initializing 9 Nine of clubs..
Initializing 9 Nine of diamonds..
Initializing 9 Nine of Heart.
Initializing 9 Nine of Spade.
Initializing 10 Ten of clubs..
Initializing 10 Ten of diamonds..
Initializing 10 Ten of Heart.
Initializing 10 Ten of Spade.
Initializing 10 Jack of clubs..
Initializing 10 Jack of diamonds..
Initializing 10 Jack of Heart.
Initializing 10 Jack of Spade.
Initializing 10 Queen of clubs..
Initializing 10 Queen of diamonds..
Initializing 10 Queen of Heart.
Initializing 10 Queen of Spade.
Initializing 10 King of clubs..
Initializing 10 King of diamonds..
Initializing 10 King of Heart.
Initializing 10 King of Spade.
Initializing 11 Ace of clubs..
Initializing 11 Ace of diamonds..
Initializing 11 Ace of Heart.
Initializing 11 Ace of Spade.
Initialization of 52 cards complete.