Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

SlashStar

[Resolvido] Gerando Cartas Aleatórias em C

Recommended Posts

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
}
void criaBaralho( Tmonte* monte )
{
  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;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

Seu código está muito bom... bem comentado, com nomes de funções e variáveis fáceis de entender... Só está com alguns problemas na identação que talvez sejam até problemas que o fórum gerou...

 

bom, sobre seu programa, como o usuário vai inserir o valor x de cartas? Utilize a função scanf() para tal...

 

Não programo em C, só C++, por isso não posso te ajudar com o código... espere alguém como o guidjos ou a _Isis_, que programam em C.

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu problema está na geração de cartas? ou na hora de armazenar para n pegar cartas iguais?

 

veja sobre o rand();

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu problema está na geração de cartas? ou na hora de armazenar para n pegar cartas iguais?

 

veja sobre o rand();

 

[]s

 

Olá, é(era) na geração mesmo...

 

simplesmente era um erro bobo, porém fez a diferença...

 

inclui a biblioteca time.h

 

e adicionei na minha main o srand ( time(NULL) );

 

Abraço, e obrigado pelas respostas. Vou tentar adiantar o código e se surgir outras dúvidas eu pergunto... B)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.