Como implementar o jogo Lights-Out usando portas lógicas ou chinelos?

9

Primeiro, para aqueles que não estão familiarizados com o jogo, é assim que o jogo funciona,

jogo

O objetivo do jogo é desligar todas as luzes, chamadas de "Luzes apagadas", e cada vez que pressionar o botão / luz inverte seu estado, bem como seus vizinhos adjacentes norte / sul / leste / oeste, e é praticamente isso .

Agora, o que eu conseguia pensar é usar chinelos SR ou chinelos JK. Isso se deve à sua capacidade de atuar como elemento de armazenamento (o estado inicial e o próximo estado). Mas não consigo pensar em maneiras de implementá-las.

Outra idéia é que cada conjunto de botão e seus botões / luzes adjacentes (NSEW) terão sua própria tabela de verdade, assim:

tabela lógica

mas, é possível que as variáveis ​​de entrada sejam iguais às variáveis ​​de saída? Existem outras maneiras de fazer isso?

Julienn
fonte

Respostas:

9

A abordagem óbvia seria usar um processador e fazer tudo isso no firmware.

No entanto, se eu realmente precisasse fazer isso com facas de pedra e peles de urso por algum motivo, dedicaria um flip-flop alternativo a cada quadrado. O flip-flop de cada quadrado seria alternado com o pressionar do botão ou com um dos quatro botões vizinhos. É claro que esses pressionamentos de botão precisam ser devolvidos. Novamente, isso seria mais fácil no firmware.

Uma solução de hardware não seria tão complexa, mas tudo seria replicado 25 vezes, tornando-a grande e tediosa para ser construída.

Adicionado:

Aparentemente, a descrição acima não é clara o suficiente. Aqui está um diagrama do que está em cada célula:

As outras 4 entradas para o portão NAND são direcionadas a partir dos sinais emitidos pelos 4 botões circundantes que também devem alternar o estado desse quadrado. Da mesma forma, o sinal rebocado desse botão também vai para uma das entradas da porta NAND de cada uma das 4 células circundantes.

Olin Lathrop
fonte
11
Parece a coisa mais viável a se fazer. Eu usaria TFFs e amarraria todas as entradas T em "1". Então eu teria um interruptor momentâneo SPDT para cada botão. Amarre um arremesso a "0", um arremesso a "1" e depois o polo às entradas correspondentes do relógio TFF. Então, quando você pressiona um botão, ele alterna os flip-flops ao redor, gerando uma única borda pos / neg.
Shamtam 01/12/12
11
@ Shamtam: Sim, essa é uma maneira de rebater se você tiver interruptores SPDT. A maioria dos botões de pressão, porém, é apenas o SPST normalmente aberto.
Olin Lathrop
Eu acho que eu teria que usar o interruptor SPDT para rebater, seja botão ou não. Agora eu entendo como conectar as entradas deste jogo, mas o que eu não entendo é como conectar as saídas aos LEDs. Quero dizer, não pode ser apenas uma saída simples (Q) para o LED e seus vizinhos o complemento (Q '), certo? Além disso, outra pergunta, preciso usar a entrada do sinal de relógio do TFF? Se sim, como?
Julienn 3/12/12
2
O flip-flop para cada célula aciona seu LED diretamente. A lógica relacionada às células vizinhas entra na entrada do flipflip, mas a saída permanece local na célula. Não, os comutadores SPDT não são necessários para a devolução. Existem várias técnicas para rebater um único sinal como de um comutador SPST.
amigos estão dizendo
11
Não, você não entende a lógica. Normalmente, as saídas debitadas são altas, portanto, todas as entradas para a porta NAND são altas, o que reduz a saída. Quando qualquer botão é pressionado, a entrada NAND obtém baixa, tornando a saída NAND alta. Essa borda baixa a alta faz com que o FF alterne seu estado.
Olin Lathrop
0

Eu diria que os chinelos T provavelmente seriam os mais fáceis, pois você pode alternar o estado de saída com uma única entrada. Você pode usar um único flip-flop para cada LED e com a entrada ligada ao seu botão e a saída ligada ao seu LED. Então você pode ter cada botão vinculado às entradas dos 4 chinelos adjacentes para alternar seu estado também.

Se você quiser usar flip-flops JK, poderá fazer T flip-flops com eles passando sua entrada para as duas entradas (J e K)

Anônimo
fonte
2
Você pode expandir sua resposta explicando como conectar 5 switches a cada flip-flop sem que eles interfiram entre si. Além disso, e quanto ao switch bounce?
Dave Tweed
0

Se alguém quisesse construir um jogo desse tamanho até 7x7 a partir de uma lógica discreta, o design mais prático provavelmente seria usar um registrador de turno circulante para manter o estado do quadro e um contador de seis bits para acompanhar o turno posição dos dados no registro. Desloque os dados pelo shifter em grupos de 8 bits para direcionar uma exibição multiplexada e digitalizar um teclado multiplexado. Tenha um contador de sete bits "flip light" que funcionará sempre que os seis bits inferiores não forem zero ou quando o estado do bit superior corresponder ao estado do botão atualmente decodificado. Inverta o estado da luz atual sempre que todos os itens a seguir se aplicarem:

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

Observe que, embora uma quantidade significativa de lógica seja necessária para decodificar esses estados de contador, seria trivial em comparação com o número de chips necessários para implementar cada luz separadamente.

supercat
fonte