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--;
}
}
Pergunta
VictorQuinteiro
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 :)
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
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.