Advertisement
belal_hamdy

Untitled

Jun 19th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.64 KB | None | 0 0
  1. #include <iostream>
  2. #include<random>
  3. using namespace std;
  4.  
  5.  
  6. void swap_numbers (int&, int&);
  7. int get_number (int,int) ;
  8. int ceiling (float);
  9.  
  10. class Card
  11. {
  12. protected :
  13.     int num ;
  14.     int type ; // 1- Spade , 2- Heart , 3- Diamond , 4- Triffle
  15.     char color ;
  16. public :
  17.     Card ()
  18.     {
  19.         num = 0 ;
  20.         type = 0 ;
  21.         color = 'N' ;
  22.     }
  23.     Card (int n, int t)
  24.     {
  25.         if (t == 1 || t == 4) color = 'B' ;
  26.         else color = 'R' ;
  27.         num = n ;
  28.         type = t ;
  29.     }
  30. };
  31.  
  32. class Deck : public Card
  33. {
  34.     int siz ;
  35. public :
  36.     bool nums[100] = {0} ;
  37.     Deck ()
  38.     {
  39.         siz = 52;
  40.     }
  41.     char display_type (int type)
  42.     {
  43.         if (type == 1) return 'S' ;
  44.         else if (type == 2) return 'H' ;
  45.         else if (type == 3) return 'D' ;
  46.         else return 'T';
  47.     }
  48.     char display_color (int t)
  49.     {
  50.         if (t == 1 || t == 4) return 'B' ;
  51.         else return 'R';
  52.     }
  53.     void display (int deck[])
  54.     {
  55.         int tmp ;
  56.         for (int i = 0 ; i<siz ; ++i)
  57.         {
  58.             tmp = deck[i] % 13 ;
  59.             if (deck[i] == 0) continue;
  60.             else if (tmp == 11) cout << "J";
  61.             else if (tmp == 12) cout << "Q";
  62.             else if (tmp == 0) cout << "K";
  63.             else cout << tmp;
  64.             cout << ((tmp==10)?" " : "  ") <<  display_type(ceiling(deck[i] / 13.0))  << " " << display_color(ceiling(deck[i] / 13.0)) <<endl;
  65.         }
  66.         cout << endl << endl;
  67.     }
  68.     void shuffle (int deck[])
  69.     {
  70.         for (int rep = 0 ; rep < (rand()%100 + 1) ; ++rep) //number of repeating the algorithm
  71.         {
  72.             for (int i = 0 ; i< siz ; ++i)
  73.             {
  74.                 swap_numbers (deck[i],deck[(rand()%siz)]);
  75.             }
  76.         }
  77.     }
  78.     void generat (int deck[])
  79.     {
  80.         int tmp;
  81.         for (int i = 0 ; i<siz ; ++i)
  82.         {
  83.             while (true)
  84.             {
  85.                 tmp = rand()%52 + 1 ;
  86.                 if (!nums[tmp])
  87.                 {
  88.                     nums[tmp] = true ;
  89.                     break ;
  90.                 }
  91.             }
  92.             deck[i] = tmp;
  93.         }
  94.         cout << "Deck : \n" ;
  95.         display(deck) ;
  96.     }
  97.     void divide  (int deck[], int n)
  98.     {
  99.         int counter = 0 ;
  100.         shuffle(deck) ;
  101.         int np = siz/n ;
  102.         if (siz % n !=0)
  103.         {
  104.             cout << "Note there is excess " << siz%n << " papers" ;
  105.             np++ ;
  106.         }
  107.         int **p = new int *[n] ;
  108.         for (int i = 0 ; i<n ; ++i) p[i] = new int [np];
  109.         for (int i = 0 ; (i<n && counter<52) ; ++i)
  110.         {
  111.             for (int j = 0 ; (j<np && counter<52) ; ++j)
  112.             {
  113.                 p[i][j] = deck[counter++] ;
  114.             }
  115.         }
  116.         for (int i = 0 ; i<n ; ++i)
  117.         {
  118.             cout << "Player " << i+1 << ": \n";
  119.             display (p[i]) ;
  120.         }
  121.     }
  122.     void resiz   (int n)
  123.     {
  124.         siz = n ;
  125.     }
  126. };
  127. int main()
  128. {
  129.     Deck *current = new Deck ();
  130.     int choose = 0, deck_number = 52, deck[52] = {0}, players = 1 ;
  131.     bool created = false ;
  132.     while (true)
  133.     {
  134.         cout << "1- Request a new deck\n"
  135.              << "2- Display the current deck\n"
  136.              << "3- Shuffle the deck\n"
  137.              << "4- Divide the deck\n"
  138.              << "5- Exit\n\n";
  139.         choose = get_number(1,5);
  140.         if (choose == 1) *current = Deck() ;
  141.         switch (choose)
  142.         {
  143.         case 1 :
  144.             cout << "Enter number of cards : " ;
  145.             deck_number = get_number (1,52) ;
  146.             current->resiz (deck_number) ;
  147.             current->generat(deck) ;
  148.             created = true ;
  149.             break ;
  150.         case 2 :
  151.             if (!created)
  152.             {
  153.                 cout << "NO Created Deck so it will be the default..\n";
  154.                 current->resiz (52) ;
  155.                 current->generat(deck) ;
  156.                 created = true ;
  157.             }
  158.             cout << "Deck : \n" ;
  159.             current->display(deck) ;
  160.             break ;
  161.         case 3 :
  162.             if (!created)
  163.             {
  164.                 cout << "NO Created Deck so it will be the default..\n";
  165.                 current->resiz (52) ;
  166.                 current->generat(deck) ;
  167.                 created = true ;
  168.             }
  169.             current->shuffle(deck) ;
  170.             cout << "Shuffled deck : \n";
  171.             current->display(deck) ;
  172.             break ;
  173.         case 4 :
  174.             if (!created)
  175.             {
  176.                 cout << "NO Created Deck so it will be the default..\n";
  177.                 current->resiz (52) ;
  178.                 current->generat(deck) ;
  179.                 created = true ;
  180.             }
  181.             cout << "Enter number of players : " ;
  182.             players = get_number (1,deck_number) ;
  183.             current->divide(deck, players);
  184.             break ;
  185.         default :
  186.             cout << "Have a good day :)\n";
  187.             return 0 ;
  188.  
  189.         }
  190.     }
  191. }
  192. int get_number(int begin, int end)
  193. {
  194.     int answer;
  195.     while (true)
  196.     {
  197.         cin >> answer;
  198.         if (cin.fail())
  199.         {
  200.             cin.clear();
  201.             cin.ignore(INT_MAX, '\n');
  202.             cout << "Invalid input.\n";
  203.         }
  204.         else if (answer < begin || answer > end)
  205.         {
  206.             cout << "Input out of range (" << begin << "-" << end << ")\n";
  207.         }
  208.         else
  209.         {
  210.             cin.ignore(INT_MAX, '\n');
  211.             break;
  212.         }
  213.     }
  214.     return answer;
  215. }
  216. void swap_numbers (int &a, int &b)
  217. {
  218.     int tmp = a;
  219.     a = b ;
  220.     b = tmp;
  221. }
  222. int ceiling(float n)
  223. {
  224.     return ( (n== (int) n) ? n : (int) n + 1 ) ;
  225. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement