論理ゲートまたはフリップフロップを使用してLights-Outゲームを実装するにはどうすればよいですか?


9

まず、ゲームに不慣れな方のために、これがゲームの仕組みです。

ゲームプレイ

ゲームの目標は、すべてのライトをオフにすることです。これにより、「ライトアウト」と呼ばれ、ボタン/ライトを押すたびに、その状態と、隣接する北/南/東/西の隣接セルが反転します。 。

今、私が考えることができるのは、SRフリップフロップ、またはJKフリップフロップを使用することです。これは、ストレージ要素(初期状態と次の状態)として機能するためです。しかし、実際にそれらを実装する方法を考えることができないようです。

別のアイデアは、ボタンの各セットとそれに隣接する(NSEW)ボタン/ライトが次のように独自の真理値表を持つことです:

論理表

しかし、入力変数を出力変数と同じにすることは可能ですか?これを行う他の方法はありますか?

回答:


9

明らかなアプローチは、プロセッサを使用し、すべてファームウェアで実行することです。

ただし、何らかの理由で石のナイフとスキンを使用してこれを行う必要が本当にある場合は、トグルするフリップフロップを各正方形に割り当てます。各正方形のフリップフロップは、そのボタンまたは隣接する4つのボタンのいずれかを押すことで切り替えられます。もちろん、これらのボタンを押すと、バウンスが解除される必要があります。繰り返しますが、これはファームウェアで簡単になります。

ハードウェアソリューションはそれほど複雑ではありませんが、すべてが25回レプリケートされるため、構築するのが大きくて面倒です。

追加:

どうやら上の説明は十分に明確ではありません。以下は、各セルの内容を示す図です。

NANDゲートへの他の4つの入力は、この四角形の状態をトグルすることになっている周囲の4つのボタンのデバウンスされた信号から駆動されます。同様に、このボタンからのデバウンスされた信号も、周囲の4つのセルのそれぞれのNANDゲート入力の1つに送られます。


1
これは最も実行可能なことのように聞こえます。TFFを使用して、すべてのT入力を「1」に接続します。次に、各ボタンにSPDTモーメンタリスイッチを用意します。1スローを「0」に、1スローを「1」に、次にポールを対応するTFFクロック入力に接続します。次に、スイッチを押すと、単一のpos / negエッジが生成され、周囲のフリップフロップが切り替わります。
シャムタム

1
@Shamtam:はい、SPDTスイッチがある場合、それはデバウンスの1つの方法です。ただし、ほとんどのプッシュボタンは通常開いているSPSTです。
Olin Lathrop

プッシュボタンかどうかにかかわらず、デバウンスにはSPDTスイッチを使用する必要があると思います。このゲームの入力を接続する方法を取得しましたが、出力をLEDに接続する方法がわかりません。つまり、LEDへの単純な出力(Q)とその近傍の補数(Q ')だけではありませんか?また、別の質問ですが、TFFのクロック信号入力を使用する必要がありますか?もしそうなら、どうですか?
Julien

2
各セルのフリップフロップは、LEDを直接駆動します。隣接するセルに関係するロジックは、フリップフリップへの入力に入りますが、出力はセルに対してローカルのままです。いいえ、デバウンスにはSPDTスイッチは必要ありません。SPSTスイッチからのように、単一の信号をデバウンスするためのさまざまな手法があります。
Olin Lathrop

1
いいえ、ロジックはわかりません。通常、デバウンスされた出力はハイであるため、NANDゲートへのすべての入力はハイであり、出力をローに駆動します。いずれかのボタンを押すと、そのNANDゲット入力がローになり、NAND出力がハイになります。この低から高へのエッジにより、FFはその状態を切り替えます。
Olin Lathrop

0

単一の入力で出力状態を切り替えることができるので、Tフリップフロップがおそらく最も簡単だと思います。各LEDに1つのフリップフロップを使用し、入力をボタンに、出力をLEDに接続することができます。次に、状態を切り替えるために、各ボタンを4つの隣接するフリップフロップの入力に関連付けることができます。

JKフリップフロップを使用したい場合は、入力を両方の入力(JとK)に渡すことにより、それらからTフリップフロップを作成できます。


2
5つのスイッチを相互に干渉させることなく各フリップフロップに接続する方法を説明することで、答えを広げることができます。また、スイッチバウンスはどうですか?
Dave Tweed

0

ディスクリートロジックから最大7x7のサイズのゲームを構築したい場合、最も実用的な設計は、循環シフトレジスタを使用してボードの状態を保持し、6ビットカウンターを使用してシフトを追跡することです。レジスタ内のデータの位置。8ビットのグループでシフターを介してデータをシフトして、マルチプレックスディスプレイを駆動し、マルチプレックスキーボードをスキャンします。下位6ビットがゼロ以外のとき、または上位ビットの状態が現在デコードされているボタンの状態と一致するときに実行される7ビットの「フリップライト」カウンターを用意します。次のすべてが当てはまる場合は常に、現在のライトの状態を反転します。

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

これらのカウンター状態をデコードするにはかなりの量のロジックが必要ですが、各ライトを個別に実装するために必要なチップの数と比較すると、それは取るに足らないことです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.