Ir ao conteúdo

Ricardo José

Membro Júnior
  • Posts

    7
  • Cadastrado em

  • Última visita

Reputação

7
  1. @kgin Ficou bem estranho sim kkkkkkkkkkk mas deu para entender, verificação da faixa funciona uma vez só, mas se eu isistir em colocar numero fora da faixa novamente ainda conta a jogada. Estava pensando em algo que mesmo se o cara digitar 2000x fora da caixa ainda não contasse a jogada saca?
  2. @devair1010 mensagem é de boa, questão é tipo, 0 a 1000, ai tu digita 800, logo o programa fala para digitar numero de 0 a 800, dai a pessoa digita 801 mesmo sabendo que o numero é entre 0 a 800, e com isso não vai contar a jogada saca? Junto com uma mensagem de 'erro' pedindo para digitar numero novamente.
  3. Obrigado pela ajuda, foi de suma importância para finalização do trabalho, infelizmente não tenho muitos a quem recorrer e vejo que o pessoal aqui tem grande experiência no ramo. Agora estou em outro dilema em outro jogo, esse do poker deu certo, obrigado novamente!
  4. Jogo é simples, dando exemplo... você tem que adivinhar um número que seja de 0 a 1000, tendo 15 tentativas, a pessoa diz 800, o programa diz 'numero esta entre 0 e 800', mas digamos que a pessoa sabendo disso ainda sim ela vai e bota 801 mesmo sabendo que o programa disse que esta entre 0 e 800, dai quero colocar uma mensagem do tipo 'numero invalido' e assim não consumir a tentativa que a pessoa tem mesmo ela sendo 'burra' e digitando um numero que é certo não ter. Segue o codigo. https://onlinegdb.com/Ig6JSY0cH #include <stdio.h> #include <stdlib.h> #include <time.h> #include <locale.h> int main(){ setlocale(LC_ALL,"Portuguese"); int nivel, tamanho, numeroTentativas = 0, numeroAleatorio; printf("------------------------------------------------------------------------------\n"); printf("\t\t\t FOI GERADO UM NÚMERO\n"); printf("\t\t\t TENTE A SORTE\n"); printf("\t\t\t SERA QUE ELA ESTA AO SEU FAVOR? VEREMOS\n"); printf("------------------------------------------------------------------------------\n"); printf("(1) Nivel fácil! (5 Tentativas e o numero é de 0 ate 10)\n"); printf("(2) Nivel intermediario! (10 Tentativas e o numero é de 0 ate 100)\n"); printf("(3) Nivel difícil! (15 Tentativas e o numero é de 0 ate 1000)\n"); printf("(4) Nivel insano! (3 Tentativas e o numero é de 0 ate 1000)\n"); printf("(5) Nivel impossível! (1 Tentativa e o numero é de 0 ate 1000)\n"); printf("Escolha o nivel que deseja jogar: "); scanf("%d", &nivel); switch (nivel){ case 1 : tamanho = 10; numeroTentativas = 5; break; case 2 : tamanho=100; numeroTentativas = 10; break; case 3 : tamanho = 1000; numeroTentativas = 15; break; case 4 : tamanho = 1000; numeroTentativas = 3; break; case 5 : tamanho = 1000; numeroTentativas = 1; break; default : //Caso não corresponda à nenhum nível printf ("\nOpção inválida!\n"); printf ("\nPressione enter para continuar...\n"); while(getchar() != '\n'); getchar(); return 0; } srand(time(NULL)); numeroAleatorio = rand() % tamanho + 1; int numero, minimo = 0, maximo = tamanho, jogadas = 0, cont=0; do{ printf("Digite o número: "); scanf("%d", &numero); jogadas++; if(numero > numeroAleatorio){ if (numero < maximo) maximo = numero; printf("O número está entre %d e %d\n", minimo, maximo); printf("Você têm %d jogadas restantes...\n", numeroTentativas-jogadas); } else if (numero < numeroAleatorio){ if (minimo < numero) minimo = numero; printf("O número está entre %d e %d\n", minimo, maximo); printf("Você têm %d jogadas restantes...\n", numeroTentativas-jogadas); } else{ printf("\nParabéns! você acertou com %d jogadas!\n", jogadas); cont = numeroTentativas; //Encerra o loop } cont++; }while (cont < numeroTentativas); //Limite de jogadas if(jogadas == numeroTentativas && cont <= numeroTentativas){ printf("\nVocê errou todas as jogadas! Você perdeu!"); printf("\nO número sorteado era: %d\n", numeroAleatorio); } else{ printf("\nVocê errou %d jogadas!\n", jogadas-1); } return 0; }
  5. @kgin Gostei do modo como tu pensou sobre embaralhar, verei como introdusir em meu codigo de alguma forma, no caso seria na parte de Dealer.@arfneto Desculpa complicação no codigo, deveria ser mais simples mas ainda sou bem burro, me dê um desconto, quando perguntei eu entendi sua ideia só queria saber como tu colocaria. Mas entendi sim seu passo a passo. Triste não tive muito tempo pensar nesse trabalho, foi me dado menos de 1 semana e sem contar que tenho outras matérias, não existe só programação dai vim pedir ajuda pessoal aqui que são muito bons.
  6. Desculpa ingorância kkkkkkk. Entendi um pouco do que tu disse, tu faria como? É um projeto de primeiro periodo de TI,e estou enrolado nessa parte. Infelizmente todos pegaram coisas mais simples porém a bomba do poker ficou comigo e infelizmente ainda sou leigo . Se tiver como mandar link desses programas seus também, obrigado desde já!
  7. Boa tarde galera, fiz esse jogo de poker porém não sei como fazer de modo que cartas não se repitam, algo como, jogador 1 tem seis de paus, jogador 2 também ter seis de paus. Segue um link que direciona para um c online(mais fácil visualização) assim como código. https://www.onlinegdb.com/z9ju6i1Hd #include <stdio.h> #include <stdlib.h> #include <time.h> // As cartas são feitas simplesmente de um naipe e um valor struct Card{ int face; int suit; }; // Cada mão é apenas um conjunto de cinco cartas struct Hand{ struct Card cards[5]; }; // O baralho só vai conter as cartas que já geramos. // Ele também tem que saber quantas cartas foram dis tribuídas para que não // tem que iterar através de um monte de objetos de cartão em branco. struct Deck{ struct Card dealtCards[52]; int numCardsDealt; }; // Estou tornando essas variáveis globais para que não tenhamos que lidar com // gerenciamento de ponteiros para objetos locais. struct Hand hand1, hand2; struct Deck deck; // Esses arrays conterão todas as strings para simplificar a impressão. static const char *faceStrings[] = { "Dois","Três","Quatro","Cinco","Seis","Sete","Oito","Nove", "Dez","Valete","Dama","Rei","As"}; static const char *suitStrings[] = { "Copas","Paus","Ouros","Spadilha"}; static const char *rankStrings[] = { "Carta maior","Um par","Dois pares","Three of a Kind","Straight", "Flush","Full House","Four of a Kind","Straight Flush"}; // Precisamos de funções para gerar mãos, imprimir mãos e determinar // qual mão ganhou. void generateHands(); struct Card dealCard(); void printHands(); void analyzeHands(); int main(){ // primeira coisa, precisamos inicializar nosso deck deck.numCardsDealt=0; // Semeie nosso gerador aleatório srand(time(NULL)); // Em seguida, gere cartões generateHands(); // Imprima-os printHands(); // E encontrar o vencedor analyzeHands(); // Deixar o programa saber que foi feito e sem problemas return 0; } void generateHands(){ int i;// Variável de contador // FAzer as duas mãos em um loop para tornar o código mais simples. // Isso seria como o dealer alternando dando cartas para um // jogador ou outro. for(i=0; i<5; i++){ hand1.cards[i] = dealCard(); hand2.cards[i] = dealCard(); } } struct Card dealCard(){ int i;// Variável de contador int isUnique;// Esta variável acompanha se existem outras cartas correspondentes struct Card cardToDeal;// Cartas vamos devolver while(1){// Loop infinito, vamos parar quando pegarmos o cartão cardToDeal.face = rand()%13; cardToDeal.suit = rand()%4; isUnique = 1; // Verificar de 0 até a última carta que negociamos for(i=0; i<deck.numCardsDealt; i++){ if(deck.dealtCards[i].face == cardToDeal.face && deck.dealtCards[i].suit == cardToDeal.suit) isUnique = 0; } // Se cardToDeal não tiver sido distribuído if(isUnique){ deck.numCardsDealt++; deck.dealtCards[deck.numCardsDealt] = cardToDeal; return cardToDeal; } } } // As matrizes de strings que declarei na linha 40 correspondem aos índices // do valor da face ou do naipe das cartas void printHands(){ int i;// Variável de contador printf("Jogador um tem:\n"); for(i=0; i<5; i++) printf("%s de %s\n", faceStrings[hand1.cards[i].face], suitStrings[hand1.cards[i].suit]); printf("\nPlayer dois tem:\n"); for(i=0; i<5; i++) printf("%s de %s\n", faceStrings[hand2.cards[i].face], suitStrings[hand2.cards[i].suit]); } void analyzeHands(){ int i,j;// Variável de contador // Vou tentar usar um sistema semelhante ao do documento // Contagens de cada rosto e terno. int hand1FaceCounts[13]; int hand1SuitCounts[4]; int hand2FaceCounts[13]; int hand2SuitCounts[4]; // Inicializar esses arrays para zero. // Vou usar a função memset. //memset = preenche uma quantidade de uma determinada área da memória com um dado valor memset(hand1FaceCounts,0,sizeof(hand1FaceCounts)); memset(hand1SuitCounts,0,sizeof(hand1SuitCounts)); memset(hand2FaceCounts,0,sizeof(hand2FaceCounts)); memset(hand2SuitCounts,0,sizeof(hand2SuitCounts)); // Agora pegar os numeros for(i=0; i<5; i++){ hand1FaceCounts[hand1.cards[i].face]++; hand1SuitCounts[hand1.cards[i].suit]++; hand2FaceCounts[hand2.cards[i].face]++; hand2SuitCounts[hand2.cards[i].suit]++; } // Acompanhamento com o que cada mão tem. // Abreviando hand1 em h1 e assim por diante. int h1Rank=0, h1Consec=0, h1Straight=0, h1Flush=0, h1Four=0, h1Three=0, h1Pairs=0; int h2Rank=0, h2Consec=0, h2Straight=0, h2Flush=0, h2Four=0, h2Three=0, h2Pairs=0; // checar flush – 5 cartas do mesmo naipe for(i=0; i<5; i++){ if(hand1SuitCounts[i]==5) h1Flush=1; if(hand2SuitCounts[i]==5) h2Flush=1; } // checar para straight 5,6,7,8,9 // localizar primeira carta i = 0; while (hand1FaceCounts[i] == 0) i++; // contar as faces não nulas consecutivas for (; i < 3 && hand1FaceCounts[i]; i++) h1Consec++; if (h1Consec == 5) h1Straight = 1; // checar straight 5,6,7,8,9 // localize o primeiro cartão i = 0; while (hand2FaceCounts[i] == 0) i++; // contar as faces não nulas consecutivas for (; i < 3 && hand2FaceCounts[i]; i++) h2Consec++; if (h2Consec == 5) h2Straight = 1; /* checar 4-of-a-kind, 3-of-a-kind, e pares */ for (i = 0; i < 14; i++) { if (hand1FaceCounts[i] == 4) h1Four = 1; if (hand1FaceCounts[i] == 3) h1Three = 1; if (hand1FaceCounts[i] == 2) h1Pairs++; } for (i = 0; i < 14; i++) { if (hand2FaceCounts[i] == 4) h2Four = 1; if (hand2FaceCounts[i] == 3) h2Three = 1; if (hand2FaceCounts[i] == 2) h2Pairs++; } // Ranking mão 1 if (h1Straight && h1Flush) h1Rank=8; else if (h1Four) h1Rank=7; else if (h1Three && h1Pairs == 1) h1Rank=6; else if (h1Flush) h1Rank=5; else if (h1Straight) h1Rank=4; else if (h1Three) h1Rank=3; else if (h1Pairs == 2) h1Rank=2; else if (h1Pairs == 1) h1Rank=1; else h1Rank=0; // Ranking mão 2 if (h2Straight && h2Flush) h2Rank=8; else if (h2Four) h2Rank=7; else if (h2Three && h2Pairs == 1) h2Rank=6; else if (h2Flush) h2Rank=5; else if (h2Straight) h2Rank=4; else if (h2Three) h2Rank=3; else if (h2Pairs == 2) h2Rank=2; else if (h2Pairs == 1) h2Rank=1; else h2Rank=0; // Mostrar o que cada jogador tem. printf("\nJogador um tem a seguinte combinacao %s.\n",rankStrings[h1Rank]); printf("Jogador dois tem a seguinte combinacao %s.\n",rankStrings[h2Rank]); // Determinar vencedor if(h1Rank>h2Rank) printf("Jogador um vence essa rodada!!!\n"); else if(h2Rank>h1Rank) printf("Jogador dois vence essa rodada!!!\n"); else printf("Empate!!!\n"); }

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!