Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal, sou novo no fórum como membro registrado, porém já havia visitado p/ tirar algumas dúvidas.
Bom eu sou novo na programação provavelmente meu código contém muitos erros, mas eu estou precisando de uma ajuda e pronto p/ aprender.
Estou tentando fazer um gerador de cartas que seja aleatório e não repita as mesmas cartas quando eu executo o laço "for"
Eu li alguns outros tópicos sobre geração de números aleatórios, porém não consegui implementar, como disse sou novo na programação e ainda não me adaptei muito bem.
Bom, aí vai o código o que pelo menos eu consegui fazer, e agradeço qualquer ajuda e crítica construtiva possível...
Obs: Precisa ser automatizado, e ele gerar um número x de cartas que o usuário escolheria, realmente quebrei a cabeça e não sei como faz.
Tentei colocar outro for para o número de cartas recebendo pelo teclado, mas não deu certo...
#include <stdio.h>
#include <stdlib.h>
typedef struct _carta //estrutura do baralho que vai ter o naipe o,c,e,p e valor da carta de 1 a 13
{
char naipe;
int valor;
} Tcarta;
typedef struct baralho //estrutura do baralho, que vai conter um tipo carta e o apontador para o proximo valor
{
Tcarta x;
struct baralho *prox;
} Tbaralho;
typedef Tbaralho* Tmonte; //definindo o monte do tipo baralho
/inicia fila/
Tmonte criaFila (void)
{
Tmonte inicio = ( (Tmonte) malloc(sizeof(Tbaralho)) ); //aloca uma nova celula
inicio->x.valor = -1; //o valor desta celula recebe -1 para se diferenciar
inicio->prox = inicio; //ela aponta para ela mesma
return inicio; //retornando esta celula para fazer ligação com a variavel que pediu ela
} int i,j;
for(i=1; i<14; i++) //valor das cartas
for(j=1; j<5; j++) { //naipes
Tmonte novo = ( (Tmonte) malloc(sizeof(Tbaralho)) );
novo->prox = (*monte)->prox;
(*monte)->prox = novo;
novo->x.valor = rand() % 13+1;// não ta funcionando como o esperado...
if (j == 1)
novo->x.naipe = 'O';//ouro
if (j == 2)
novo->x.naipe = 'C';//copas
if (j == 3)
novo->x.naipe = 'E';//espadas
if (j == 4)
novo->x.naipe = 'P';//paus
(*monte)->prox=novo;
}
}
/exibe baralho/
void mostraBaralho( Tmonte* monte)
{
//exibe o baralho
Tbaralho* aux;
aux = (*monte)->prox;
while (aux->x.valor != -1) { //comparaçao de início da fila
printf("carta %d Naipe %c \n\n",aux->x.valor,aux->x.naipe);
aux = aux->prox;
}
}
int main(void)
{
/Criando a Fila/
Tmonte monte = criaFila();
/*Criando o Baralho */
criaBaralho(&monte);
printf("Baralho\n\n");
mostraBaralho(&monte);
return 0;
system("PAUSE");
return 0;
}Carregando comentários...