Ir ao conteúdo

C Jogo de Cartas Buraco


Ir à solução Resolvido por Matheus Maldi,

Posts recomendados

Postado

Olá, tenho um trabalho da faculdade pra fazer que é criar um jogo de cartas (buraco), mas estou com dificuldade de realiza a impressão das cartas. Segue abaixo a parte que fiz até o momento: 

 

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

#define NAIPES 4
#define CARTAS 13
#define BARALHO 104


typedef struct carta{
    int naipe;
    int valor;
}Carta;

typedef struct elemento{
    Carta v;
}Elemento;

Carta baralho[BARALHO];

int inicia_baralho(int *b){
    int i;
    for(i=0; i<BARALHO; i++){
        if(b[i]>=0 && b[i]<13){
            baralho[i].valor=b[i]+1;
        }
        if(b[i]>=13 && b[i]<26){
            baralho[i].valor=b[i]-12;
        }
        if(b[i]>=26 && b[i]<39){
            baralho[i].valor=b[i]-12;
        }
        if(b[i]>=39 && b[i]<52){
            baralho[i].valor=b[i]-12;
        }
        if(b[i]>=52 && b[i]<65){
            baralho[i].valor=b[i]-12;
        }
        if(b[i]>=65 && b[i]<78){
            baralho[i].valor=b[i]-12;
        }
        if(b[i]>=78 && b[i]<91){
            baralho[i].valor=b[i]-12;
        }
        if(b[i]>=91 && b[i]<104){
            baralho[i].valor=b[i]-12;
        }
    }
    for(i=0; i<BARALHO; i++){
        if(b[i]>=0 && b[i]<26){
            baralho[i].naipe=1;
        }
        if(b[i]>=13 && b[i]<52){
            baralho[i].naipe=2;
        }
        if(b[i]>=26 && b[i]<78){
            baralho[i].naipe=3;
        }
        if(b[i]>=39 && b[i]<104){
            baralho[i].naipe=4;
        }
    }
    return 1;
}

int embaralhar (int *b){
    int i, j;
    srand(time(NULL));
    for(i=0; i<BARALHO; i++){
        b[i]=rand()%104;
    }
    for(i=0; i<BARALHO; i++){
        for(j=i+1; j<BARALHO; j++){
            if(b[j]==b[i]){
                b[j]++;
                i=0;
                j=0;
            }
            if(b[j]==104){
                b[j]=0;
            }
        }
    }
}

int imprime_baralho(int *b){
    int i;
    for(i=0; i<CARTAS; i++){
        printf("Carta %d: %d  | Naipe: %d\n", i, baralho[i].valor, baralho[i].naipe);
    }
    return 1;
}

int main(){

    setlocale(LC_ALL, "Portuguese");

    int baralho[BARALHO];
    inicia_baralho(baralho);
    imprime_baralho(baralho);
    embaralhar(baralho);

    system ("pause");

return 0;
}

 

  • Solução
Postado

Verifique esse código, ele é bem simples, e imprime um baralho:

 

#include <stdio.h>
#include <stdint.h>
#include <assert.h>

void carta_display(uint8_t id)
{
    assert(id < 52);

    const char* naipe[4] = { "Paus", "Ouros", "Copas", "Espadas" };
    const char* numeros[13] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Valete", "Dama", "Rei" };

    printf("%s %s\n", numeros[id % 13], naipe[id / 13]);
}

int main()
{
    for (int i = 0; i < 52; i++)
        carta_display(i);    

    return 0;
}

 

Postado

@Matheus Maldi oi Matheus! Agradeço pela ajuda, mas acho que não vai ajudar no meu código, porque vou ter que usar a função pra embaralhar e depois vou criar outras funções usando pilha e lista, pra distribuir as cartas, monte das cartas etc. 

Postado
5 horas atrás, sahs disse:

Olá, tenho um trabalho da faculdade pra fazer que é criar um jogo de cartas (buraco), mas estou com dificuldade de realiza a impressão das cartas. Segue abaixo a parte que fiz até o momento

 

E qual seria a dificuldade?

O que significa "imprimir as cartas"?

 

 

typedef struct carta{
    int naipe;
    int valor;
}Carta;

typedef struct elemento{
    Carta v;
}Elemento;

 

Acho que isso é pouco para a abstração do jogo.

 

Não precisa de 'carta' e 'elemento' aqui: podem ser estruturas anônimas, afinal estão em um typedef...

 

Isso é equivalente.

 

typedef struct 
{
    int naipe;
    int valor;

}	Carta;


typedef struct
{
    Carta v;

}	Elemento;

 

Alinhando o nome definido com  próximo TAB e deixando a linha separada do final da struct ajuda muito a achar a definição numa listagem, destacando o nome.  Nem toda struct vai ter 3 linhas afinal...

 

Muito bom você usar a convenção de usar a primeira letra em maiúscula.

 

Você precisa mais de uma abstração do deck do que um 'Elemento'...

Postado

Bom, efetuei uma estrutura para cartas e baralho

 

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <assert.h>

struct carta
{
    uint8_t id;
};

struct baralho
{
    struct carta cartas[52];
};

void carta_display(struct carta *carta)
{
    assert(carta->id < 52);

    const char* naipe[4] = { "Paus", "Ouros", "Copas", "Espadas" };
    const char* numeros[13] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Valete", "Dama", "Rei" };

    printf("%s %s\n", numeros[carta->id % 13], naipe[carta->id / 13]);
}

void baralho_ctor(struct baralho* baralho)
{
    for (int i = 0; i < 52; i++)
        baralho->cartas[i].id = i;
}

void baralho_embaralhar(struct baralho* baralho)
{
    // faça o seed para o random
    for (int i = 0; i < 52; i++)
    {
        int r = rand() % 52;
        struct carta tmp = baralho->cartas[i];
        baralho->cartas[i] = baralho->cartas[r];
        baralho->cartas[r] = tmp;        
    }    
}

int main()
{
    struct baralho b;
    baralho_ctor(&b);
    baralho_embaralhar(&b);

    for (int i = 0; i < 52; i++)
        carta_display(&b.cartas[i]);  

    return 0;
}

 

Note que nao efetuei o seed para o random, então sempre vai embaralhar no mesmo jeito

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

GRÁTIS: Aprenda a Ler Resistores e Capacitores

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!