speedxtommy Posted April 5, 2022 at 08:40 PM Report Share #625714 Posted April 5, 2022 at 08:40 PM #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 More sharing options...
HappyHippyHippo Posted April 12, 2022 at 11:55 PM Report Share #625763 Posted April 12, 2022 at 11:55 PM este post é para obter opiniões sobre o código ou existe algum problema nele ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
speedxtommy Posted April 13, 2022 at 09:31 AM Author Report Share #625768 Posted April 13, 2022 at 09:31 AM 9 horas atrás, HappyHippyHippo disse: este post é para obter opiniões sobre o código ou existe algum problema nele ? Opiniões e se alguém precisar.Foi um projeto que tive que fazer para o meu curso e quis deixar aqui caso alguém precisasse Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 13, 2022 at 03:43 PM Report Share #625769 Posted April 13, 2022 at 03:43 PM 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 Portugol Plus Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now