Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Don1212

C código em c sobre cartas

Recommended Posts

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

Editado por DiF
Botão CODE <> e substituir parte do texto que estava todo em maiúsculo

Compartilhar este post


Link para o post
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;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

 

Editado por Simon Viegas
Corrigir código
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Simon Viegas

1 hora atrás, Simon Viegas disse:

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

 você deu ai boas sugestões de como melhorar, e ajustar a lógica do programa.

 

 

É um jogo de cartas pelo que pude perceber, eu não 'manjo' nada de jogos de cassino.

:lol:

 

 

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






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

×