Advertisement
Guest User

card.h

a guest
Oct 7th, 2019
402
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.68 KB | None | 0 0
  1. #pragma once
  2.  
  3. #include <iostream>
  4. #include <array>
  5. #include <ctime>
  6. #include <cstdlib>
  7.  
  8. enum class Result
  9. {
  10.     PLAYER_WINS,
  11.     PLAYER_LOSE,
  12.     NO_ONE_WINS
  13. };
  14.  
  15. enum class Dignity
  16. {
  17.     TWO,
  18.     THREE,
  19.     FOUR,
  20.     FIVE,
  21.     SIX,
  22.     SEVEN,
  23.     EIGHT,
  24.     NINE,
  25.     TEN,
  26.     JACK,
  27.     LADY,
  28.     KING,
  29.     ACE,
  30.     MAX_DIGNITY
  31. };
  32.  
  33. enum class Suit
  34. {
  35.     CLUBS,
  36.     DIAMOND,
  37.     HEARTS,
  38.     PEAKS,
  39.     MAX_SUIT
  40. };
  41.  
  42. struct Card
  43. {
  44.     Dignity dignity;
  45.     Suit suit;
  46. };
  47.  
  48. void printCard(const Card &card)
  49. {
  50.     using namespace std;
  51.  
  52.     switch (card.dignity) {
  53.         case Dignity::TWO:
  54.             cout << '2';
  55.             break;
  56.  
  57.         case Dignity::THREE:
  58.             cout << '3';
  59.             break;
  60.  
  61.         case Dignity::FOUR:
  62.             cout << '4';
  63.             break;
  64.  
  65.         case Dignity::FIVE:
  66.             cout << '5';
  67.             break;
  68.  
  69.         case Dignity::SIX:
  70.             cout << '6';
  71.             break;
  72.  
  73.         case Dignity::SEVEN:
  74.             cout << '7';
  75.             break;
  76.  
  77.         case Dignity::EIGHT:
  78.             cout << '8';
  79.             break;
  80.  
  81.         case Dignity::NINE:
  82.             cout << '9';
  83.             break;
  84.  
  85.         case Dignity::TEN:
  86.             cout << "10";
  87.             break;
  88.  
  89.         case Dignity::JACK:
  90.             cout << 'J';
  91.             break;
  92.  
  93.         case Dignity::LADY:
  94.             cout << 'L';
  95.             break;
  96.  
  97.         case Dignity::KING:
  98.             cout << 'K';
  99.             break;
  100.  
  101.         case Dignity::ACE:
  102.             cout << 'A';
  103.             break;
  104.  
  105.         case Dignity::MAX_DIGNITY:
  106.             break;
  107.     }
  108.  
  109.     switch (card.suit) {
  110.         case Suit::CLUBS:
  111.             cout << 'C';
  112.             break;
  113.  
  114.         case Suit::DIAMOND:
  115.             cout << 'D';
  116.             break;
  117.  
  118.         case Suit::HEARTS:
  119.             cout << 'H';
  120.             break;
  121.  
  122.         case Suit::PEAKS:
  123.             cout << 'P';
  124.             break;
  125.  
  126.         case Suit::MAX_SUIT:
  127.             break;
  128.     }
  129.  
  130.     cout << endl;
  131. }
  132.  
  133. void printDeck(const std::array<Card, 52> &deck)
  134. {
  135.     short printedCardInRow { 0 };
  136.  
  137.     for (auto card : deck) {
  138.         if (printedCardInRow == 13) {
  139.             std::cout << '\n';
  140.         }
  141.  
  142.         printCard(card);
  143.  
  144.         std::cout << ' ';
  145.         ++printedCardInRow;
  146.     }
  147. }
  148.  
  149. void swapCard(Card &cardOne, Card &cardTwo)
  150. {
  151.     Card tmpCard = cardTwo;
  152.     cardTwo = cardOne;
  153.     cardOne = tmpCard;
  154. }
  155.  
  156. static int getRandomNumber(int min, int max)
  157. {
  158.     static const double fraction = 1.0 / (static_cast<double>(RAND_MAX) + 1.0);
  159.  
  160.     return static_cast<int>(rand() * fraction * (max - min + 1) + min);
  161. }
  162.  
  163. void shuffleDeck(std::array<Card, 52> &deck)
  164. {
  165.     for (int i = 0; i < static_cast<int>(deck.size()); ++i) {
  166.         int randomCardIndex = getRandomNumber(1, 52);
  167.  
  168.         swapCard(deck[static_cast<unsigned long long>(i)], deck[static_cast<unsigned long long>(randomCardIndex)]);
  169.     }
  170. }
  171.  
  172. int getCardValue(Card &card)
  173. {
  174.     switch (card.dignity) {
  175.         case Dignity::TWO:
  176.             return 2;
  177.  
  178.         case Dignity::THREE:
  179.             return 3;
  180.  
  181.         case Dignity::FOUR:
  182.             return 4;
  183.  
  184.         case Dignity::FIVE:
  185.             return 5;
  186.  
  187.         case Dignity::SIX:
  188.             return 6;
  189.  
  190.         case Dignity::SEVEN:
  191.             return 7;
  192.  
  193.         case Dignity::EIGHT:
  194.             return 8;
  195.  
  196.         case Dignity::NINE:
  197.             return 9;
  198.  
  199.         case Dignity::TEN:
  200.         case Dignity::JACK:
  201.         case Dignity::LADY:
  202.         case Dignity::KING:
  203.             return 10;
  204.  
  205.         case Dignity::ACE:
  206.             return 11;
  207.  
  208.         default:
  209.             return 0;
  210.     }
  211. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement