Embaralhamento e distribuição de cartas. Crie um programa que embaralhe e distribua cartas. O programa deverá consistir na classe Card, na classe DeckOfCards e em um programa controlador. A classe Card deverá fornecer:
a) Dados-membro face e suit do tipo int.
b) Um construtor que recebe dois ints representando o valor e o naipe, e os utilize para inicializar os dados-membro.
c) Dois arrays static de strings representando os valores e os naipes.
d) Uma função toString que retorne a Card como uma string na forma ‘valor de naipe’. Você pode usar o operador + para concatenar strings
A classe DeckOfCards deverá conter:
a) Um vector de Cards chamado deck para armazenar as Cards.
b) Um inteiro currentCard representando a próxima carta a ser distribuída.
c) Um construtor default que inicialize as Cards no baralho. O construtor deverá usar a função vector push_ back para acrescentar cada Card ao final do vector após a Card ter sido criada e inicializada. Isso deverá ser feito para cada uma das 52 Cards do baralho.
d) Uma função shuffle que embaralhe as Cards do baralho. O algoritmo de embaralhamento deverá percorrer o vector de Cards. Para cada Card, selecione aleatoriamente outra Card no baralho e troque as duas Cards.
e) Uma função dealCard que retorne o próximo objeto Card do baralho.
f) Uma função moreCards que retorne um valor bool indicando se existem mais Cards a serem distribuídas.
O programa controlador deverá criar um objeto DeckOfCards, embaralhar as 52 cartas e depois distribuí-las.
Passo 1
Fala Galera!!! Tudo certo? Espero que sim!! Bora para mais um exercício.
Nesse exercício vamos criar um programa que contenha duas classes Card e DeckOfCards com seus respectivos dados-membros e funções-membros que serão responsáveis em simular o embaralhamento e distribuição de cartas.
Vamos iniciar definindo os cabeçalhos do programa e também as duas classes:
//cabeçalhos
#include
#include
#include
#include
#include
using namespace std;
//definindo classe classes
class Card {
private:
//variaveis
int face;
int suit;
public:
//declaração dos dados membros, matrizes naipes e faces
static const std::string faces[];
static const std::string suits[];
// construtor
Card();
Card(int suit, int face);
virtual ~Card();
std::string toString();
};
//definindo classe baralho
//matriz que representa a baralho de 52 cartas
class DeckOfCards {
private:
Card deck[52];
int currentCard;
public:
DeckOfCards();
void shuffleCards();
Card dealCard();
bool moreCards();
};
Passo 2
Após a definição das classes, vamos os construtores para as classes com os dados membro e as funções que irão retornar o resultado do embaralhamento.
/definindo as funções membros
//definindo os naipes e os numeros das cartas
const std::string Card::faces[] = {"As", "1", "2", "3", "4", "5", "6", "7", "8", "9",
"valete", "rainha", "rei"};
const std::string Card::suits[] = {"Espada", "Copas", "paus", "ouro"};
//inicialização dados membros
Card::Card(){
face = 0;
suit = 0;
}
Card::Card(int suit, int face) {
this->face = face;
this->suit = suit;
}
Card::~Card() {
// TODO Auto-generated destructor stub
}
/*
* Representação em string de cartas
*/
std::string Card::toString(){
return Card::faces[face] + " de " + Card::suits[suit];
}
/**
* Construtor padrão para DeckOfCards. Inicializa todos as cartas
*/
DeckOfCards::DeckOfCards() {
for( int i=0; i
for(int j=0; j
deck[i*13+j] = Card(i, j);
currentCard = 0;
}
/**
* Embaralha as cartas do baralho;
*/
void DeckOfCards::shuffleCards(){
for(int i=0; i
int rnd = rand()%52;
Card temp = deck[i];
deck[i] = deck[rnd];
deck[rnd] = temp;
}
}
//retornando os valores
Card DeckOfCards::dealCard() {
return deck[currentCard++];
}
bool DeckOfCards::moreCards(){
return currentCard != 52;
}
Passo 3
Agora precisamos inicializar a função principal main() com os objetos da classe e chamar as funções necessárias para realizar a simulação e também exibir o resultado.
int main() {
//definindo objetdo da classe
//realizando a chamada da função para embaralhar cartas
DeckOfCards doc;
doc.shuffleCards();
//exibindo resultado
int j=0;
while (doc.moreCards()) {
Card c = doc.dealCard();
cout
if (++j % 4 == 0) {
j=0;
cout
}
}
}
Passo 4
A saída do nosso programa será:

Logo, nosso programa está simulando corretamente a cartas.
E assim finalizamos nosso exercício galera!!!! Até o próximo.
Resposta
Código:
//cabeçalhos
#include
#include
#include
#include
#include
using namespace std;
//definindo classe classes
class Card {
private:
//variaveis
int face;
int suit;
public:
//declaração dos dados membros, matrizes naipes e faces
static const std::string faces[];
static const std::string suits[];
// construtor
Card();
Card(int suit, int face);
virtual ~Card();
std::string toString();
};
//definindo classe baralho
//matriz que representa a baralho de 52 cartas
class DeckOfCards {
private:
Card deck[52];
int currentCard;
public:
DeckOfCards();
void shuffleCards();
Card dealCard();
bool moreCards();
};
//definindo as funções membros
//definindo os naipes e os numeros das cartas
const std::string Card::faces[] = {"As", "1", "2", "3", "4", "5", "6", "7", "8", "9",
"valete", "rainha", "rei"};
const std::string Card::suits[] = {"Espada", "Copas", "paus", "ouro"};
//inicialização dados membros
Card::Card(){
face = 0;
suit = 0;
}
Card::Card(int suit, int face) {
this->face = face;
this->suit = suit;
}
Card::~Card() {
// TODO Auto-generated destructor stub
}
/*
* Representação em string de cartas
*/
std::string Card::toString(){
return Card::faces[face] + " de " + Card::suits[suit];
}
/**
* Construtor padrão para DeckOfCards. Inicializa todos as cartas
*/
DeckOfCards::DeckOfCards() {
for( int i=0; i
for(int j=0; j
deck[i*13+j] = Card(i, j);
currentCard = 0;
}
/**
* Embaralha as cartas do baralho;
*/
void DeckOfCards::shuffleCards(){
for(int i=0; i
int rnd = rand()%52;
Card temp = deck[i];
deck[i] = deck[rnd];
deck[rnd] = temp;
}
}
//retornando os valores
Card DeckOfCards::dealCard() {
return deck[currentCard++];
}
bool DeckOfCards::moreCards(){
return currentCard != 52;
}
int main() {
//definindo objetdo da classe
//realizando a chamada da função para embaralhar cartas
DeckOfCards doc;
doc.shuffleCards();
//exibindo resultado
int j=0;
while (doc.moreCards()) {
Card c = doc.dealCard();
cout
if (++j % 4 == 0) {
j=0;
cout
}
}
}