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

}

}

}