Jump to content

Jogo do Burro em C


speedxtommy

Recommended Posts

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

int baralho_carta[52];
int jogador_a_carta[52];
int jogador_b_carta[52];
int num_carta;
int i;
int contador;
int naipe;
char opcao_jogador_a;
char opcao_jogador_b;
int validar_carta;
int carta_jogada;
int carta_mesa;
int naipe_mesa;
int naipe_jogado;
int numero_mesa;
int numero_jogado;
int validar_naipe;
int validar_numero;
int carta_temporaria;
int passa_jogada;

void imprime_carta(int numero)
{
    char carta[15];
    if(numero != 0)
        {
            num_carta = numero % 13;
            naipe = numero / 14;
            switch (num_carta)
            {
            case 1:
                strcpy(carta, "A");
                break;
            case 2:
                strcpy(carta, "2");
                break;
            case 3:
                strcpy(carta, "3");
                break;
            case 4:
                strcpy(carta, "4");
                break;
            case 5:
                strcpy(carta, "5");
                break;
            case 6:
                strcpy(carta, "6");
                break;
            case 7:
                strcpy(carta, "7");
                break;
            case 8:
                strcpy(carta, "8");
                break;
            case 9:
                strcpy(carta, "9");
                break;
            case 10:
                strcpy(carta, "10");
                break;
            case 11:
                strcpy(carta, "Q");
                break;
            case 12:
                strcpy(carta, "J");
                break;
            case 0:
                strcpy(carta, "K");
                break;
            }
            switch (naipe)
            {
            case 0:
                strcat(carta, " Paus");
                break;
            case 1:
                strcat(carta, " Espadas");
                break;
            case 2:
                strcat(carta, " Copas");
                break;
            case 3:
                strcat(carta, " Ouros");
                break;
            }
            printf("\n%d-%s",numero,carta);
        }
}
void imprime_baralho()
{
    printf("Baralho:");
    for (i = 0; i < 52; i++)
    {
        imprime_carta(baralho_carta[i]);
    }
}    
void imprime_cartas_a()
{
    printf("\n\nBaralho jogador A:");
    for (i = 0; i < 52; i++)
    {
        imprime_carta(jogador_a_carta[i]);
    }    
}
void imprime_cartas_b()
{
    printf("\n\nBaralho jogador B:");
    for (i = 0; i < 52; i++)
    {
        imprime_carta(jogador_b_carta[i]);
    }    
}
void menu_jogador_a()
{
    do
    {
        system("cls");
        printf("\nCarta na mesa:");
        imprime_carta(carta_mesa);
        imprime_cartas_a();
        printf("\n\nJogador A\n");
        printf("1-Jogar uma carta\n");
        printf("2-Buscar ao baralho\n");
        printf("3-Passar jogada\n");
        printf("Opção:");
        scanf("\n%c",&opcao_jogador_a);
        passa_jogada=0;
        switch(opcao_jogador_a)
        {
            case '1':
            //ler carta do jogador
                printf("Carta:");
                scanf("%d",&carta_jogada);
                //validar se a carta existe nas cartas do jogador
                validar_carta = 0;
                for(i = 0;i < 52;i++)
                {
                    if(jogador_a_carta[i] == carta_jogada)
                        validar_carta = 1;
                }
                if(validar_carta)
                    printf("Carta válida");
                else
                    printf("Carta inválida");
                //validar se a jogada é valida
                //verficar se é do mesmo naipe
                validar_naipe = 0;
                naipe = jogador_a_carta[i] / 14;
                naipe_mesa = carta_mesa / 14;
                naipe_jogado = carta_jogada / 14;
                if(naipe_mesa == naipe_jogado)
                    validar_naipe = 1;
                if(validar_naipe)
                    printf("\nNaipe válido");
                else
                    printf("\nNaipe inválido");
                //verificar se é do mesmo numero
                validar_numero = 0;
                num_carta = jogador_a_carta[i] % 13;
                numero_mesa = carta_mesa % 13;
                numero_jogado = carta_jogada % 13;
                if(numero_mesa == numero_jogado)
                    validar_numero = 1;
                if(validar_numero)
                    printf("\nNumero válido");
                else
                    printf("\nNumero inválido");
                //jogar a carta valida
                if(validar_carta && (validar_naipe || validar_numero))
                {
                    passa_jogada=1;
                    //meter carta na mesa
                    carta_mesa=carta_jogada;
                    //tirar carta do jogador
                    for(i = 0;i < 52;i++)
                    {
                        if(jogador_a_carta[i] == carta_jogada)
                            jogador_a_carta[i]= 0;
                    }        
                }
                else 
                {
                    printf("\nJogada inválida");
                }
                break;
            case '2':
                //verificar se o baralho tem cartas
                if(baralho_carta[0] != 0)
                {
                    //ir buscar a ultima carta ao baralho
                    for(i = 0;i < 52;i++)
                    {
                        if(baralho_carta[i] == 0)
                        {
                            carta_temporaria = baralho_carta[i-1];
                            baralho_carta[i-1]=0;
                            break;
                        }
                    }
                    //inserir carta na mao do jogador
                    for(i = 0;i < 52;i++)
                    {
                        if(jogador_a_carta[i] == 0)
                        {
                            jogador_a_carta[i]=carta_temporaria;
                            break;
                        }
                    }
                    //escreve carta retirada
                    printf("\nCarta do baralho:");
                    imprime_carta(carta_temporaria);
                }
                else
                printf("Baralho vazio!");
                break;
        }
        getch();
    }while(opcao_jogador_a != '3' && passa_jogada == 0);
}
void menu_jogador_b()
{
    do
    {
        system("cls");
        printf("\nCarta na mesa:");
        imprime_carta(carta_mesa);
        imprime_cartas_b();
        printf("\n\nJogador B\n");
        printf("1-Jogar uma carta\n");
        printf("2-Buscar ao baralho\n");
        printf("3-Passar jogada\n");
        printf("Opção:");
        scanf("\n%c",&opcao_jogador_b);
        passa_jogada=0;
        switch(opcao_jogador_b)
        {
            case '1':
            //ler carta do jogador
                printf("Carta:");
                scanf("%d",&carta_jogada);
                //validar se a carta existe nas cartas do jogador
                validar_carta = 0;
                for(i = 0;i < 52;i++)
                {
                    if(jogador_b_carta[i] == carta_jogada)
                        validar_carta = 1;
                }
                if(validar_carta)
                    printf("Carta válida");
                else
                    printf("Carta inválida");
                //validar se a jogada é valida
                //verficar se é do mesmo naipe
                validar_naipe = 0;
                naipe = jogador_b_carta[i] / 14;
                naipe_mesa = carta_mesa / 14;
                naipe_jogado = carta_jogada / 14;
                if(naipe_mesa == naipe_jogado)
                    validar_naipe = 1;
                if(validar_naipe)
                    printf("\nNaipe válido");
                else
                    printf("\nNaipe inválido");
                //verificar se é do mesmo numero
                validar_numero = 0;
                num_carta = jogador_b_carta[i] % 13;
                numero_mesa = carta_mesa % 13;
                numero_jogado = carta_jogada % 13;
                if(numero_mesa == numero_jogado)
                    validar_numero = 1;
                if(validar_numero)
                    printf("\nNumero válido");
                else
                    printf("\nNumero inválido");
                //jogar a carta valida
                if(validar_carta && (validar_naipe || validar_numero))
                {
                    passa_jogada=1;
                    //meter carta na mesa
                    carta_mesa=carta_jogada;
                    //tirar carta do jogador
                    for(i = 0;i < 52;i++)
                    {
                        if(jogador_b_carta[i] == carta_jogada)
                            jogador_b_carta[i]= 0;
                    }        
                }
                else 
                {
                    printf("\nJogada inválida");
                }
                break;
            case '2':
                //verificar se o baralho tem cartas
                if(baralho_carta[0] != 0)
                {
                    //ir buscar a ultima carta ao baralho
                    for(i = 0;i < 52;i++)
                    {
                        if(baralho_carta[i] == 0)
                        {
                            carta_temporaria = baralho_carta[i-1];
                            baralho_carta[i-1]=0;
                            break;
                        }
                    }
                    //inserir carta na mao do jogador
                    for(i = 0;i < 52;i++)
                    {
                        if(jogador_b_carta[i] == 0)
                        {
                            jogador_b_carta[i]=carta_temporaria;
                            break;
                        }
                    }
                    //escreve carta retirada
                    printf("\nCarta do baralho:");
                    imprime_carta(carta_temporaria);
                }
                else
                printf("Baralho vazio!");
                break;
        }
        getch();
    }while(opcao_jogador_b != '3' && passa_jogada == 0);
}
void main()
{
    setlocale(LC_ALL, "Portuguese");

    int vitoria_jogador_b=1;
    int vitoria_jogador_a=1;
    time_t t;
    
    for(contador = 0; contador < 52; contador++)
    {
        baralho_carta[contador]  = 0;
        jogador_a_carta[contador]  = 0;
        jogador_b_carta[contador]  = 0;
    }
    srand((unsigned)time(&t));
    /*for (i = 0; i < 52; i++)
    {
        baralho_carta[i] = rand() % 52 + 1;
    }*/
    //baralhar baralho
    for(i = 0; i < 52; i++)
    {
        baralho_carta[i]=i + 1;
        
    }
    //shuffle array
    for (i = 0; i < 52; i++) 
    {
    int temp = baralho_carta[i];
    int randomIndex = rand() % 13;
    baralho_carta[i] = baralho_carta[randomIndex];
    baralho_carta[randomIndex] = temp;
    }
    for(i = 0;i < 7; i++)
    {
        jogador_a_carta[i] = baralho_carta[51-i];
        jogador_b_carta[i] = baralho_carta[44-i];
        baralho_carta[51-i] = 0;
        baralho_carta[44-i] = 0;
    }
    printf("\n\n");
    imprime_cartas_a();
    imprime_cartas_b();
    printf("\n\n");
    imprime_baralho();
    //tirar carta do baralho e por na mesa 
    carta_mesa = baralho_carta[37];
    baralho_carta[37] = 0;
    printf("\n\n");
    imprime_carta(carta_mesa);
    printf("\n");
    //ciclo de jogo
    do
    {
        menu_jogador_a();
        //condição de vitoria
        vitoria_jogador_a=0;
        for(i = 0;i < 52;i++)
        {
            if(jogador_a_carta[i] != 0)
            vitoria_jogador_a = 1;
        }
        if(vitoria_jogador_a == 1)
        {
            menu_jogador_b();
            //condição de vitoria
            vitoria_jogador_b=0;
            for(i = 0;i < 52;i++)
            {
                if(jogador_b_carta[i] != 0)
                vitoria_jogador_b = 1;
            }
        }
    }while(vitoria_jogador_a && vitoria_jogador_b);
    if(vitoria_jogador_a == 0)
    printf("\nVitoria do jogador A!");
    else
    printf("\nVitoria do jogador B!");
}
Link to comment
Share on other sites

ok ... não estou a ver bem as regras do jogo, mas aqui fica uma base para tornar tudo mais simples

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

// total number of cards
#define TOTAL_CARDS 52

// ranks of cards
typedef enum {
    Unranked = 0, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King, Ace,
} card_rank_t;

const char * card_rank_name(card_rank_t rank) {
    const static char * names[] = {"0", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};
    return names[rank];
}

// suits of cards
typedef enum {
    Unsuited = 0, Clubs, Diamonds, Hearts, Spades,
} card_suit_t;

const char * card_suit_name(card_suit_t suit) {
    const static char * names[] = {"Undefined", "\u2663", "\u2666", "\u2665", "\u2660"};
    return names[suit];
}

// card definition
typedef struct {
    card_rank_t rank;
    card_suit_t suit;
} card_t;

void card_print(card_t card) {
    printf("%s%s", card_rank_name(card.rank), card_suit_name(card.suit));
}

// (variable sized) deck of cards
typedef struct {
    card_t cards[TOTAL_CARDS];
    size_t count;
} deck_t;

deck_t * deck_create() {
    deck_t * deck;
    if ((deck = malloc(sizeof(deck_t))) == NULL)
        return NULL;
    deck->count = 0;

    for (int idx = 0; idx < TOTAL_CARDS; idx++) {
        deck->cards[idx].rank = Unranked;
        deck->cards[idx].suit = Unsuited;
    }

    return deck;
}

void deck_destroy(deck_t ** deck) {
    if (deck != NULL && *deck != NULL) {
        free(*deck);
        *deck = NULL;
    }
}

deck_t * deck_push_card(deck_t * deck, card_t card) {
    if (deck == NULL || deck->count == 52)
        return NULL;

    deck->cards[deck->count] = card;
    deck->count++;

    return deck;
}

deck_t * deck_pop_card(deck_t * deck, card_t * card) {
    if (deck == NULL || card == NULL || deck->count == 0)
        return NULL;

    *card = deck->cards[deck->count - 1];
    deck->count--;

    return deck;
}

deck_t * deck_remove_card(deck_t * deck, size_t idx, card_t * card) {
    if (deck == NULL || card == NULL || deck->count == 0 || idx >= deck->count)
        return NULL;

    *card = deck->cards[idx];
    if (idx != deck->count - 1)
        memmove(&deck->cards[idx], &deck->cards[idx + 1], sizeof(card_t) * (deck->count - idx - 1));
    deck->count--;

    return deck;
}

deck_t * deck_move_to_deck(deck_t * deck, size_t idx, deck_t * target) {
    if (deck == NULL || target == NULL || deck->count == 0 || idx >= deck->count)
        return NULL;

    card_t card;
    deck_remove_card(deck, idx, &card);
    deck_push_card(target, card);

    return deck;
}

deck_t * deck_discard(deck_t * deck) {
    if (deck == NULL)
        return NULL;

    deck->count = 0;

    return deck;
}

deck_t * deck_shuffle(deck_t * deck) {
    if (deck == NULL)
        return NULL;

    card_t card;
    srand(time(NULL));
    for (size_t i = 0; i < deck->count * 10; i++) {
        deck_remove_card(deck, rand() % deck->count, &card);
        deck_push_card(deck, card);
    }

    return deck;
}

deck_t * deck_print(deck_t * deck) {
    if (deck == NULL)
        return NULL;

    for (int idx = 0; idx < deck->count; idx++) {
        printf("%d : ", idx);
        card_print(deck->cards[idx]);
        printf("\n");
    }

    return deck;
}

deck_t * deck_print_top(deck_t * deck) {
    if (deck == NULL)
        return NULL;

    if (deck->count > 0) {
        card_print(deck->cards[deck->count - 1]);
        printf("\n");
    }

    return deck;
}

// pile actions
deck_t * pile_initialize(deck_t * pile) {
    if (pile == NULL) return NULL;

    for (int s = Clubs; s <= Spades; s++)
        for (int r = Two; r <= Ace; r++) {
            card_t card = {rank: r, suit: s};
            deck_push_card(pile, card);
        }

    return pile;
}

// player actions
deck_t * player_initialize(deck_t * player, deck_t * pile, size_t count) {
    if (player == NULL || pile == NULL || count > pile->count)
        return NULL;

    for (size_t i = 0; i < count; i++)
        deck_move_to_deck(pile, pile->count - 1, player);

    return player;
}

int main(int argc, char * argv[]) {
    deck_t * pile = deck_create();
    deck_t * player1 = deck_create();
    deck_t * player2 = deck_create();
    deck_t * table = deck_create();

    pile_initialize(pile);                // insert all the 52 cards in the pile deck
    deck_shuffle(pile);                   // shuffles the 52 cards in the pile

    player_initialize(player1, pile, 5);  // player 1 takes 5 cards
    player_initialize(player2, pile, 5);  // player 2 takes 5 cards

    printf("player 1 hand:\n");           // print the player 1 hand
    deck_print(player1);
    printf("\n");

    printf("player 2 hand:\n");           // print the player 2 hand
    deck_print(player2);
    printf("\n");

    printf("table:\n");                   // print the table top card
    deck_print_top(table);
    printf("\n");

    deck_destroy(&table);
    deck_destroy(&player1);
    deck_destroy(&player2);
    deck_destroy(&pile);
    return 0;
}

 

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.