Ir para conteúdo
Fórum Script Brasil

VictorQuinteiro

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Posts postados por VictorQuinteiro

  1. Estou com algumas dúvidas num programa em C que estou fazendo.

    Estou fazendo um jogo de cartas "paciência" (ainda estou iniciando) e quero salvar todas as cartas em pilhas. De acordo com a lógica do jogo, iniciam-se 7 pilhas, sendo que a primeira pilha inicia com 1 carta, a segunda com duas, assim por diante até a sétima pilha.

    As cartas tem que ser embaralhadas, já fiz a parte de geração aleatória.

    Meu problema é guardar as cartas em pilhas nessa ordem que citei acima (no código, coloquei para empilhar no p1 só como exemplo). Eu fiz alguns testes, mas não deu certo.

    O programa está rodando. Usei um printf pra mostrar como está saindo só como exemplo.

    Outro problema é que demora muito pra gerar uma ordem aleatória. Não entendi por que está assim.

    Eu criei tipo uma biblioteca de pilha pra reduzir o programa. O código que fiz de pilha está no final do outro código abaixo.

    Quem puder ajudar, eu agradeço :)

    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    #include<string.h>
    #include "pilha.h"
    
    int numero(int num){
            srand(time(NULL));
            num=(rand())%52;//pega o resto da divisão do numero aleatorio por n (um numero menor que n)
    return num;}
    
    main(){
        int numeros[52],num, tam, i, l, test, valor;
        
        /*Lista de ponteiros de palavras, como o "Ao" por exemplo, 
        o compilador coloca essa palavra na memoria e retorna o endereço dela.*/
        char *cartas[52] = /* O = ouro; E = espada; C = copas; P = paus; A = áis*/
        {"Ao", "Ae", "Ac", "Ap",
         "2o", "3o", "4o", "5o", "6o", "7o", "8o", "9o", "10o", "Jo", "Qo", "Ko",
         "2e", "3e", "4e", "5e", "6e", "7e", "8e", "9e", "10e", "Je", "Qe", "Ke",
         "2c", "3c", "4c", "5c", "6c", "7c", "8c", "9c", "10c", "Jc", "Qc", "Kc",
         "2p", "3p", "4p", "5p", "6p", "7p", "8p", "9p", "10p", "Jp", "Qp", "Kp"};
         
        T_pilha *p1, *p2, *p3, *p4, *p5, *p6, *p7, *aux, *base1, *base2, *base3, *base4, *monte; 
        p1=inicializaPilha();
        p2=inicializaPilha();
        p3=inicializaPilha();
        p4=inicializaPilha();
        p5=inicializaPilha();
        p6=inicializaPilha();
        p7=inicializaPilha();
        aux=inicializaPilha();
        base1=inicializaPilha();
        base2=inicializaPilha();
        base3=inicializaPilha();
        base4=inicializaPilha();
        monte=inicializaPilha();
        
        printf("A = ais; o = ouro; e = espada; c = copas; p = paus.\n\n");
        
        for(i=0;i<52;i++){
        numeros[i]=0;//preenchemos o vetor com zeros
        } 
                            
        for(i=0;i<52;i++){
        test=0;
                              
        while(test==0){//inicio do teste para evitar numeros repetidos
        test=1;//test vira um para sair do laço
        numeros[i]=numero(num);//numeros[i] recebe o valor da função srand
                                      
        for(l=0;l<52;l++){
        if(numeros[l]==numeros[i]&&i!=l){// o i!=l é para não testar ele com ele mesmo.
        numeros[i]=numero(num);//numeros[i] recebe um novo valor da função srand
        test=0;//caso seja verdadeiro volta a ser 0 para voltar ao laço
        l=6;//fechamos o for e voltamos ao laço de 0
        }
        }
        }    
        valor = numeros[i];
        printf("%s\t", cartas[valor]);
                            
        if(i==6||i==12||i==17||i==21||i==24||i==26){//pula linha
        printf("\n");}
        if(i==27){
        printf("\n\n");}  
        if(i==35||i==43||i==51){
        printf("\n");}
        
                           
        empilha(*cartas[valor], p1);
                                                                       
        }
        
        printf("\n\n");
        
        mostra_dados(p1);
        printf("\n");
        mostra_dados(p2);
        printf("\n");
        mostra_dados(p3);
        printf("\n");
        mostra_dados(p4);
        printf("\n");
        mostra_dados(p5);
        printf("\n");
        mostra_dados(p6);
        printf("\n");
        mostra_dados(p7);
        
        printf("\n\n");
        
        system("pause");
    }
    /* Biblioteca de pilha. */
    #include <stdio.h>
    #include <stdlib.h>
    
    #define MAXPILHA 52
    
    typedef struct pilha 
    {   char elementos[MAXPILHA];
        int topo;
    } T_pilha;
    
    T_pilha *inicializaPilha();
    void empilha(char , T_pilha *);
    char desempilha(T_pilha *);
    void mostra_dados(T_pilha *);
    
    T_pilha *inicializaPilha()
    {   T_pilha *nova_pilha;
        nova_pilha=(T_pilha *) malloc(sizeof(struct pilha));
        if (nova_pilha == NULL)
        {  printf("\n não existe memoria para criar a estrutura");
           exit(1);
        }
        nova_pilha->topo=0;
        return(nova_pilha);
    }
    
    void empilha(char v, T_pilha *ppilha)
    {  if (ppilha->topo >= MAXPILHA)
       {   printf("\n Pilha Cheia");
           return;
       }
       ppilha->elementos[ppilha->topo] = v;
       ppilha->topo++;
    }
    char desempilha(T_pilha *ppilha)
    {  if (ppilha->topo == 0) 
       {   printf("\n Pilha Vazia");
           return(-1);
       }
       ppilha->topo--;
       return(ppilha->elementos[ppilha->topo]);
    }
    
    void mostra_dados(T_pilha *ppilha)
    {  int aux = ppilha->topo-1;
       while (aux != -1)
       {  printf("%c\t",ppilha->elementos[aux]);
          aux--;
       }
    }

×
×
  • Criar Novo...