INTRODUCCIÓN 

Este es un simple juego de adivinación utilizando el tablero de desarrollo Arty y un emulador de terminal.

Este proyecto utiliza interruptores Arty, botones, y LEds para crear un simple juego de adivinación. El juego elije un numero entre 0 y 15 y le da al jugador 4 oportunidades para adivinar el número. El juego continúa hasta que el usuario toque el botón que acaba el juego.

OBJETOS UTILIZADOS EN ESTE PROYECTO:

Componentes Hardware:

Tablero Digilent Arty

Aplicaciones Software y servicios en línea:

Tera Term

Desarrollo del juego:

Para jugar este juego, el usuario debe tener un emulador de terminal compatible con UART, como por ejemplo Tera Term. El terminal presentará mensajes mientras se juega el juego.  Para introducir un número, el jugador debe conmutar los switches para obtener un número en binario.  El valor fijado en los conmutadores será presentado sobre los LEDs RGB en azul, en cualquier momento, para facilitar la lectura.  Cuando los jugadores han convenido un número, pueden introducir su opción tocando el botón 0. Si la adivinanza es correcta, el programa imprimirá un mensaje diciendo eso. Si la adivina es incorrecta, el programa imprimirá un mensaje diciéndole al jugador que la adivina fue demasiado grande o pequeña, y el número de oportunidades restantes. Si el jugador adivina incorrectamente 4 veces, todos los LEDs y los LEDs RGB rojos, parpadearan tres veces. Después, el programa imprimirá un mensaje revelando la respuesta correcta.  Finalmente, el juego pregunta a los jugadores si desean continuar jugando. El botón 0 inicia un nuevo juego, el botón 3 acaba el juego. Los jugadores también pueden acabar el juego en cualquier momento, tocando el botón 3.

Hardware:

Todo el hardware que necesita para este proyecto está en el mismo tablero Arty. Para iniciar la configuración, debe seguir el tutorial Arty – Primeros pasos con Microblaze en la página Digilent Documentation, con la adición de botones LEDs y LEDs RGB, botones y conmutadores al sistema antes de crear el envoltorio HDL y secuencias de bits. Además de estas adiciones, este proceso sigue el resto del tutorial.

Software:

Después de acabar el tutorial, se modifica helloworld.c  y se escribe otro fichero fuente C,  guessingGame.c , para implementar las características del juego. Antes de que los jugadores puedan iniciar el juego de adivinación, tendrán que inicializar las entradas y salidas sobre el tablero con una llamada a initIO(). Para operar una ocasión del juego de adivinación, los usuarios deben llamar la función guessingGame() . Esta función está escrita para ser llamada en un circuito, de tal manera que el juego pueda iniciar repetidamente hasta que el usurario desee acabar de jugar. Las otras funciones en guessingGame.c son funciones de soporte que gestionan varias partes del juego.

Unas de las características implementadas en el software incluyen resalto de entrada de usuario y detección de borde, modulación de la anchura del pulso LED (PWM), y generación de números aleatorios para el juego. En la función getGuess() , se implementa una manera de tocar botones de detección por un solo usuario de tal manera que, un toque del botón se registrará solamente una vez. Sin este sistema, un toque del botón, será detectado como múltiples toques. La otra característica, PWM sobre los LEDs fue implementado en displayGuess() y blinkLEDS() para atenuar la luz de los LEDs RGB. El generador aleatorio, es la función rand() del stdlib.h . Normalmente, esta función se utiliza solamente después de haber inicializado un valor inicial con srand() .  Una manera común de hacer esto, es utilizar el tiempo corriente como valor inicial. Sin embargo, sino puede conseguir el tiempo corriente en Arty el programa sigue con el valor inicial implícito. Esto significa que la secuencia de los números es siempre la misma, cada vez que el programa está operando.

Conclusiones

Este juego de adivinación está construido de tal manera que puede casi siempre adivinar el número correcto con el número de pruebas utilizando este algoritmo: empieza adivinando ocho, después añade o sustrae la siguiente potencia mínima de dos, en conformidad con el mensaje del juego. Este le garantiza encontrar la respuesta en el caso que la respuesta no es 0 o 1. Cuando pase esto, tendrá que adivinar entre 0 y 1. Este algoritmo se puede generalizar a juegos de adivinación más grandes, para determinar cuántas oportunidades serían necesarias para garantizar o casi garantizar el hallazgo de la respuesta correcta. Un juego de adivinación entre 0 y 2^n necesitara n oportunidades para encontrar la respuesta.

Imágenes