Ir ao conteúdo
  • Cadastre-se

C código em c sobre cartas


Don1212

Posts recomendados

Seguinte problema !!!! Montei meu codigo porém ele esta retornado caracteres ou numeros aleatorios no lugar das cartas o  que esta errado ???:tw_confounded:

(Escolha um jogo de cartas, baseado em um “baralho tradicional” (cada carta tem seu naipe e seu valor). Implemente a parte de distribuição (sorteio) de cartas para 2 jogadores, considerando que cada jogador ira receber 5 cartas. Exiba na tela as cartas que cada um dos jogadores recebeu.)

 

 

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

typedef struct{
    char naipe[10];
    int valor;
}cartas;
int main(){
    
    cartas carta[51];
    char naipe[12]= "Copas";
    char naipe2[12]="Espadas";
    char naipe3[12]="Paus";
    char naipe4[12]="Ouros";
    int i, n, n2;
    srand(time(NULL));
//========================================================================================//    
    for(i=0;i>=12; i++){
        carta.valor=i-1;
        strcpy(carta.naipe, naipe);
    }
    for(i=13; i<=25; i++){
        carta.valor=i-12;
        strcpy(carta.naipe, naipe2);
    }
    for(i=26; i<=38; i++){        
        carta.valor=i-25;
        strcpy(carta.naipe, naipe3);
    }
    for(i=39; i>=51; i++){
        carta.valor=i-51;
        strcpy(carta.naipe, naipe4);
    }    
//========================================================================================//
    printf("Joao recebera:\n");
    for(i=0; i<5;i++){
        n=rand()%51;
        printf("\n%d de %s", carta[n].valor, carta[n].naipe);
    }
    printf("\n\nMaria recebera:\n");
    for(i=0; i<5;i++){
        n2=rand()%50;
        printf("\n%d de %s", carta[n2].valor, carta[n2].naipe);
    }
    printf("\n\n");
    system("pause");
    return 0;
}

 

 

asdasdasda.png

Link para o comentário
Compartilhar em outros sites

@Don1212 Fiz alguns concertos, agora está executando.

Spoiler

/* */
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#include<time.h>


typedef struct
{
    char naipe[12];
    int valor;
} Cartas;

int main( void )
{
    char naipe2[12] = "Espadas";
    char naipe4[12] = "Ouros";
    char naipe1[12] = "Copas";
    char naipe3[12] = "Paus";
    int i, n, n2;
    Cartas baralho[51] = {0}; // Melhor label para esse objeto é baralho.


    srand( time( NULL ) );
//==============================================================================
    for( i = 0; i<=12; i++ )
    {
        baralho[i].valor = i-1;
        strcpy( baralho[i].naipe, naipe1 );
    }
    for( i = 13; i<=25; i++ )
    {
        baralho[i].valor = i-12;
        strcpy( baralho[i].naipe, naipe2 );
    }
    for( i = 26; i<=38; i++ )
    {
        baralho[i].valor = i-25;
        strcpy( baralho[i].naipe, naipe3 );
    }
    for( i = 39; i<=50; i++ )
    {
        baralho[i].valor = i-51;
        strcpy( baralho[i].naipe, naipe4 );
    }
//==============================================================================
    printf( "Joao recebera:\n" );
    for( i = 0; i<5; i++ )
    {
        n = rand()%51;
        printf( "\n%3d de %s", baralho[n].valor, baralho[n].naipe );
    }

    printf( "\n\nMaria recebera:\n" );
    for( i = 0; i<5; i++ )
    {
        n2 = rand()%51;
        printf( "\n%3d de %s", baralho[n2].valor, baralho[n2].naipe );
    }

    puts( "\n" );
    system( "PAUSE" );


    return EXIT_SUCCESS;
}

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@Don1212 e @AnsiC, independente do erro, sugeriria as seguintes alterações:

 

Vou colocar as sugestões no próprio código original, vejam:

 

1#

16 horas atrás, Don1212 disse:

typedef struct{
    //char naipe[10]; SÓ EXISTEM 4 NAIPES, É REDUNTANTE ARMAZENAR O NOME COMPLETO
    int naipe; //0=Copas, 2=Espadas, 3=Paus e 4=Ouros
    int valor;
//}cartas; ESSA STRUCT É PARA UMA CARTA, LOGO, FAZ MAIS SENTIDO SER NO SINGULAR
} Carta;

 

Ai, em vez de armazenar o nome, apenas armazenaria o "código" do naipe... Depois só "traduzir" o código quando precisar... vide 3#.

 

 

 

2#

16 horas atrás, Don1212 disse:

//cartas carta[51]; O "BARALHO TRADICIONAL" TEM 52 CARTAS, NÃO 51
Carta cartas[52];

ou


//cartas carta[51]; O "BARALHO TRADICIONAL" TEM 52 CARTAS, NÃO 51
Carta baralho[52];

 

Não sei se foi o caso, mas pode está confundindo o "tamanho do vetor", com "as posições do vetor"... ou seja, as posições vão de 0 a 51, mas o vetor tem 52 posições.

 

Por consequência:

14 horas atrás, AnsiC disse:

//n = rand()%51; SÃO 52
n = rand()%52;

 

 

 

3#

14 horas atrás, AnsiC disse:

    /*  PODERIA USAR UMA ÚNICA ESTRUTURA   
    char naipe2[12] = "Espadas";
    char naipe4[12] = "Ouros";
    char naipe1[12] = "Copas";
    char naipe3[12] = "Paus";
    */
    char naipes[4][7] = {"Copas","Espadas","Paus","Ouros"}; 

obs.: não sei se a sintaxe é assim, mas a ideia seria essa.

 

Ou seja, um vetor de "nomes dos naipes". Ai, na hora de imprimir, usaria algo como:

16 horas atrás, Don1212 disse:

//printf("\n%d de %s",baralho[n].valor,naipes[baralho[n].naipe].naipe);  (postei errado)
printf("\n%d de %s",baralho[n].valor,naipes[baralho[n].naipe]);

 

 

 

4#

Creio que está ainda testando as estruturas, mas acho que poderia ter vetores (ou uma lista) para armazenar os deck* dos jogadores, ou seja, ao sortear, inseriria a carta no deck, e na hora de imprimir, imprimiria utilizando o deck.

 

 

 

5#

Outra coisa que precisará se atentar posteriormente é que só precisará controlar as cartas, ou seja, ao sortear, a carta não pode ficar mais disponível.... do jeito que está, todas as cartas poderia ser iguais!

 

 

***

 

Por ai vai.

 

O que acham até aqui? críticas, sugestões...?

adicionado 49 minutos depois

ADENDO:

 

Sobre está dando resultados negativos, acho que precisaria ajustar aqui:

14 horas atrás, AnsiC disse:

    for( i = 0; i<=12; i++ )
    {
        baralho[i].valor = i-1;

 

Ou seja, teoricamente as cartas vão de 1 a 13, logo ali seria i+1, ou mudaria o for para ir de de 1 a 13 (em vez de 0 a 12) e compensaria no índice, colocando de [i-1].

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...