-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathBARALHO.c
210 lines (151 loc) · 6.26 KB
/
BARALHO.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
/***************************************************************************
* $MCI Módulo de implementação: BAR Baralho
*
* Arquivo gerado: BARALHO.c
* Letras identificadoras: BAR
*
* Projeto: INF 1301 Jogo de Truco
* Autores: gsc, jvr, tgf
*
* $HA Histórico de evolução:
* Versão Autor Data Observações
* 1 gsc, jvr, tgf 19/abr/2018 início desenvolvimento
***************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <time.h>
#define BARALHO_OWN
#include "BARALHO.h"
#include "LISTA.h"
#undef BARALHO_OWN
#define TAM 40
/************ PROTÓTIPOS DAS FUNÇÕES ENCAPSULADAS NO MÓDULO ***************/
//não há funções encapsuladas no módulo
/*********** CÓDIGO DAS FUNÇÕES EXPORTADAS PELO MÓDULO ******************/
/***************************************************************************
* Função: BAR &Criar baralho
***************************************************************************/
LIS_tppLista BAR_CriarBaralho() {
//aloca memória pro ponteiro que aponta pra cabeca
//do baralho (um ponteiro pro tipo lista)
LIS_tppLista pCabecaBaralho = LIS_CriarLista (BAR_DestruirCarta) ;
//cria um vetor de TAM elementos que são ponteiros pra tpCarta
BAR_tpCarta VetorAux[TAM] ;
//declara uma variável que armazena a condição de
//retorno de funções de manipulação da lista
LIS_tpCondRet condRetLista;
//declara uma variável que armazena o ponteiro
//pro tpCarta que é o elemento do vetor
BAR_tpCarta *pCarta;
for (int i = 0, j = 0, k = 0; i < TAM; i++, j++) {
BAR_tpValorCarta valor = j;
BAR_tpNaipeCarta naipe = k;
pCarta = BAR_CriarCarta(valor, naipe);
VetorAux[i] = *pCarta;
if (i == 9 || i == 19 || i == 29) { // Quando estiver terminado o naipe atual
j = -1; // Volto para valor 0
k++; // Passando para o próximo naipe
}
} //fim for
//checando se o vetor está preenchido
printf("Checando se o vetor esta preenchido:\n");
for (int i = 0; i < TAM; i++){
printf("VetorAux[%d]: Valor %d / Naipe %d\n",(i+1),
VetorAux[i].valor,VetorAux[i].naipe);
} //fim for
//função suporte da rand que faz gerar números diferentes sempre
srand ((unsigned)time(NULL));
//embaralhando o vetor (troca os indices aleatoriamente)
for (int i = 0; i < TAM; i++){
BAR_tpCarta pCartaAux;
//gera um número aleatorio entre 0 e 39
int random = rand() % TAM ;
//um ponteiro pra um tipo Carta recebe um ponteiro pra um tipo Carta
pCartaAux = VetorAux[i] ;
//o ponteiro pra um tipo Carta usado anteriormente recebe agora
//um ponteiro pra um tipo Carta escolhido aleatoriamente
VetorAux[i] = VetorAux[random] ;
//o ponteiro pra um tipo Carta aleatório
//recebe o ponteiro pra um tipo Carta inicial
VetorAux[random] = pCartaAux ;
} //fim for
//checando se o vetor está embaralhado
printf("\nChecando se o vetor esta embaralhado:\n");
for (int i = 0; i < TAM; i++){
printf("VetorAux[%d]: Valor %d / Naipe %d\n",(i+1),
VetorAux[i].valor,VetorAux[i].naipe);
} //fim for
// preenche um por um usando o vetor embaralhado
for (int i = 0; i < TAM; i++){
//pCarta recebe um ponteiro pra um tipo Carta do vetor embaralhado
pCarta = &VetorAux[i] ;
//checando se pCarta recebe um valor aleatorio
printf("\npCarta: Valor %d / Naipe %d", pCarta->valor,pCarta->naipe);
//é inserido um elemento na lista Baralho e
//seu valor é um ponteiro pra um tipo Carta
condRetLista = LIS_InserirElementoApos (pCabecaBaralho, pCarta) ;
//assertiva de saída
if (condRetLista != LIS_CondRetOK){
printf("\nNão inseriu elemento");
return NULL;
}
else{
printf(" (Elemento inserido)");
}
} //fim for
// fim minha solução
return pCabecaBaralho ;
} /***************** Fim função: BAR &Criar baralho ***********************/
/****************************************************************************
* $FC Função: BAR &Criar Carta
****************************************************************************/
BAR_tppCarta BAR_CriarCarta (BAR_tpValorCarta valor, BAR_tpNaipeCarta naipe) {
//declara um ponteiro pra um tipo carta com valor null
BAR_tpCarta * pCarta = NULL;
//aloca memoria pra esse ponteiro do tamanho do tipo carta
pCarta = (BAR_tpCarta*) malloc(sizeof(BAR_tpCarta)) ;
//assertiva
if (pCarta == NULL) {
return NULL ;
}
//atribui valor e naipe a um tipo carta
pCarta->valor = valor ;
pCarta->naipe = naipe ;
//retorna um ponteiro pra um tipo carta
return pCarta ;
} /******************** Fim função: BAR &Criar Carta ***********************/
/***************************************************************************
* Função: BAR &Destruir baralho
***************************************************************************/
void BAR_DestruirBaralho(void * pCabecaBaralho) {
//tem que ser void e *void pra LIS_CriarLista aceitar
//destruição do ponteiro pro tipo lista
free(pCabecaBaralho) ;
} /************* Fim função: BAR &Destruir baralho ************************/
/***************************************************************************
* Função: BAR &Destruir carta
***************************************************************************/
void BAR_DestruirCarta(void * pCarta) {
//tem que ser void e *void pra LIS_CriarLista aceitar
//destruição do ponteiro pro tipo carta
free(pCarta) ;
} /************ Fim função: BAR &Destruir carta ****************************/
/***************************************************************************
* Função: BAR &Obter informações da carta
***************************************************************************/
BAR_tpCondRet BAR_ObterInfoCarta(BAR_tppCarta carta,
BAR_tpValorCarta *valor,
BAR_tpNaipeCarta *naipe) {
//assertiva de entrada
if (carta == NULL)
return BAR_CondRetParamIncorretos;
*valor = carta->valor;
*naipe = carta->naipe;
//faltou assertiva de saída
return BAR_CondRetOK;
} /************ Fim função: BAR &Obter informações da carta ****************/
/*********** CÓDIGO DAS FUNÇÕES ENCAPSULADAS NO MÓDULO *******************/
//não há funções encapsuladas no módulo
/************ FIM DO MÓDULO DE IMPLEMENTAÇÃO: BAR Baralho ******************/