Ir ao conteúdo
  • Cadastre-se
iLoveProg

Estrutura de cartas, deem uma plhada no meu codigo.

Recommended Posts

Bom pessoal. Eu estava precisando fazer uma estrutura de cartas com as seguintes informações: naipe, valor e id(identificado da carta), e depois embaralha-lo. Eu consegui fazer toda a estrutura e as funções, mas estou com dificuldade em printar as cartas com o valores e vaipes tudo certo. Se alguem souber, deem um help.

#include <time.h>
#include <stdio.h>
#include <stdlib.h>

typedef struct{
	int num;
	char naipe;
	int id;

}ficha;

ficha carta[52];

void baralhar(int *baralho);
void preencherid (int *baralho);
void preenchernum (int *baralho);
void preenchernaipe(int *baralho);

int main (){
	int baralho[52];
	baralhar(baralho);
	preencherid (baralho);
	preenchernum (baralho);
	preenchernaipe(baralho);
	return 0;
}


void baralhar(int *baralho) {
	int i=0,j=0;
	srand(time(NULL));
	for(i=0;i<52;i++){
		baralho[i]=rand() % 52;
	}
	for(i=0;i<52;i++){
		for (j=i+1;j<52;j++){
			if(baralho[j]==baralho[i]){
				baralho[j]++;
				i=0;
				j=0;
			}
			if(baralho[j]==52)
				baralho[j]=0;	
		}
	}
}

void preencherid (int *baralho) {
 	int i;
 	for (i=0;i<52;i++){
 		carta[i].id=baralho[i];
 	}
 }
 
void preenchernum (int *baralho) {
 	int i;
 	for (i=0;i<52;i++){
 	if ((baralho[i]>=0) && (baralho[i]<13))
 		carta[i].num=baralho[i]+1;
	if ((12<baralho[i]) && (baralho[i]<26))
 		carta[i].num=baralho[i]-12;
	if ((25<baralho[i]) && (baralho[i]<39))
 		carta[i].num=baralho[i]-25;
	if ((38<baralho[i]) && (baralho[i]<52))
 		carta[i].num=baralho[i]-38;
	}
}

void preenchernaipe(int *baralho){
 	int i;
 	for (i=0;i<52;i++){
 	if ((baralho[i]>=0) && (baralho[i]<13))
 		carta[i].naipe='O';
	if ((12<baralho[i]) && (baralho[i]<26))
 		carta[i].naipe='C';
	if ((25<baralho[i]) && (baralho[i]<39))
 		carta[i].naipe='P';
	if ((38<baralho[i]) && (baralho[i]<52))
 		carta[i].naipe='E';
	}
}	

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que se pode ver pelo código, onde já temos as cartas criadas e armazenadas na struct, a função de mostrar é simples:

//Mostrar as cartas
void mostrarcartas() {
    register int i;//Loop nitro :P
	for(i=0;i<52;i++){//carta[52]
        printf("[%d] Numero: %d  Naipe: %c\n",i,carta[i].num, carta[i].naipe);//mostrar numeroDaCarta, numeroNaCarta e Naipe
	}
}//That's all folks

Caso as cartas não sejam ordenadas de carta[0] a carta[52], mas por outro identificador, faça um loop que encontre os identificadores na ordem correta, ate que as 52 cartas sejam mostradas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@iLoveProg Você pode criar seu baralho de diversas maneiras, eu diria quase infinitas maneiras, mas já que você está meio enrolado, você poderia separar o que é baralho do que é carta.

a carta tem: valor e naipe.

 

o baralho tem: 52 cartas.

 

a carta só pode ter valores 2, 3, 4, 5, 6, 7, 8, 9, 10, J(11), Q(12), K(13), A(14)

 

Você pode imprimir do 2 ao 10 normalmente, mas a partir do 11 você tem que incluir um IF pra imprimir o J, Q, K e A. Alguns sites de jogos utilizam T para descrever o valor 10.

 

Então acho que tudo que você tem que fazer é uma função que recebe uma struct do tipo ficha e imprime o "num" e o "naipe", caso o "num" seja maior do que 10, você faz os IFs para imprimir J, Q, K ou A de acordo com o valor da carta.

 

A impressão das cartas sem os IFs ficaria assim:

int i = 0;

  for(i = 0; i < 52; i++)
  printf("\nCarta %d: %d  | Naipe: %c", i, carta[i].num, carta[i].naipe );

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×