Código de juego de programación en lenguaje C móvil
//
/*
6-6
Juego de Blackjack
*/
#Incluir "conio.h"
#Incluir " stdlib.h "
#Incluir "time.h"
#Incluir "math. h"
#include "string.h"/*
Elige cuatro cartas de una baraja de cartas.
2-10 se calculan como puntos (por conveniencia, 10 se representa con T), J, Q, K y A se calculan como 1.
Se requiere obtener el número 24 a través de las cuatro operaciones aritméticas de suma, resta, multiplicación y división.
Este programa puede sacar cartas al azar y resolverlas mediante prueba y error.
*/void GivePuzzle(char* buf)
{
char card[] = {'A ', ' 2 ', ' 3 ' , '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K'} para(int I = 0; i lt4; i ){
buf[I]= tarjeta[rand() 13];
}
}
Aleatorio no válido ( char * buf)
{
for(int I = 0;ilt5;i){
int k = rand() 4;
char t = buf[k];
buf[k]= buf[0];
buf[0]= t;
}
}
int GetCardValue(int c)
{
if(c=='T ') devuelve 10;
if(c gt; = ' 0 ' amp ampc lt='9 ') devuelve c-' 0 ';
devuelve 1
} p>
char GetOper(int n)
{
Switch(n)
{
Caso 0: p>
Devolver " ";
Caso 1:
Devolver '-';
Caso 2:
Devolver " *";
Caso 3:
Return "/";
} return "";
} duplica mi calc(double op 1, double op2, int oper)
{
Interruptor (operación)
{
Caso 0:
Regreso op 1 op2;
Caso 1:
Regreso op 1-op2;
Caso 2:
Regreso op 1 * op2;
Caso 3:
if(fabs(op2)>0.0001)
Devuelve op 1/op2;
Otros
Devuelve 100000;
}Devuelve 0;
}
void MakeAnswer(char* respuesta, int tipo, char* pregunta , int* oper)
{
char p[4][3];
for(int I = 0; i lt4; i) p>
{
if(pregunta[i] == 'T ')
strcpy(p[i], " 10 "
Otro
sprintf(p[i], "c", pregunta[I]);
}
Cambiar (tipo)
{
Caso 0:
sprintf(respuesta, "s c (s c (s c s)))",
p[0], GetOper(oper[ 0]), p[1], GetOper(oper[1]), p[2], GetOper(oper[2]), p[3]);
Pausa;
Caso 1:
sprintf(respuesta, " s c ((s c s) c
s)",
p[0], GetOper(oper[0]), p[1], GetOper(oper[1]), p[2], GetOper(oper[2]), p[3]);
Pausa;
Caso 2:
sprintf(respuesta, "(s c s) c (s c s)",
p[0], GetOper(ópera[0]), p[1], GetOper(ópera[1]), p[2], GetOper(ópera[2]), p[3]); p p>
Descanso;
Caso 3:
sprintf(respuesta, "((s c s) c s) c s",
p[0] , GetOper(oper[0]), p[1], GetOper(oper[1]), p[2], GetOper(oper[2]), p[3]);
Romper;
Caso 4:
sprintf(respuesta, "(s c (s c s)) c s ",
p[0], GetOper(oper[0]) , p[1], GetOper(oper[1]), p[2], GetOper(oper[2]), p[3]);
}
bool TestResolve(char* pregunta, int* oper, char* respuesta)
{
//Espera el candidato a completar
int type[5]={0, 1, 2, 3, 4} //Tipo de cálculo
Double p[4];
doble suma = 0;
//
for(int I = 0; i lt4; I ) //Bucle para obtener puntos.
{
p[I]= GetCardValue(int(pregunta[I])) for(I = 0; i lt5; i )
{
MakeAnswer(respuesta, tipo[i], pregunta, acción //Obtener posibles respuestas
Switch(tipo[i])
p>
{
Caso 0:
sum=MiCalcu(p[0], MiCalcu( p[1], MiCalcu(p[2], p[3] , oper[2]), oper[1], oper[0]); //A*(B*(c*D))
Pausa;
Caso 1:
sum=MiCalcu(p[0],MiCalcu(MiCalcu(p[1],p[2],oper[1]),p[3],oper[2],oper[0 ] ); //A *(B * C)* D)
Pausa;
Caso 2:
sum=MiCalcu(MiCalcu(p[0 ] , p[1], oper[0]), MyCalcu(p[2], p[3], oper[2], oper[1]); // (A*B)*(C*D)< / p>
Pausa;
Caso 3:
suma = mi cálculo(mi cálculo(mi cálculo(p[0], p[1], oper[0] ) , p[2], operación[1]), p[3], operación[2]); //((A*B)*C)*D
Pausa;
Caso 4:
sum=MiCalcu(MiCalcu(p[0], MiCalcu(p[1], p[2], oper[1]), oper[0], p[3] ,opera[2]); //(A*(B*C))*D
Descanso;
}
if(suma== 24 ) Devuelve verdadero
}
Devuelve falso
}
/*
Usa el método aleatorio de prueba y error : Es una solución que genera combinaciones de suma, resta, multiplicación y división a través de números aleatorios, y ha pasado por una gran cantidad de pruebas.
Consejos:
1. Considere el problema del uso de paréntesis para controlar el orden de cálculo, como: (10-4) * (3 A), de hecho, el número de secuencias de cálculo es limitado:
A*(B* (c*D))
a *(B * C)* D)
(A*B)*(C*D)
(( A*B)*C)*D
( A*(B*C))*D
2 Es necesario considerar la situación en la que el resultado del cálculo es una fracción. : (3 (3/7)) * 7.
3. La posición de la tarjeta en el título se puede cambiar a voluntad.
*/
bool TryResolve(char* pregunta, char* respuesta)
{
int oper[3]; Operadores de almacenamiento, 0: suma 1: resta 2: multiplicación 3: división.
for(int I = 0; ilt1000 * 1000; i)
{
//Desordenar el orden de las cartas
barajar (pregunta);
//operador generado aleatoriamente
for(int j = 0; j lt3; j)
oper[j] = rand() 4; si( TestResolve(pregunta, operación, respuesta)) devuelve verdadero
} devuelve falso
}
int main(int argc, char* argv[ ])
{
//Inicializar semilla aleatoria
srand((unsigned) time(null));//Tema
char buf 2[30];//Respuesta
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ");
Printf("Calcular 24 \n ");
Printf("A J Q K se calcula como 1, otros se calculan como puntos estancados Calcular\ n ");
Printf("El objetivo es combinar los resultados en cuatro operaciones: 24 \n ");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * \n \n ");
para(;;)
{
dar rompecabezas(buf 1); //Hacer una pregunta
printf("Título:");
for(int j = 0; j lt4; j ){ p >
if( buf1[j] == 'T ')
printf(" 10 ");
Otros
printf("c " ,buf 1[j]);
} printf(" \ nPresione cualquier tecla para ver la respuesta...\ n ");
getch(); (buf1, buf 2))//Resolver el problema
Printf ("referencia: s\n ", buf 2);
Otros
Printf( " Puede que no haya solución...\ n "); Printf("Presione cualquier tecla para ingresar al siguiente tema, presione la tecla X para salir...\ n "); ()== ' x ')romper;
}Devuelve 0;
}