Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include<random>
- using namespace std;
- void swap_numbers (int&, int&);
- int get_number (int,int) ;
- int ceiling (float);
- class Card
- {
- protected :
- int num ;
- int type ; // 1- Spade , 2- Heart , 3- Diamond , 4- Triffle
- char color ;
- public :
- Card ()
- {
- num = 0 ;
- type = 0 ;
- color = 'N' ;
- }
- Card (int n, int t)
- {
- if (t == 1 || t == 4) color = 'B' ;
- else color = 'R' ;
- num = n ;
- type = t ;
- }
- };
- class Deck : public Card
- {
- int siz ;
- public :
- bool nums[100] = {0} ;
- Deck ()
- {
- siz = 52;
- }
- char display_type (int type)
- {
- if (type == 1) return 'S' ;
- else if (type == 2) return 'H' ;
- else if (type == 3) return 'D' ;
- else return 'T';
- }
- char display_color (int t)
- {
- if (t == 1 || t == 4) return 'B' ;
- else return 'R';
- }
- void display (int deck[])
- {
- int tmp ;
- for (int i = 0 ; i<siz ; ++i)
- {
- tmp = deck[i] % 13 ;
- if (deck[i] == 0) continue;
- else if (tmp == 11) cout << "J";
- else if (tmp == 12) cout << "Q";
- else if (tmp == 0) cout << "K";
- else cout << tmp;
- cout << ((tmp==10)?" " : " ") << display_type(ceiling(deck[i] / 13.0)) << " " << display_color(ceiling(deck[i] / 13.0)) <<endl;
- }
- cout << endl << endl;
- }
- void shuffle (int deck[])
- {
- for (int rep = 0 ; rep < (rand()%100 + 1) ; ++rep) //number of repeating the algorithm
- {
- for (int i = 0 ; i< siz ; ++i)
- {
- swap_numbers (deck[i],deck[(rand()%siz)]);
- }
- }
- }
- void generat (int deck[])
- {
- int tmp;
- for (int i = 0 ; i<siz ; ++i)
- {
- while (true)
- {
- tmp = rand()%52 + 1 ;
- if (!nums[tmp])
- {
- nums[tmp] = true ;
- break ;
- }
- }
- deck[i] = tmp;
- }
- cout << "Deck : \n" ;
- display(deck) ;
- }
- void divide (int deck[], int n)
- {
- int counter = 0 ;
- shuffle(deck) ;
- int np = siz/n ;
- if (siz % n !=0)
- {
- cout << "Note there is excess " << siz%n << " papers" ;
- np++ ;
- }
- int **p = new int *[n] ;
- for (int i = 0 ; i<n ; ++i) p[i] = new int [np];
- for (int i = 0 ; (i<n && counter<52) ; ++i)
- {
- for (int j = 0 ; (j<np && counter<52) ; ++j)
- {
- p[i][j] = deck[counter++] ;
- }
- }
- for (int i = 0 ; i<n ; ++i)
- {
- cout << "Player " << i+1 << ": \n";
- display (p[i]) ;
- }
- }
- void resiz (int n)
- {
- siz = n ;
- }
- };
- int main()
- {
- Deck *current = new Deck ();
- int choose = 0, deck_number = 52, deck[52] = {0}, players = 1 ;
- bool created = false ;
- while (true)
- {
- cout << "1- Request a new deck\n"
- << "2- Display the current deck\n"
- << "3- Shuffle the deck\n"
- << "4- Divide the deck\n"
- << "5- Exit\n\n";
- choose = get_number(1,5);
- if (choose == 1) *current = Deck() ;
- switch (choose)
- {
- case 1 :
- cout << "Enter number of cards : " ;
- deck_number = get_number (1,52) ;
- current->resiz (deck_number) ;
- current->generat(deck) ;
- created = true ;
- break ;
- case 2 :
- if (!created)
- {
- cout << "NO Created Deck so it will be the default..\n";
- current->resiz (52) ;
- current->generat(deck) ;
- created = true ;
- }
- cout << "Deck : \n" ;
- current->display(deck) ;
- break ;
- case 3 :
- if (!created)
- {
- cout << "NO Created Deck so it will be the default..\n";
- current->resiz (52) ;
- current->generat(deck) ;
- created = true ;
- }
- current->shuffle(deck) ;
- cout << "Shuffled deck : \n";
- current->display(deck) ;
- break ;
- case 4 :
- if (!created)
- {
- cout << "NO Created Deck so it will be the default..\n";
- current->resiz (52) ;
- current->generat(deck) ;
- created = true ;
- }
- cout << "Enter number of players : " ;
- players = get_number (1,deck_number) ;
- current->divide(deck, players);
- break ;
- default :
- cout << "Have a good day :)\n";
- return 0 ;
- }
- }
- }
- int get_number(int begin, int end)
- {
- int answer;
- while (true)
- {
- cin >> answer;
- if (cin.fail())
- {
- cin.clear();
- cin.ignore(INT_MAX, '\n');
- cout << "Invalid input.\n";
- }
- else if (answer < begin || answer > end)
- {
- cout << "Input out of range (" << begin << "-" << end << ")\n";
- }
- else
- {
- cin.ignore(INT_MAX, '\n');
- break;
- }
- }
- return answer;
- }
- void swap_numbers (int &a, int &b)
- {
- int tmp = a;
- a = b ;
- b = tmp;
- }
- int ceiling(float n)
- {
- return ( (n== (int) n) ? n : (int) n + 1 ) ;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement