elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Aporte] Piedra Pape y Tijera - Mini-Autómata + Ejercicio
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Aporte] Piedra Pape y Tijera - Mini-Autómata + Ejercicio  (Leído 2,507 veces)
AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.696


🏴 Libertad!!!!!


Ver Perfil WWW
[Aporte] Piedra Pape y Tijera - Mini-Autómata + Ejercicio
« en: 7 Julio 2016, 15:47 pm »

Muy buen dia como saben en mi canal de youtube tengo tutoriales de programación en C el ultimo que hice es el juego de Piedra Pepel y Tijera algo sencillo pero usando una Tabla de Estados simulando la forma mas básica de un autómata.

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
  1. /*
  2. Realizado por Luis Alberto
  3.  
  4. Contacto
  5. Twitter: @albertobsd
  6.  
  7. */
  8. #include<stdio.h>
  9. #include<stdlib.h>
  10. #include<time.h>
  11. #include<stdbool.h>
  12.  
  13. //Constantes para las jugadas
  14. #define PIEDRA 0
  15. #define PAPEL 1
  16. #define TIJERA 2
  17.  
  18.  
  19. int main() {
  20. int jugador = 0, computadora = 0; // Variables para la seleccion de los Jugadores (Usuario - Computadora)
  21. char *jugadas[3] = {"Piedra","Papel","Tijera"}; //Cadenas para imprimir segun lo seleccionado por las variables Anteriores
  22.  
  23. /*
  24. Exclusivamente para el resultado (Matriz bidimencional)
  25.  
  26. Columnas para la Computadora
  27. Filas para el Jugador
  28.  
  29. Valores:
  30. - 1 si el jugador Gana
  31. - 0 si el jugador Empata
  32. - 2 si el jugador Pierde
  33. [0][P][G]
  34. [G][0][P]
  35. [P][G][0]
  36.  
  37. */
  38. int resultados[3][3] = {{0,2,1},
  39. {1,0,2},
  40. {2,1,0}};
  41. char *resultados_str[3] = {"El jugador Empata","El Jugador Gana","El jugador Pierde"}; // Cadenas con los resultados
  42. bool entrar = true; //Variable para detener el ciclo
  43. int opcion; //Opcion seleccionada
  44. char temp[10]; //Variable temporal para guardar la entrada desde el teclado
  45. char *valor = NULL; //Puntero adicional usado por strtol
  46. srand(time(NULL)); // inicializar la semilla Pseudo-Aleatoria
  47. do {
  48. computadora = rand() % 3; //Valor seleccionado por la computadora al azar
  49. //Menu para el usuario
  50. printf("1) %s\n",jugadas[PIEDRA]);
  51. printf("2) %s\n",jugadas[PAPEL]);
  52. printf("3) %s\n",jugadas[TIJERA]);
  53. printf("S) Salir\n");
  54. printf("Ingrese su opcion: ");
  55. fgets(temp,10,stdin); // Capturamos texto
  56. opcion = strtol(temp,&valor,10); //Convertimos el texto a Entero
  57. if(valor[0] == '\0' || valor[0] == 0x0a) { //Si es un valor valido continuas
  58. switch(opcion) { //switch para las opciones pero se pudo usar un IF
  59. case 1:
  60. case 2:
  61. case 3:
  62. jugador = opcion - 1; //Seleccion del Jugador
  63. //resultados:
  64. printf("La computadora elijio %s\n",jugadas[computadora]);
  65. printf("El jugador elijio %s\n",jugadas[jugador]);
  66. printf("Resultado: %s\n",resultados_str[resultados[jugador][computadora]]);
  67. break;
  68. default:
  69. printf("Aprende a leer solo valores del 1 al 3 o la letra S mayuscula\n");
  70. break;
  71. }
  72. }
  73. else { //Si no es valor valido posiblemente sea una S
  74. //printf("Elijio %.2x\n",valor[0]);
  75. if(temp[0] == 'S') { //Si es S establecemos la variable para salir del ciclo
  76. entrar = false;
  77. }
  78. }
  79. }while(entrar);
  80. return 0;
  81. }

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
  1. struct nodo_ppt {
  2. int count;
  3. int respuesta[3];
  4. };

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
  1. 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
  1. 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


« Última modificación: 10 Julio 2016, 17:22 pm por AlbertoBSD » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Una ayudita juego piedra, papel, tijera en python « 1 2 »
Scripting
kaiminfain 10 13,862 Último mensaje 7 Enero 2010, 13:51 pm
por kaiminfain
piedra papel tijera....en c++
Programación C/C++
flony 6 14,168 Último mensaje 9 Agosto 2010, 05:24 am
por Beakman
[SRC] Piedra Papel Tijera [Pro version (?) xD]
Programación Visual Basic
Psyke1 0 1,557 Último mensaje 6 Noviembre 2010, 17:30 pm
por Psyke1
[BATCH-GAME] Piedra papel o tijera xD
Scripting
Eleкtro 2 5,127 Último mensaje 8 Agosto 2012, 12:00 pm
por Puntoinfinito
Descubren la forma científica de ganar en piedra-papel-tijera
Dudas Generales
wolfbcn 0 2,469 Último mensaje 4 Mayo 2014, 01:42 am
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines