Ir ao conteúdo
  • Cadastre-se

Estrutura de cartas, deem uma plhada no meu codigo.


iLoveProg

Posts recomendados

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

 

Link para o comentário
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.

Link para o comentário
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 );

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...