#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
static int GetCard = 0;
enum Mast {peaks, worms, diamonds, baptize, nillcard};
///////////////////////////////////////
const int MAX1 = 36;
const int COL = 4;
//-------------------------------------
class Card
{
public:
Mast mast;
unsigned int numb;
void card_display()const //Выводим на экран карту
{
cout << " " << numb << " ";
switch(mast)
{
case (peaks): cout << "Пики"; break;
case (worms): cout << "Черв"; break;
case (diamonds): cout << "Бубн"; break;
case (baptize): cout << "Крес"; break;
case (nillcard): cout << "NILL"; break;
}
}
};
//-------------------------------------
class Deck
{
private:
Card deck[MAX1];
public:
void deck_gen() //Гененрируем колоду карт
{
Mast m = peaks;
int n = 6;
for(int i = 0, j = 0; i < MAX1; i++)
{
deck[i].numb = n++;
deck[i].mast = m;
if(i%(MAX1/COL) == 0)
{
n=6;
m = (Mast)j;
++j;
}
}
}
void deck_mix() //Мешаем колоду
{
for(int i = 0; i < MAX1; i++)
{
Card temp = deck[i];
int ran = rand()%MAX1;
deck[i] = deck[ran];
deck[ran] = temp;
}
}
void deck_display()const //Вывод на экран колоду
{
cout << endl;
for(int i = 0; i < MAX1; i++)
{
//Выводим по одной карте
deck[i].card_display();
//По 9 карт в строке
if((i+1)%(MAX1/COL) == 0)
cout << endl;
}
cout << endl;
}
Card deck_give_card() //Забор верхней карты из колоды
{
static int dgc = MAX1-1;
Card temp;
temp.mast = deck[dgc].mast;
temp.numb = deck[dgc].numb;
deck[dgc].mast = nillcard;
deck[dgc].numb = 0;
dgc--;
return temp;
}
};
//-------------------------------------
class Pl
{
private:
Card PlDeck[MAX1];
public:
void pl_first_get_card(Deck d1) //Раздача карт
{
for(int i = 0; i < 6; i++)
{
PlDeck[i] = d1.deck_give_card();
}
for(int i = 6; i < MAX1; i++)
{
PlDeck[i].mast = nillcard;
PlDeck[i].numb = 0;
}
}
void pl_get_card(Deck &d1) //Получаем карты
{
while(sizeof(PlDeck) < 6)
{
PlDeck[GetCard] = d1.deck_give_card();
GetCard++;
}
}
void pl_display()const //Показать карты
{
cout << "Your cards: \n";
for(int i = 0; i < MAX1; i++)
{
if(PlDeck[i].mast == nillcard) break;
PlDeck[i].card_display();
}
cout << "\n##################################\n";
}
};
///////////////////////////////////////
int main() {
Deck d1;
Pl pl1;
d1.deck_gen();
d1.deck_mix();
d1.deck_display();
pl1.pl_first_get_card(d1);
pl1.pl_display();
return 0;
}