Título: Auxilio :C Publicado por: aydeemeza13 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; } Título: Re: Auxilio :C Publicado por: eferion 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
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
Y luego, "repartir" puede ser simplemente asignar los valores del arreglo de forma secuencial: Código
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. Título: Re: Auxilio :C Publicado por: leosansan 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
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
para obtener una salida como: Código
¡¡¡¡ Saluditos! ..... !!!! (http://st.forocoches.com/foro/images/smilies/aaaaa.gif) |