Escolar Documentos
Profissional Documentos
Cultura Documentos
Ela é responsável por calcular a pontuação total das cartas em uma mão do
jogador e da mesa. Recebendo um ponteiro para o início da lista encadeada de cartas
(sPtr), e das representações de naipes (wSuit) e faces (wFace) das cartas.
Primeiro declara as variáveis rank, aceCount e pointsHand. “rank” é usada para
armazenar o valor numérico da carta atual. “aceCount” é usado para controlar a
quantidade de Ás presentes na mão do jogador. “pointsHand” é usado para acumular a
pontuação total da mão.Inicia um loop que percorre cada carta na lista encadeada de
cartas, dentro dele, obtém o valor numérico da carta usando a função “rank_a_card”,
passando a carta atual, as representações de naipes e faces como parâmetros. O
valor retornado é armazenado em rank.
Verifica se rank é igual a 1 (Ás) e se aceCount é igual a 0. Isso indica que é o
primeiro Ás encontrado na mão do jogador. Nesse caso, incrementa aceCount para
indicar que já foi encontrado um Ás e adiciona 11 pontos a pointsHand (pois o Ás pode
valer 11 ou 1 ponto). Caso contrário, verifica se rank está entre 1 e 10 (ou seja, é uma
carta numérica). Nesse caso, adiciona o valor de rank a pointsHand. Se nenhuma das
condições anteriores for atendida, significa que a carta é uma figura (rei, rainha,
valete). Nesse caso, adiciona 10 pontos a pointsHand. Após percorrer todas as cartas,
verifica se pointsHand é maior que 21 e se aceCount é igual a 1. Isso indica que há
pelo menos um Ás na mão do jogador, e a pontuação total excede 21. Nesse caso,
subtrai 10 pontos de pointsHand (representando a conversão do valor de um Ás de 11
para 1 ponto).Retorna pointsHand, que representa a pontuação total da mão.
Ela realiza a verificação comparando o ponteiro sPtr com NULL. Se sPtr for
igual a NULL, significa que a lista está vazia, pois não há nenhum nó na lista. Nesse
caso, a função retorna 1 para indicar que a lista está vazia. Caso contrário, se sPtr não
for NULL, significa que a lista contém pelo menos um nó, e a função retorna 0 para
indicar que a lista não está vazia.
int fillDeck(ListCardNodePtr* sPtr, const int Ncards, const char* const wSuit[],
const char* const wFace[])
A função show é responsável por exibir as cartas do baralho. Ela recebe como
parâmetro um ponteiro cardPtr para o primeiro nó da lista e percorre a lista, imprimindo
cada carta na saída padrão.
O loop percorre a lista encadeada enquanto o ponteiro cardPtr não for nulo. Em
cada iteração do loop, a função imprime a face e o naipe da carta atual usando printf.
A formatação %5s é usada para imprimir a face da carta em um espaço de 5
caracteres, alinhado à direita. A formatação %-8s é usada para imprimir o naipe da
carta em um espaço de 8 caracteres, alinhado à esquerda. Após imprimir cada carta, a
função verifica se o número de cartas impressas é ímpar (usando a expressão (i + 1)
% 2) e decide se deve imprimir uma tabulação ('\t') ou uma nova linha ('\n') para
organizar as cartas em duas colunas. No final da função, o valor de i é retornado,
representando o número total de cartas exibidas.
A função compare recebe dois nós de carta, cardNode1 e cardNode2, juntamente com
as listas de naipes wSuit e faces wFace. A função retorna um valor inteiro indicando a
comparação entre as cartas com base em seus rankings.
Primeiro, a função chama a função rank_a_card para obter os rankings das
cartas representadas pelos nós cardNode1 e cardNode2. Os rankings são
armazenados nas variáveis rank1 e rank2, respectivamente. Em seguida, a função
compara os rankings das cartas. Se rank1 for maior que rank2, a função retorna 1,
indicando que cardNode1 tem um ranking maior e é considerada "maior" em
comparação com cardNode2. Se rank1 for menor que rank2, a função retorna -1,
indicando que cardNode1 tem um ranking menor e é considerada "menor" em
comparação com cardNode2. Se os rankings forem iguais, a função retorna 0,
indicando que as cartas são consideradas "iguais".
A função buyCard faz a ação do jogador de comprar uma carta do baralho. Ela
recebe como argumentos um ponteiro para o topo do baralho (tableDeckPtr), um
ponteiro para a mão do jogador (playerHandPtr), uma lista de naipes (wSuit) e uma
lista de faces (wFace).
Ela verifica se o baralho está vazio, verificando se o ponteiro para o topo do
baralho é nulo. Se o baralho estiver vazio, a função retorna -1 para indicar que a
compra não pode ser feita.
Em seguida, a função obtém a carta do topo do baralho (card) e aloca memória
para um novo nó da lista de cartas do jogador (newPtr). A carta é atribuída ao campo
cardStr do novo nó e o campo nextCardPtr é definido como nulo. Depois,verifica se a
mão do jogador está vazia. Se estiver vazia, o novo nó é atribuído como o primeiro nó
da mão (playerHandPtr). Caso a mão do jogador não esteja vazia, a função compara a
nova carta (newPtr) com a primeira carta da mão (aux) usando a função “compare”. Se
a nova carta for considerada menor, ou seja, compare retorna -1, a nova carta é
inserida antes da primeira carta da mão e se torna o novo primeiro nó.
Se a nova carta for considerada maior ou igual à primeira carta da mão, a
função percorre a mão até encontrar a posição correta para inserir a nova carta. A
cada iteração, a função compara a nova carta com a carta atual usando compare e
avança para o próximo nó até encontrar uma carta que seja maior que a nova carta.
Nesse ponto, a nova carta é inserida antes dessa carta. Caso a função percorra toda a
mão sem encontrar uma carta maior, a nova carta é inserida no final da mão.
Após inserir a nova carta na mão do jogador, a função atualiza o ponteiro do
topo do baralho (tableDeckPtr) para apontar para o próximo nó do baralho e libera a
memória do nó removido.
A função deal simula a distribuição de cartas para o jogador. Ela recebe como
argumentos um ponteiro para o topo do baralho (tableDeckPtr), um ponteiro para a
mão do jogador (playerHandPtr), o número de cartas a serem distribuídas (Ncards),
uma lista de naipes (wSuit) e uma lista de faces (wFace).
A função realiza um loop for para comprar Ncards cartas do baralho e adicioná-
las à mão do jogador. A cada iteração, a função chama a função buyCard, passando o
ponteiro para o topo do baralho, o ponteiro para a mão do jogador e as listas de naipes
e faces.Após comprar todas as cartas, a função retorna o número total de cartas
distribuídas (Ncards).
int organize(ListCardNodePtr* sPtr, const char* const wSuit[], const char* const
wFace[])