Programación en lenguaje C: simulación de reparto y barajado de cartas, por favor ayuda
#include
#include
#include
#include
#definir TRAJE 52
#define HALF 26
#define COLOR ((char)13)
// La codificación de los naipes es un conjunto de datos hexadecimales, numerados del 0 al 51.
//La función tell se utiliza para explicar el contenido de la codificación
int tell(char card, char * descripción)
{
char i=0, j=0;
char *suit[]={"Picas","Corazones","Tréboles","Diamantes"};
char * cara [] = {"A","2","3","4","5","6","7","8","9",
"10 " ,"Jack","Queen","King"};
//La pregunta es bastante extraña y requiere la deducción de 8 cartas ocultas, pero contiene el rey y el rey. La regla correcta debe ser descontar 8 cartas sin el rey o el rey, así cada persona tiene 11 cartas.
//De lo contrario, se deben descontar 10 cartas o 6 cartas, de lo contrario se repartirán cartas a cada persona. El número de cartas obtenidas no es el mismo (no es múltiplo de 4)
//Si es necesario, puedes definir JB=52, JA=53, SUIT=54, HALF=27.
//if (tarjeta > JB || tarjeta < 0 || !descripción) return 0;
//if (tarjeta == JB) { sprintf(descripción, "Grande Joker"); devolver 1; }
//if (tarjeta == JA) { sprintf(descripción, "Pequeño Joker"); devolver 1; }
i = tarjeta / COLOR; j = tarjeta % COLOR;
sprintf(descripción, "%s %s", traje[i], cara[j]);
devuelve 1;
}
//Inicializar cartas para formar una carta secuencial
int init(char *poker)
{
char i = 0;
if (!poker) devuelve 0;
for (i=0; i srand((unsigned)time(0)); return 1; } // Baraja las cartas y divide las cartas actuales en Las partes superior e inferior se agrupan y luego se cruzan. Hay dos posibilidades: primero la mano derecha y primero la mano izquierda. Este es el método de intercambio primero de la mano izquierda int wash_left_hand(char *poker) { char i=0, j=0, k=0; char boker[TRAJE]; if(!poker) return 0; for (i=0; i j = i * 2; //Primera mitad del grupo boker[j ] = poker[i]; k = i + HALF; //La segunda mitad del grupo boker[j+1]=poker[k]; }//siguiente i memcpy(poker, boker, TRAJE); return } // Mezcla las cartas actuales en dos grupos, superior e inferior, luego cruza, hay dos posibilidades: la mano derecha primero y la mano izquierda primero. Este es el método de intercambio primero de la mano derecha //Ten en cuenta que. la diferencia en el orden de las manos izquierda y derecha radica en el cambio par-impar de la variable j int wash_right_hand (char *poker) { char i=0, j=0, k=0; char boker[TRAJE]; if(!poker) devuelve 0; for( i=0; i j = i * 2; //medio grupo superior boker[j+1] = poker[i]; p> k = i + HALF; //La segunda mitad del grupo boker[j]=poker[ k]; }//siguiente i p> memcpy(poker, boker, SUIT); return 1; } // Baraja las cartas una vez según la carta actual , utilizando principalmente la paridad de la función aleatoria para determinar si lavar con la mano izquierda o con la derecha int wash_once(char *poker) { devolver rand()%2?wash_l eft_hand(poker):wash_right_hand(poker); } //Baraja las cartas aleatoriamente varias veces según las cartas actuales, al menos 8 veces y hasta 18 veces p> int wash_full(char *poker) { int i = 0, j = 0, k = 0; i = rand () % 10 + 8; printf("\nIntenta lavar %d veces.\n", i); for (j=0; j < i ; j++ ) k+ =wash_once(póker); return k; } int main(void) { elección de caracteres = 0, i = 0, j = 0; char poker[TRAJE], tarjeta[16]; init(poker); hacer { p> printf("\n\t¡Bienvenido a Mi juego de póquer!\n"); printf("\t0-Wash.\n"); printf (" \t1-Mostrar A.\n"); printf("\t2-Mostrar B.\n"); printf("\t3-Mostrar C. \n "); printf("\t4-Show D.\n"); printf("\cualquier otro número-salir.\n"); p> printf("¿Tu elección?"); scanf("%d", &choice); if(opción 4) break; if(choice ==0) { wash_full(poker); continuar; }//end if i = (elección - 1) * 11; //Ten cuidado al usar 11 cartas y restar 8 cartas ocultas printf("Su carta es...\n"); for( j = i; j tell(poker[j], tarjeta); printf("%s\t", tarjeta ); }//siguiente printf("\n"); }mientras(1); devuelve 0 ; }