elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Auxilio :C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Auxilio :C  (Leído 1,972 veces)
aydeemeza13

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Auxilio :C
« en: 14 Julio 2014, 06:55 am »

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


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Auxilio :C
« Respuesta #1 en: 14 Julio 2014, 08:21 am »

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:

Código
  1. int baraja[52];
  2.  
  3. for ( i = 0; i < 52; i++ )
  4.  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:

Código
  1. for ( i = 0; i < 52; i++ )
  2. {
  3.  int pos = rand( ) % 52;
  4.  
  5.  int temp = baraja[ i ];
  6.  baraja[ i ] = baraja[ pos ];
  7.  baraja[ pos ] = temp;
  8. }

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

Código
  1. // Cartas jugador 1
  2. int cartas_jug1[ 4 ];
  3. cartas_jug1[ 0 ] = baraja[ 0 ];
  4. cartas_jug1[ 1 ] = baraja[ 1 ];
  5. cartas_jug1[ 2 ] = baraja[ 2 ];
  6. cartas_jug1[ 3 ] = baraja[ 3 ];
  7.  
  8. // Cartas jugador 2
  9. int cartas_jug2[ 4 ];
  10. cartas_jug2[ 0 ] = baraja[ 4 ];
  11. cartas_jug2[ 1 ] = baraja[ 5 ];
  12. cartas_jug2[ 2 ] = baraja[ 6 ];
  13. cartas_jug2[ 3 ] = baraja[ 7 ];
  14.  
  15. // ...

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.


En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Auxilio :C
« Respuesta #2 en: 14 Julio 2014, 15:09 pm »

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
  1.  const char *palo[4] = { "Corazones", "Diamantes", "Treboles", "Picas" };
  2.  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
  1.  int carta;
  2.  for( carta = 0 ; carta < 20; carta++){
  3.    if ( carta %10 == 0 )
  4.      putchar('\n');
  5.  printf("\t%7s de %-9s%c", valor[baraja[carta] % 13], palo[baraja[carta] / 13],  ( carta+1 )  %2 == 0 ? '\n' : '\t');
  6.  }

para obtener una salida como:

Código
  1.  
  2.           Seis de Corazones               Diez de Corazones
  3.            Rey de Treboles                  As de Picas
  4.             As de Treboles               Nueve de Treboles
  5.            Dos de Picas                     As de Corazones
  6.            Dos de Treboles              Cuatro de Treboles
  7.  
  8.          Cinco de Corazones              Siete de Picas
  9.          Reina de Diamantes              Siete de Treboles
  10.           Diez de Diamantes               Jack de Diamantes
  11.            Dos de Diamantes               Tres de Picas
  12.          Reina de Corazones             Cuatro de Diamantes
  13.  
  14.  

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


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
AUXILIO
Multimedia
aula18 1 1,876 Último mensaje 27 Septiembre 2004, 07:23 am
por Sourraund
Auxilio
Programación C/C++
Gorka82 1 2,118 Último mensaje 11 Julio 2010, 02:45 am
por Littlehorse
AUXILIO !!!
Desarrollo Web
knight_d7 3 2,137 Último mensaje 15 Julio 2013, 19:12 pm
por knight_d7
AUXILIO ASUNTO GRAVE!!! « 1 2 3 4 »
Foro Libre
anonimo12 34 11,338 Último mensaje 20 Febrero 2021, 03:51 am
por MCKSys Argentina
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines