Auxilio :C

Iniciado por aydeemeza13, 14 Julio 2014, 06:55 AM

0 Miembros y 1 Visitante están viendo este tema.

aydeemeza13

Hola a todos, me encuentro en un problema, tengo que hacer un proyecto de juego de poker, donde se entreguen 4 cartas... eso lo hice, pero tengo que repartir 4 cartas a 4 jugadores y que no se repitan entre si las cartas :c
por favor :c alguien que me ayude u.u
miren aqui esta mi codigo


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

int main(){
   int i, card=0;
   char sel, men[15];
   srand(time(NULL));
   do{
      printf("Juego de cartas al azar...\n");

      for(i=1;i<=4;i++)
      {
         card=1+rand()%52;

         //la carta pertenece al mazo de las espadas
         if(card<=13)
         {
            if(card==1)
            {
               printf("\nLa carta %d es: A ",i);
               putchar(6);
            }
            if(card>1 && card<=10)
            {
               printf("\nLa carta %d es: %d ",i,card);
               putchar(6);
            }
            if(card==11)
            {
               printf("\nLa carta %d es: J ",i,card);
               putchar(6);
            }
            if(card==12)
            {
               printf("\nLa carta %d es: Q ",i,card);
               putchar(6);
            }
            if(card==13)
            {
               printf("\nLa carta %d es: K ",i,card);
               putchar(6);
            }
         }

         //la carta pertenece al mazo de los diamantes
         if(card>=14 && card<=26)
         {
            card=card-13;
            if(card==1)
            {
               printf("\nLa carta %d es: A ",i);
               putchar(4);
            }
            if(card>1 && card<=10)
            {
               printf("\nLa carta %d es: %d ",i,card);
               putchar(4);
            }
            if(card==11)
            {
               printf("\nLa carta %d es: J ",i,card);
               putchar(4);
            }
            if(card==12)
            {
               printf("\nLa carta %d es: Q ",i,card);
               putchar(4);
            }
            if(card==13)
            {
               printf("\nLa carta %d es: K ",i,card);
               putchar(4);
            }
         }

         //la carta pertenece al mazo de los treboles
         if(card>=27 && card<=39)
         {
            card=card-26;
            if(card==1)
            {
               printf("\nLa carta %d es: A ",i);
               putchar(5);
            }
            if(card>1 && card<=10)
            {
               printf("\nLa carta %d es: %d ",i,card);
               putchar(5);
            }
            if(card==11)
            {
               printf("\nLa carta %d es: J ",i,card);
               putchar(5);
            }
            if(card==12)
            {
               printf("\nLa carta %d es: Q ",i,card);
               putchar(5);
            }
            if(card==13)
            {
               printf("\nLa carta %d es: K ",i,card);
               putchar(5);
            }
         }

         //la carta pertenece al mazo de los corazones
         if(card>=40 && card<=52)
         {
            card=card-39;
            if(card==1)
            {
               printf("\nLa carta %d es: A ",i);
               putchar(3);
            }
            if(card>1 && card<=10)
            {
               printf("\nLa carta %d es: %d ",i,card);
               putchar(3);
            }
            if(card==11)
            {
               printf("\nLa carta %d es: J ",i,card);
               putchar(3);
            }
            if(card==12)
            {
               printf("\nLa carta %d es: Q ",i,card);
               putchar(3);
            }
            if(card==13)
            {
               printf("\nLa carta %d es: K ",i,card);
               putchar(3);
            }
         }
      }
      printf("\n\n quieres sacar mas cartas?... (y/n)");
      sel=getch();
      putchar(sel);
      if(sel=='y')
         system("cls"); // limpia la pantalla de salida
   }while(sel!='n');

   printf("\n\n");
   system("pause");
   return 0;
}

eferion

Nota: Para poner código, usa las etiquetas GeSHi, gracias.

Una posibilidad para evitar repetir las cartas es crearte un arreglo que contenga todas las cartas. Dado que para el caso has utilizado un identificador que va del 1 al 52 te vale con un arreglo de 52 posiciones y lo rellenas con un for de forma secuencial:


int baraja[52];

for ( i = 0; i < 52; i++ )
  baraja[ i ] = i+1;


Después tocaría barajar. Para ello puedes hacer uso de la función 'rand( )'. La idea es realizar permutaciones sobre la baraja para "mezclarla". Algo tal que:


for ( i = 0; i < 52; i++ )
{
  int pos = rand( ) % 52;

  int temp = baraja[ i ];
  baraja[ i ] = baraja[ pos ];
  baraja[ pos ] = temp;
}


Y luego, "repartir" puede ser simplemente asignar los valores del arreglo de forma secuencial:


// Cartas jugador 1
int cartas_jug1[ 4 ];
cartas_jug1[ 0 ] = baraja[ 0 ];
cartas_jug1[ 1 ] = baraja[ 1 ];
cartas_jug1[ 2 ] = baraja[ 2 ];
cartas_jug1[ 3 ] = baraja[ 3 ];

// Cartas jugador 2
int cartas_jug2[ 4 ];
cartas_jug2[ 0 ] = baraja[ 4 ];
cartas_jug2[ 1 ] = baraja[ 5 ];
cartas_jug2[ 2 ] = baraja[ 6 ];
cartas_jug2[ 3 ] = baraja[ 7 ];

// ...


Estos códigos se pueden mejorar bastante, la intención era presentar los conceptos de forma clara.

Por cierto, faltaría inicializar el generador de números aleatorios, pero eso ya te toca investigarlo a tí... no te lo voy a dar todo hecho ;)

Un saludo.

leosansan

Para evitar ese "rosario" de if, yo usaría un par de arrays que recojan el palo y el valor de la carta, algo como:

Código (cpp) [Seleccionar]
  const char *palo[4] = { "Corazones", "Diamantes", "Treboles", "Picas" };
  const char *valor[13] = {  "As", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete", "Ocho", "Nueve","Diez", "Jack", "Reina", "Rey" };


donde con las operaciones " % "  y  " / "  obtendría del valor de la carta el palo y su valor.

Y después de barajar, como te comentó anteriormente eferion, el reparto, suponiendo como planteas cuatro jugadores,  haría algo como:

Código (cpp) [Seleccionar]
  int carta;
  for( carta = 0 ; carta < 20; carta++){
    if ( carta %10 == 0 )
      putchar('\n');
  printf("\t%7s de %-9s%c", valor[baraja[carta] % 13], palo[baraja[carta] / 13],  ( carta+1 )  %2 == 0 ? '\n' : '\t');
  }


para obtener una salida como:

Código (cpp) [Seleccionar]


           Seis de Corazones               Diez de Corazones
            Rey de Treboles                  As de Picas
             As de Treboles               Nueve de Treboles
            Dos de Picas                     As de Corazones
            Dos de Treboles              Cuatro de Treboles

          Cinco de Corazones              Siete de Picas
          Reina de Diamantes              Siete de Treboles
           Diez de Diamantes               Jack de Diamantes
            Dos de Diamantes               Tres de Picas
          Reina de Corazones             Cuatro de Diamantes



¡¡¡¡ Saluditos! ..... !!!!