Red de conocimiento informático - Espacio del host - Código de juego de programación en lenguaje C móvil

Código de juego de programación en lenguaje C móvil

//calc 24. CPP: Define el punto de entrada de la aplicación de consola.

//

/*

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

}

char GetOper(int n)

{

Switch(n)

{

Caso 0:

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)

{

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]);

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 ){

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;

}