Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

kossoski

embaralhar cartas

Recommended Posts

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


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

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

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.