Ir para conteúdo
Fórum Script Brasil
  • 0

Jogo Paciência


VictorQuinteiro

Pergunta

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

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...