Dejo el codigo no sin antes proponerles un reto y es el siguiente: Dado el código siguiente modificarlo para que el programa sea capaz de "aprender" del histórico de jugadas del usuario y asi sea capas de predecir la próxima jugada.
Este aprendizaje no debe de perderse (Por lo tanto se debe de poder guardar para ser cargados en Futuros juegos)
Código
/* Realizado por Luis Alberto Contacto Twitter: @albertobsd */ #include<stdio.h> #include<stdlib.h> #include<time.h> #include<stdbool.h> //Constantes para las jugadas #define PIEDRA 0 #define PAPEL 1 #define TIJERA 2 int main() { int jugador = 0, computadora = 0; // Variables para la seleccion de los Jugadores (Usuario - Computadora) char *jugadas[3] = {"Piedra","Papel","Tijera"}; //Cadenas para imprimir segun lo seleccionado por las variables Anteriores /* Exclusivamente para el resultado (Matriz bidimencional) Columnas para la Computadora Filas para el Jugador Valores: - 1 si el jugador Gana - 0 si el jugador Empata - 2 si el jugador Pierde [0][P][G] [G][0][P] [P][G][0] */ int resultados[3][3] = {{0,2,1}, {1,0,2}, {2,1,0}}; char *resultados_str[3] = {"El jugador Empata","El Jugador Gana","El jugador Pierde"}; // Cadenas con los resultados bool entrar = true; //Variable para detener el ciclo int opcion; //Opcion seleccionada char temp[10]; //Variable temporal para guardar la entrada desde el teclado char *valor = NULL; //Puntero adicional usado por strtol do { //Menu para el usuario if(valor[0] == '\0' || valor[0] == 0x0a) { //Si es un valor valido continuas switch(opcion) { //switch para las opciones pero se pudo usar un IF case 1: case 2: case 3: jugador = opcion - 1; //Seleccion del Jugador //resultados: break; default: break; } } else { //Si no es valor valido posiblemente sea una S //printf("Elijio %.2x\n",valor[0]); if(temp[0] == 'S') { //Si es S establecemos la variable para salir del ciclo entrar = false; } } }while(entrar); return 0; }
Aqui les dejo el vídeo mencionado:
Saludos!
He creado una estructura para guardar los resultados y posteriormente guardar la estructura en un archivo
De hecho son 2 estrucuturas:
Código
struct nodo_ppt { int count; int respuesta[3]; };
La estrucutura anterior guarda un contador para indicar cuantas veces se a entrado a ese nodo y posteriormente cual fue la respuesta a esto.
Por ejemplo tenemos un arreglo de 9 nodos
Código
struct nodo_ppt nodos[9];
Y por ejemplo se juega Piedra(Jugador) vs Tijera(Computadora) entonces al igual que en la matriz de resultados:
Código
int resultados[3][3] = {{0,2,1},{1,0,2},{2,1,0}};
Entonces guardamos como nodos "previo" la posicion de nodos [(Jugador*3) +computadora] y en el proximo juego incrementamos la seleccion del jugador en el nodo previo y nuevamente ajustamos el nodo previo a la seleccion actual y repetimos.
Con esto tendremos un histórico de (Si en el juego anterior se juego X entonces en el juego siguiente Jugara Y (con mas probabilidad)) donde Y es el mayor numero seleccionado en el contador de respuesta