Con un microcontrolador y un poco de idea sólo hacen falta 2 pines de I/O para todo el juego, y se pueden hacer plantillas con código variable para que las respuestas correctas no sean siempre las mismas. Una de las I/O, controlara tanto los leds como los pitiditos (los leds se iluminaran por pulsos cuadrados del audio pero al ir a más de 50Hz, no veras parpadeo. Para iluminar ambos leds con una I/O, conectas los leds en antiparalelo hacia un divisor resistivo. De esa forma, si quieres encender un LED, activas nivel alto o nivel bajo para encender uno u otro, alternas entre alto o bajo para encender los dos, o pones la I/O como entrada (alta impedancia) para apagar ambos. Igualmente puedes alternar ente uno de los niveles y el modo input para mantener un sólo LED encendido y además generar una onda cuadrada de la frecuencia que quieras o una combinación de ellas para hacer distintos tonos o melodías, esta señal la recoges directamente en el divisor resistivo a traves de un condensador de acople hacia un pequeño amplificador (LM386) que saque la melodía por un sencillo altavoz de 0.5W de los de torre de PC, incluso el amplificador se puede sustituir por un simple transistor de media potencia, como un BC337.
Una vez solucionado el audio y el "vídeo", vamos a los controles:
El juego no deja de ser simplemente una matriz de filas y columnas. Pongamos que tienes 10 filas y 10 columnas, entonces tienes 100 combinaciones posibles (como en un teclado matricial), digo 100 por no decir que tienes otra dimensión más en la matriz y entonces tendrías 1000 combinaciones.
El juego para cada plantilla tiene varias posiciones que son correctas, pongamos que las filas las nombramos de la A a la J, y las columnas del 0 al 9, pues podías tener para una plantilla en concreto las combinaciones A3,B7,C1,D5,E0,F1,G8,H8,I6,J4, como correctas y el resto como erróneas, y la plantilla siguiente que la combinación correcta sea distinta.
Para implementar la matriz con sólo un pin I/Ohace falta que en esa entrada dispongamos de un comparador interno en el micro. Hacemos una matriz compuesta por resistencias en las filas que sean de valores 1k, 1,5k, 2,2k, 2,7k, 3,3k... Y así hasta llegar a los 8,2k o hasta las filas que quieras, e implementas las columnas con los mismos valores que las filas pero multiplicados por el máximo de resistencia de la filas, por ejemplo 10k, 22K, 33k, 47k... De esa forma cualquier combinación de resistencias en serie de una fila y una columna va a dar un valor único. La matriz entera se puede considerar como una resistencia variable.
En nuestro microcontrolador colocamos nuestra resistencia variable entre el pin de I/O y masa, y en paralelo a un condensador, por ejemplo de 100nF. La rutina es sacar un 1 por la salida durante unos milisegundos, e inmediatamente cambiar a entrada analógica y temporizar la descarga del condensador a través de la resistencia variable. Cada combinación tendrá una ventana de temporización unica,. Para evitar el efecto rebotes, lee varias veces, pongamos 3 o más, y toma el valor correcto cuando la lectura sea estable.
Cuando no hay ningun a combinación la resistencia de la matriz será infinita, así que puedes aprovechar esto para colocar en paralelo a la matriz una resistencia de 100K,220K,330K... Distinta en cada plantilla y de esa forma identificas que plantilla se esta usando en el juego actualmente.
Como sólo necesitas 2 I/O, cualquier microcontrolador te sirve, el pic12Fxx, o el ATtinny más económico y simplón lo puedes utilizar, siempre que tenga ucomparador interno.