• 0
Sign in to follow this  
VictorQuinteiro

Jogo Paciência

Question

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--;
   }
}

Share this post


Link to post
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this