kossoski 0 Denunciar post Postado Junho 18, 2013 to tentando usar a função rand() i=rand()%4; mais não da dando certo #include <stdio.h> int main(){ int carta[52],baralho[52]; int i; char naipe[4] = { 'c', 'e', 'o', 'p' }; char n; printf("Baralho \n"); for (i=0; i<13; i++){ carta= i %13 +1; for (n=0; n<4; n++){ printf("%d%c\t\t",carta,naipe[n]); } } for (i=0; i<13; i++){ carta= i %13 +1; i=rand()%13 for (n=0; n<4; n++){ printf("%d%c\t\t",carta,naipe[n]); system("pause"); } Compartilhar este post Link para o post Compartilhar em outros sites
Asskiller 4 Denunciar post Postado Junho 18, 2013 Tente algo assim. i=rand()%3; switch(i) { case 0: naipe='c'; break; case 1: naipe='e'; break; case 2: naipe='o'; break; case 3: naipe='p'; break; Compartilhar este post Link para o post Compartilhar em outros sites
reebr 94 Denunciar post Postado Junho 18, 2013 Primeiro crie o baralho (armazene em uma string, o naipe e a número da carta). Feito isso, use a função rand() p/ embaralhar. No seu código, você está criando DUAS VEZES o baralho (apenas exibindo na tela), assim ele nunca será embaralhado. Sabe trabalhar com matriz bidimensional ou structs? Compartilhar este post Link para o post Compartilhar em outros sites
kossoski 0 Denunciar post Postado Junho 18, 2013 Não deu certo esta repetindo as cartas #include <stdlib.h> int main(){ int carta [52], i, n, x; char naipe [52], y; for (i = 0; i < 52; i++) { //inicialização carta = i / 4 +1; switch (i%4) { case 0: naipe = 'c';//copas break; case 1: naipe = 'e';//espada break; case 2: naipe = 'o';//ouros break; case 3: naipe = 'p';//paus break; } } printf("\n"); printf("\n"); for (i = 0; i < 52; i++) { //embaralhar; do { n = rand()%52; } while (i == n); x = carta; // x armazenar vetor carta = carta[n]; carta[n] = x; y = naipe; // y armazenar vetor naipe = naipe[n]; naipe[n] = y; printf("%d%c\t\t",carta[n],naipe[n]); } system("pause"); Compartilhar este post Link para o post Compartilhar em outros sites
reebr 94 Denunciar post Postado Junho 19, 2013 Use a função strcat. Com ela, junte o naipe com o número da carta. Crie baralho inteiro e armazene em um vetor de strings. Depois, use a função rand para embaralhar as cartas armazenadas no vetor. Compartilhar este post Link para o post Compartilhar em outros sites
kossoski 0 Denunciar post Postado Junho 19, 2013 Não sei muito sobre c++ Deve-se usar essa estrutura mas não esta embaralhando o índice, for (i=0; i<13; i++){ carta= i %13 +1; i=rand()%13 for (n=0; n<4; n++){ printf("%d%c\t\t",carta,naipe[n]); Compartilhar este post Link para o post Compartilhar em outros sites
reebr 94 Denunciar post Postado Junho 19, 2013 Você está querendo embaralhar algo que está sendo EXIBIDO NA TELA, ou seja, não está armazenado em lugar algum. É evidente que sempre irá aparecer um resultado diferente, a função rand() faz isso. const char naipe[] = {'C', 'O', 'P', 'E', '\0'}; const char carta[] = {'A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', '\0'}; for (i = 0; i < strlen(naipe); i++) { for (j = 0; j < strlen(carta); j++) printf("%c%c ", naipe[i], carta[j]); // -> só p/ ver quais cartas estão sendo criadas. printf("\n"); } Aí, ao invés de dar um printf para exibir as cartas, junte o naipe com carta[j] em um vetor de strings, assim fica mais fácil manipular (e embaralhar) o baralho depois. :lol: Compartilhar este post Link para o post Compartilhar em outros sites
Asskiller 4 Denunciar post Postado Junho 19, 2013 Quando se trabalha com algo manipulável se assim podemos dizer , uma constante como estas cartas.O interpretador nao sabe o que voce quer. O Interpretador é BURRO , então voce tem que especificar , por isso você nao estava obtendo resultados independente do que você escrevesse. const char naipe[] = {'C', 'O', 'P', 'E', '\0'}; const char carta[] = {'A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', '\0'}; Eu ainda lhe mostrei uma das possibilidades inicializando os naipes , coisa que você nao fez , se fez para os naipes seria necessário para as cartas. :) i=rand()%3; switch(i) { case 0: naipe[i]='c'; break; case 1: naipe[i]='e'; break; case 2: naipe[i]='o'; break; case 3: naipe[i]='p'; break; Compartilhar este post Link para o post Compartilhar em outros sites
kossoski 0 Denunciar post Postado Junho 19, 2013 Jogos de Cartas Implemente um sistema em C que represente um baralho de 52 cartas e que cumpra os seguintes requisitos: cada carta deve ser representada pelo seu valor (1 a 14) e pelo seu naipe (c-copas, e-espadas, o-ouros, p-paus) o sistema deve criar o baralho e representa-lo em um vetor de 52 posições o baralho deve ser apresentado na tela o sistema deve embaralhar as cartas e efetuar três jogadas. Essa parte de baixo eu sei fazer o que ta matando é fazer, embaralhar, armazenar e distribuir as cartas Eu to começando a aprender c++ agora ta difícil, e esse trabalho é pra entregar antes da prova ate sexta to ... em cada jogada devem ser distribuídas 5 cartas para o computador e 5 cartas para o jogador. as cartas devem ser comparadas na mesma ordem em que foram distribuídas entre os jogadores. a carta que tiver maior valor deve contar um ponto para o jogador/computador caso as cartas sejam de mesmo valor, deve-se avaliar o seu naipe de acordo com a sua ordem de importância: (menor) copas, espadas, ouros, paus (maior). Quem tiver o naipe de maior importância, ganha o ponto. ao final das três jogadas, deve-se apresentar quem ganhou o jogo.Jogos de Cartas Compartilhar este post Link para o post Compartilhar em outros sites
kossoski 0 Denunciar post Postado Junho 21, 2013 consegui meio que fazer a primeira parte agora como faço para distribuir void distribui(carta baralho[]) essas cartas para 2 jogadores e comparar quem ganhou #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> struct carta { char valor[13]; char naipe[4]; }; typedef struct carta carta; char valores[][13]={"1","2","3","4","5","6","7","8","9","10","11","12","13"}; char naipes[][4]={"c","e","p","o"}; void preenche(carta []); void embaralha(carta []); main(){ carta baralho[52]; srand(time(NULL)); preenche(baralho); embaralha(baralho); } void preenche(carta baralho[]) { int i; for(i=0;i<52;i++) { strcpy(baralho.valor,valores[i%13]); strcpy(baralho.naipe,naipes[i/13]); printf("%s%s%c\t",baralho.valor,baralho.naipe); } } void embaralha(carta baralho[]) { int i,j; carta temp; for(i=0;i<52;i++) { j=rand() %52; temp=baralho[j]; baralho[j]=baralho; baralho=temp; } } Compartilhar este post Link para o post Compartilhar em outros sites
Asskiller 4 Denunciar post Postado Junho 21, 2013 Cara voce entende esse codigo ae ? Primeiro nao há necessidade de utilizar structs neste exercício , irei te passar o código feito pelo neelix , e uma parte da funcao que embaralha estarei terminando ela depois. Tente acabar ela...Esta imprimindo alguns caracteres especiais e repitetindo tambem alguns caracteres. #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> #include <time.h> using namespace System; int preenche(void); int embaralha(void); //int jogadas(int carta[]); // variaveis globais char naipe[] = {'C', 'O', 'P', 'E', '\0'}; char carta[] = {'A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', '\0'}; int main(){ puts("Baralho :"); preenche(); embaralha(); puts("\n"); system("pause"); return 0; } int preenche(void){ int i; int j; for (i = 0; i < strlen(naipe); i++) { for (j = 0; j < strlen(carta); j++) printf("%c %c", naipe[i], carta[j]); // -> só p/ ver quais cartas estão sendo criadas. printf("\n"); } return 0; } int embaralha(void){ int i,j,k,l; int aux; printf("Baralho Embaralhado:\n"); for (i = 0; i < strlen(naipe); i++){ for (j = 0; j < strlen(carta); j++) aux = carta[j]; carta[j] = carta[i]; carta[i] = aux; } for(k=0; k < 52;k++){ strcat(carta,naipe); printf("%c",carta[k]); } puts("\n"); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites
reebr 94 Denunciar post Postado Junho 21, 2013 O que postei foi apenas p/ ver que trabalhando com os índices é possível criar as cartas, não era p/ ser usado o printf dentro do loop, eu fiz isso somente p/ ter uma noção (e ver) quais cartas seriam criadas. Compartilhar este post Link para o post Compartilhar em outros sites
Asskiller 4 Denunciar post Postado Junho 25, 2013 É,Percebi isso neelix , porem acho que pode ser valido para criação do baralho em si. Compartilhar este post Link para o post Compartilhar em outros sites