Comment puis-je implémenter le jeu Lights-Out à l'aide de portes logiques ou de tongs?


9

Tout d'abord, pour ceux qui ne connaissent pas le jeu, voici comment le jeu fonctionne,

jeu

Le but du jeu est d'éteindre toutes les lumières, donc appelé "Lights Out", et chaque pression sur le bouton / la lumière inverse son état ainsi que ses voisins adjacents nord / sud / est / ouest, et c'est à peu près tout .

Maintenant, ce à quoi je pourrais penser, c'est en utilisant des tongs SR ou des tongs JK. Cela est dû à sa capacité à agir comme élément de stockage (l'état initial et l'état suivant). Mais je n'arrive pas à penser à des moyens de les mettre en œuvre.

Une autre idée est que chaque ensemble de boutons et ses boutons / voyants adjacents (NSEW) auront leur propre table de vérité, comme ceci:

table logique

mais est-il possible que les variables d'entrée soient les mêmes que les variables de sortie? Y a-t-il d'autres façons de procéder?

Réponses:


9

L'approche évidente serait d'utiliser un processeur et de faire tout cela dans le firmware.

Cependant, si j'avais vraiment besoin de le faire avec des couteaux en pierre et des peaux d'ours pour une raison quelconque, je dédierais une bascule à chaque carré. La bascule de chaque carré serait basculée en appuyant sur son bouton ou sur l'un des quatre boutons voisins. Bien sûr, ces pressions sur les boutons doivent être rebondies. Encore une fois, ce serait plus facile dans le firmware.

Une solution matérielle ne serait pas si complexe, mais tout serait répliqué 25 fois, ce qui la rendrait volumineuse et complexe à construire.

Ajoutée:

Apparemment, la description ci-dessus n'est pas assez claire. Voici un diagramme de ce qui se trouve dans chaque cellule:

Les 4 autres entrées de la porte NAND sont pilotées par les signaux anti-rebond des 4 boutons environnants qui sont également censés basculer l'état de ce carré. De même, le signal anti-rebond de ce bouton va également à l'une des entrées de la porte NAND de chacune des 4 cellules environnantes.


1
Cela semble être la chose la plus faisable à faire. J'utiliserais des TFF et lierais toutes les entrées T à "1.". Ensuite, j'aurais un interrupteur momentané SPDT pour chaque bouton. Attachez un jet à "0", un jet à "1", puis le pôle aux entrées d'horloge TFF correspondantes. Ensuite, lorsque vous appuyez sur un interrupteur, il bascule les bascules environnantes en générant un seul bord pos / neg.
Shamtam du

1
@Shamtam: Oui, c'est une façon de rebondir si vous avez des commutateurs SPDT. La plupart des boutons-poussoirs sont cependant normalement ouverts SPST.
Olin Lathrop

Je suppose que je devrais utiliser le commutateur SPDT pour anti-rebond, que ce soit un bouton-poussoir ou non. Je comprends maintenant comment connecter les entrées de ce jeu, mais ce que je ne comprends pas, c'est comment connecter les sorties aux LED. Je veux dire, ça ne peut pas être juste une simple sortie (Q) vers la LED et ses voisins le complément (Q ') non? En outre, une autre question, dois-je utiliser l'entrée de signal d'horloge du TFF? Si c'est le cas, comment?
Julienn du

2
La bascule pour chaque cellule entraîne directement sa LED. La logique concernant les cellules voisines entre dans l' entrée du flipflip, mais la sortie reste locale à la cellule. Non, les commutateurs SPDT ne sont pas requis pour le rebond. Il existe différentes techniques pour faire rebondir un signal unique comme à partir d'un commutateur SPST.
Olin Lathrop du

1
Non, vous ne comprenez pas la logique. Normalement, les sorties anti-rebond sont hautes, donc toutes les entrées de la porte NAND sont hautes, ce qui fait baisser la sortie. Lorsqu'une touche est enfoncée, cette entrée NAND get devient faible, ce qui rend la sortie NAND élevée. Ce bord bas à haut fait que le FF bascule son état.
Olin Lathrop

0

Je dirais que les tongs T seraient probablement les plus faciles car vous pouvez basculer leur état de sortie avec une seule entrée. Vous pouvez utiliser une seule bascule pour chaque LED et avec l'entrée liée à votre bouton et la sortie liée à votre LED. Ensuite, vous pourriez avoir chaque bouton lié aux entrées des 4 bascules adjacentes afin de changer également leur état.

Si vous vouliez utiliser des bascules JK, vous pouvez en faire des bascules T en passant votre entrée aux deux entrées (J et K)


2
Vous pouvez développer votre réponse en expliquant comment vous connectez 5 commutateurs à chaque bascule sans les faire interférer. Et qu'en est-il du rebond de commutateur?
Dave Tweed

0

Si l'on voulait construire un tel jeu jusqu'à la taille 7x7 à partir d'une logique discrète, la conception la plus pratique serait probablement d'utiliser un registre à décalage en circulation pour conserver l'état de la carte et un compteur à six bits pour suivre le décalage position des données dans le registre. Décalez les données à travers le levier de vitesses en groupes de 8 bits pour piloter un affichage multiplexé et numériser un clavier multiplexé. Avoir un compteur "flip light" à sept bits qui s'exécutera à chaque fois que les six bits inférieurs sont différents de zéro, ou lorsque l'état du bit supérieur correspond à l'état du bouton actuellement décodé. Inversez l'état de la lumière actuelle lorsque toutes les conditions suivantes s'appliquent:

6-bit counter isn't  xxx111
6-bit counter isn't  111xxx
7-bit counter isn't xxxxx00
7-bit counter isn't xx00xxx
7-bit counter is    00xx0xx

Notez que si une quantité importante de logique serait nécessaire pour décoder ces états de compteur, elle serait triviale par rapport au nombre de puces nécessaires pour implémenter chaque lumière séparément.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.