Ir para conteúdo
Fórum Script Brasil

VictorQuinteiro

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Sobre VictorQuinteiro

VictorQuinteiro's Achievements

0

Reputação

  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...